一.带删除的edittext
package com.example.esp8266.activity.utile;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import com.example.esp8266.R;
/**
* @Author lgd
* @Date 2023/3/23 14:02
*/
public class DeleteContentEditText extends androidx.appcompat.widget.AppCompatEditText {
private Context mContext;
private Drawable deleteImg;
public DeleteContentEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
init(attrs);
}
public DeleteContentEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
init(attrs);
}
private void init(AttributeSet attrs) {
TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.DeleteContent_Edit);
deleteImg = typedArray.getDrawable(R.styleable.DeleteContent_Edit_deleteImg);
typedArray.recycle();
if (deleteImg != null){//判断是否添加了删除按钮
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
setDeleteImg();
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
}
private void setDeleteImg() { //设置删除按钮,输入字符串大于1时显示
if (length()< 1){
setCompoundDrawablesWithIntrinsicBounds(null,null,null,null);
}else {
setCompoundDrawablesWithIntrinsicBounds(null,null,deleteImg,null);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (deleteImg != null && event.getAction() == MotionEvent.ACTION_UP){//对内容清空
getText().clear();
}
return super.onTouchEvent(event);
}
}
使用:
<com.example.esp8266.activity.utile.DeleteContentEditText
android:id="@+id/logScan_et"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_weight="5"
app:deleteImg="@drawable/delete_ico"
android:background="@null"
android:gravity="center"
android:hint="@string/inputContent"
android:textColor="@color/black"/>
二. 定位工具类
package com.example.esp8266.activity.utile;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import androidx.core.app.ActivityCompat;
import java.util.List;
public class LocationUtils {
private volatile static LocationUtils uniqueInstance;
private LocationManager locationManager;
private String locationProvider;
private Location location;
private Context mContext;
private LocationUtils(Context context) {
mContext = context;
getLocation();
}
//采用Double CheckLock(DCL)实现单例
public static LocationUtils getInstance(Context context) {
if (uniqueInstance == null) {
synchronized (LocationUtils.class) {
if (uniqueInstance == null) {
uniqueInstance = new LocationUtils( context );
}
}
}
return uniqueInstance;
}
private void getLocation() {
//1.获取位置管理器
locationManager = (LocationManager) mContext.getSystemService( Context.LOCATION_SERVICE );
//2.获取位置提供器,GPS或是NetWork
List<String> providers = locationManager.getProviders( true );
if (providers.contains( LocationManager.NETWORK_PROVIDER )) {
//网络定位
System.out.println("网络定位");
locationProvider = LocationManager.NETWORK_PROVIDER;
} else if (providers.contains( LocationManager.GPS_PROVIDER )) {
//GPS定位
System.out.println("GPS定位");
locationProvider = LocationManager.GPS_PROVIDER;
} else {
System.out.println("没有可用的位置提供器");
return;
}
// 需要检查权限,否则编译报错,想抽取成方法都不行,还是会报错。只能这样重复 code 了。
if (Build.VERSION.SDK_INT >= 23 &&
ActivityCompat.checkSelfPermission( mContext, Manifest.permission.ACCESS_FINE_LOCATION ) != Pac