1.Dialog全屏或者固定宽度
public void installContent() {
/* We use a custom title so never request a window title */
mWindow.requestFeature(Window.FEATURE_NO_TITLE);
//输入法弹出
// if (mView == null) {
// mWindow.setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
// WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
// }
mWindow.setContentView(mCompatDialogLayout);
final CompatParams p = mParams;
if (p != null) {
if (p.mWindowFullScreen) {
//全屏显示
WindowManager.LayoutParams lp = mWindow.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
mWindow.setAttributes(lp);
mWindow.getDecorView().setPadding(0, 0, 0, 0);
} else {
WindowManager wm = (WindowManager) getContext()
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
WindowManager.LayoutParams lp = mWindow.getAttributes();
lp.width = (int) (dm.widthPixels * 0.8f);
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
mWindow.setAttributes(lp);
mWindow.getDecorView().setPadding(0, 0, 0, 0);
}
if (p.mWindowGravity > 0) {
mWindow.setGravity(p.mWindowGravity);
}
}
setupView();
}
在dialog中onCreate调用
mWindow.requestFeature(Window.FEATURE_NO_TITLE);一定要在mWindow.setContentView(mCompatDialogLayout);之前调用
设置参数 WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM后,输入法无法弹出
2.EditText过滤
在layout中过滤
限制输入数字和字母
android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
在代码中过滤
限制输入字母,汉字,数字,使用正则表达式
EditText editText = (EditText) findViewById(R.id.edit_test);
InputFilter[] oldFilters = editText.getFilters();
InputFilter[] newFilters = new InputFilter[(oldFilters != null ? oldFilters.length + 1 : 1)];
//此处是为了保证在layout中的过滤设置,如长度
if (oldFilters != null) {
System.arraycopy(oldFilters, 0, newFilters, 0, oldFilters.length);
}
newFilters[newFilters.length - 1] = new MyFilter();
editText.setFilters(newFilters);
class MyFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Log.e("whuthm", "source = " + source + " " + start + " " + end);
Log.e("whuthm", "dest = " + dest + " " + dstart + " " + dstart);
return stringFilter2(source.toString());
}
}
public static String stringFilter(String str) throws PatternSyntaxException {
// 只允许字母和数字
String regEx = "[^a-zA-Z0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
public static String stringFilter2(String str) throws PatternSyntaxException {
// 只允许字母和数字中文
String regEx = "[^a-zA-Z0-9\u4E00-\u9FA5]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}