一.dp与px之间的转换
public class PixelUtils {
public static int dip2px(Context context,float dpValue){
float scale=context.getResources().getDisplayMetrics().density;
return (int)(dpValue*scale+0.5f);
}
public static int px2dip(Context context,float pxValue){
float scale=context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale+0.5f);
}
public static int getScreenWidth(Context context){
WindowManager windowManager= (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.widthPixels;
}
public static int getScreenHeight(Context context){
WindowManager windowManager= (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
public static float getScreenDensity(Context context){
WindowManager windowManager= (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.density;
}
}
二.获取编辑框最大长度和关闭软键盘
public class WidgetUtil {
public static int getMaxLength(EditText editText) {
int length = 0;
try {
InputFilter[] inputFilters = editText.getFilters();
for (InputFilter filter : inputFilters) {
Class<?> c = filter.getClass();
if (c.getName().equals("android.text.InputFilter$LengthFilter")) {
Field[] f = c.getDeclaredFields();
for (Field field : f) {
if (field.getName().equals("mMax")) {
field.setAccessible(true);
length = (Integer) field.get(filter);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return length;
}
public static void hideAllInputMethod(Activity act) {
InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
public static void hideOneInputMethod(Activity act, View view) {
InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
三.在输入文本达到指定长度时自动隐藏输入法
public class HideTextWatcher implements TextWatcher {
private EditText editText;
private Activity activity;
private int maxLength;
private CharSequence mStr;
public HideTextWatcher(Activity activity, EditText editText) {
super();
this.activity = activity;
this.editText = editText;
maxLength = WidgetUtil.getMaxLength(editText);
}
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
}
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
mStr = charSequence;
}
public void afterTextChanged(Editable s) {
if (mStr == null || mStr.length() == 0)
return;
if (mStr.length() == maxLength) {
WidgetUtil.hideOneInputMethod(activity,editText);
}
}
}
EditText editText = findViewById(R.id.edit);
editText.addTextChangedListener(new HideTextWatcher(MainActivity.this,editText));
四.在输入回车符时自动跳到下一个控件
public class JumpTextWatcher implements TextWatcher {
private EditText thisView;
private EditText nextView;
public JumpTextWatcher(EditText thisText, EditText nextView) {
super();
this.thisView=thisText;
this.nextView=nextView;
}
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {}
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {}
public void afterTextChanged(Editable editable) {
String str = editable.toString();
if (str.contains("\r") || str.contains("\n")) {
thisView.setText(str.replace("\r", "").replace("\n", ""));
nextView.requestFocus();
nextView.setSelection(nextView.getText().length());
}
}
}
EditText editText1 = findViewById(R.id.edit1);
EditText editText2 = findViewById(R.id.edit2);
editText1.addTextChangedListener(new JumpTextWatcher(editText1, editText2));
editText2.addTextChangedListener(new JumpTextWatcher(editText2, editText1));