2023年7月15日发(作者:)
ScrollView与EditText焦点、输⼊法弹出问题、常⽤属性随记1、EditText弹出软键盘遮住输⼊框问题
在Activity中添加配置在该Activity中的onCretae()的setContentView()⽅法前⾯添加:getWindow().setSoftInputMode(_INPUT_ADJUST_PAN)含义:把整个Layout顶上去露出获得焦点的EditText,不压缩多余空间.解释他们的含义:SOFT_INPUT_ADJUST_NOTHING: 不调整(输⼊法完全直接覆盖住,未开放此参数);SOFT_INPUT_ADJUST_PAN:把整个Layout顶上去露出获得焦点的EditText,不压缩多余空间SOFT_INPUT_ADJUST_RESIZE: 整个Layout重新编排,重新分配多余空间;SOFT_INPUT_ADJUST_UNSPECIFIED: 系统⾃⼰根据内容⾃⾏选择上两种⽅式的⼀种执⾏(默认配置).这⾥SOFT_INPUT_ADJUST_RESIZE和SOFT_INPUT_ADJUST_PAN和上⾯中的adjustResize和adjustPan效果是⼀样的.@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) { te(savedInstanceState); //让布局向上移来显⽰软键盘 getWindow().setSoftInputMode(_INPUT_ADJUST_PAN); setContentView(ty_login); init();}2、EditText和ScrollView连⽤导致EdtiText⽆法获取焦点或焦点⼀闪⽽逝
在布局⽂件xml⾥ ScrollView标签添加属性 android:descendantFocusability="blocksDescendants"//后代可聚焦性 EditText标签添加属性 android:clickable="true"//可点击 android:focusable="true"//可获取焦点 android:enabled="true"//启⽤
3、实现点击EditText外部隐藏输⼊法且EditText失去焦点(这块焦点逻辑可⽤于其他控件标签) (1)重写dispatchTouchEvent @Override public boolean dispatchTouchEvent(MotionEvent ev) { if(ion()==_DOWN){ View v = getCurrentFocus(); if (isShouldHideInput(v, ev)) {//判断当前点击屏幕的地⽅是否是软键盘 setFocusables(mETProjectName, false);//使EditText失去焦点,参数2位true则获取焦点,记得在合适的地⽅⾄true,否则ET将⽆法获取焦点 if (hideSoftInputMethod(this, v)) {//隐藏输⼊法软键盘 return true; //隐藏键盘时,其他控件不响应点击事件==》注释则不拦截点击事件 } } } return chTouchEvent(ev); } private void setFocusables(EditText editText, Boolean b) { usable(b); usableInTouchMode(b); tFocus(); }
/** * 判断当前点击屏幕的地⽅是否是软键盘 * @param v * @param event * @return */ public static boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] leftTop = { 0, 0 }; ationInWindow(leftTop); int left = leftTop[0], top = leftTop[1], bottom = top + ght(), right = left + th(); if (() > left && () < right && () > top && () < bottom) { // 保留点击EditText的事件 return false; } else { return true; } } return false; } /** * 隐藏软键盘 * @param context * @param v * @return */ public static Boolean hideSoftInputMethod(Context context, View v) { InputMethodManager imm = (InputMethodManager) context .getSystemService(_METHOD_SERVICE); if (imm != null) { return ftInputFromWindow(dowToken(), 0); } return false; } getWindow().setSoftInputMode(_INPUT_ADJUST_PAN);//把整个Layout顶上去露出获得焦点的EditText,不压缩多余空间4、EditText输⼊的⽂字为密码形式的设置 (1)通过.xml⾥设置:把该EditText设为:android:password="true" // 以”.”形式显⽰⽂本(2)在代码⾥设置:通过设置EditText的setTransformationMethod()⽅法来实现隐藏密码或这显⽰密码。nsformationMethod(tance());//设置密码为不可见。5、EditText输⼊的⽂字为电话号码
Android:phoneNumber=”true” //输⼊电话号码6、EditText字数限制的设置
(1)在.xml中设置:android:maxLength=“50”
(2)代码中设置:
ters(new InputFilter[]{Filter(100)});7、EditText设置字体
android:typeface="monospace" //设置字型。字形有:normal, sans, serif,monospaceandroid:numeric="integer"//只接受数字 android:numeric来控制输⼊的数字类型,⼀共有三种分别为integer(正整数)、signed(带符号整数,有正负)和decimal(浮8、在EditText中软键盘的调起、关闭
(1)EditText有焦点(focusable为true)阻⽌输⼊法弹出 editText=(EditText)findViewById(y); ouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event){
utType(_NULL); //关闭软键盘
return false; } });(2)当EidtText⽆焦点(focusable=false)时阻⽌输⼊法弹出 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
ftInputFromWindow(dowToken(),0);(3)调⽤数字键盘并设置输⼊类型和键盘为英⽂ utType(_CLASS_NUMBER); //调⽤数字键盘 utType(_TEXT_FLAG_MULTI_LINE);//设置输⼊类型和键盘为英⽂ 或者:android:inputType="textUri|textMultiLine"(4)android:focusable="false"//键盘永远不会弹出
10、android:layout_gravity和android:gravity的区别
(1)android:layout_gravity是本元素对⽗元素的重⼒⽅向。(2)android:gravity是本元素所有⼦元素的重⼒⽅向11、使⽤android:imeOptinos可对Android⾃带的软键盘进⾏⼀些界⾯上的设置:
android:imeOptions="flagNoExtractUi" //使软键盘不全屏显⽰,只占⽤⼀部分屏幕 同时,这个属性还能控件软键盘右下⾓按键的显⽰内容,默认情况下为回车键 android:12、限定edittext能输⼊数字和字母,并且默认输⼊为数字,如⾝份证号码
android:inputType="number" android:digits="xyzXYZ"//指定输⼊法的类型,int类型,可以⽤|选择多个。取值可以参考:ype类。取值13、edittext光标详解
tFocusFromTouch();//让光标放⼊到点击位置。 tFocus();//默认⽅式获得焦点EditText editor = (EditText)getCurrentView();//光标处插⼊ int cursor = ectionStart(); t().insert(cursor,delta);让光标移到末端(这样⽂字就会向前显⽰) EditText et = ... String text = "text"; t(text); ection(());android:cursorVisible="false" 隐藏光标android:background="#00000000"//不要⽂本框背景14、EditText 常⽤属性汇总 android:layout_gravity="center_vertical" 设置控件显⽰的位置:默认top,这⾥居中显⽰,还有bottom android:hint="请输⼊数字!"设置显⽰在空间上的提⽰信息 android:numeric="integer" 设置只能输⼊整数,如果是⼩数则是:decimal android:singleLine="true" 设置单⾏输⼊,⼀旦设置为true,则⽂字不会⾃动换⾏。android:password="true" 设置只能输⼊密码android:textColor = "#ff8c00" 字体颜⾊android:textStyle="bold" 字体,bold, italic, bolditalic android:textSize="20dip" ⼤⼩android:capitalize = "characters" 以⼤写字母写android:textAlign="center" EditText没有这个属性,但TextView有 android:textColorHighlight="#cccccc" 被选中⽂字的底⾊,默认为蓝⾊android:textColorHint="#ffff00" 设置提⽰信息⽂字的颜⾊,默认为灰⾊ android:textScaleX="1.5" 控制字与字之间的间距android:typeface="monospace" 字型,normal, sans, serif, monospace android:background="@null" 空间背景,这⾥没有,指透明android:layout_weight="1" 权重,控制控件之间的地位,在控制控件显⽰的⼤⼩时蛮有⽤的。1. 密码框属性 android:password="true" 这条可以让EditText显⽰的内容⾃动为星号,输⼊时内容会在1秒内变成*字样。2. 纯数字 android:numeric="true" 这条可以让输⼊法⾃动变为数字输⼊键盘,同时仅允许0-9的数字输⼊3. 仅允许 android:capitalize="cwj1987" 这样仅允许接受输⼊cwj1987,⼀般⽤于密码验证 下⾯是⼀些扩展的风格属性android:editable="false" 设置EditText不可编辑android:singleLine="true" 强制输⼊的内容在单⾏android:ellipsize="end" ⾃动隐藏尾部溢出数据,⼀般⽤于⽂字内容过长⼀⾏⽆法全部显⽰时android:textAppearance="?android:attr/textAppearanceLargeInverse" ⽂字外观,这⾥引⽤的是系统⾃带的⼀个外观,?表⽰系统是否有这种外观,否则使⽤默认的
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689428127a246532.html
评论列表(0条)