BUG记录:安卓9.0 EditText输入框不显示字符问题

    xiaoxiao2022-07-03  133

    EditText输入密码不显示字符问题

    正常显示效果应该是这样:

    在9.0系统显示异常,现象如下:

    可以看到,上面的两个输入框输入字符的时候都是实时显示的,当光标移动到最下方的输入框的时候,光标都停止跳动了,而且输入字符不会实时显示,当键盘收回的时候字符又出现了。

    先上解决办法,有两种:

    第一种:将 android:windowSoftInputMode 设置为 "adjustResize|stateHidden" (不推荐)

     

    android:windowSoftInputMode="adjustResize|stateHidden"

     

    <application ... android:hardwareAccelerated= "false" android:theme= "@style/Theme.AppCompat.Light.NoActionBar"> <activity android:name= ".activity.LoginActivity" ... android:windowSoftInputMode= "adjustUnspecified|stateHidden" /> </application>

    第二种:开启硬件加速

    经过我多方测试,发现问题就是硬件加速没有开启导致的

    (WTF,一般开了硬件加速才会有问题,9.0不开会有问题,WTF)

    1. 在application下开启硬件加速(不用说也知道不推荐,但是的确好使)

    <application ... android:hardwareAccelerated= "false" android:theme= "@style/Theme.AppCompat.Light.NoActionBar"> <activity android:name= ".activity.LoginActivity" ... android:windowSoftInputMode= "adjustUnspecified|stateHidden" /> </application>

    2. 在activity节点下开启硬件加速(可以,推荐)

    <application ... android:hardwareAccelerated= "false" android:theme= "@style/Theme.AppCompat.Light.NoActionBar"> <activity android:name= ".activity.LoginActivity" ... android:hardwareAccelerated= "true" android:windowSoftInputMode= "adjustUnspecified|stateHidden" /> </application>

    3. 对指定的view开启硬件加速(强烈推荐)

    EidtText.setLayerType(View.LAYER_TYPE_HARDWARE,null);

    以上三种请根据需要任选其一

     

     

    分析问题:

    (刚开始没有找对方向,走了些弯路,下面写的比较啰嗦,不喜欢的的可以跳过)

    原布局文件如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" android:layout_centerInParent= "true" android:layout_centerHorizontal= "true" android:layout_centerVertical= "true" android:paddingLeft= "40dp" android:paddingRight= "40dp" android:background= "@color/white_color" android:focusable= "true" android:focusableInTouchMode= "true" android:gravity= "center" android:orientation= "vertical"> <ImageView android:layout_width= "96dp" android:layout_height= "94dp" android:background= "#99666666" /> <TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_marginTop= "5dp" android:text= "@string/app_name" android:textColor= "#585858" android:textSize= "20sp" android:visibility= "invisible" /> <LinearLayout android:layout_width= "match_parent" android:layout_height= "wrap_content" android:layout_marginTop= "25dp" android:orientation= "vertical"> <TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_marginLeft= "5dp" android:layout_marginBottom= "5dp" android:text= "企业号:" android:textSize= "14sp" /> <ImageView android:id= "@+id/iv_company" android:layout_width= "40dp" android:layout_height= "40dp" android:padding= "4dp" android:scaleType= "fitXY" android:src= "@drawable/ic_title_home_default" android:visibility= "gone" /> <EditText android:id= "@+id/et_company_login" android:layout_width= "match_parent" android:layout_height= "match_parent" android:layout_marginLeft= "5dp" android:background= "@drawable/selector_login_edittext" android:hint= "请输入企业号" android:imeOptions= "actionNext" android:lines= "1" android:padding= "10dp" android:paddingLeft= "5dp" android:singleLine= "true" android:textColor= "#585858" android:textSize= "14sp" /> </LinearLayout> <View android:id= "@+id/view_userfocus_login" android:layout_width= "match_parent" android:layout_height= "1dp" android:background= "@color/white_color" /> <LinearLayout android:layout_width= "match_parent" android:layout_height= "wrap_content" android:layout_marginTop= "10dp" android:orientation= "vertical"> <ImageView android:id= "@+id/iv_user_login" android:layout_width= "40dp" android:layout_height= "40dp" android:padding= "4dp" android:scaleType= "fitXY" android:src= "@drawable/user_white" android:visibility= "gone" /> <TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_marginLeft= "5dp" android:layout_marginBottom= "5dp" android:text= "用户名:" android:textSize= "14sp" /> <EditText android:id= "@+id/et_user_login" android:layout_width= "match_parent" android:layout_height= "match_parent" android:layout_marginLeft= "5dp" android:background= "@drawable/selector_login_edittext" android:hint= "用户名" android:imeOptions= "actionNext" android:lines= "1" android:padding= "10dp" android:paddingLeft= "5dp" android:singleLine= "true" android:textColor= "#585858" android:textSize= "14sp" /> </LinearLayout> <View android:layout_width= "match_parent" android:layout_height= "1dp" android:background= "@color/white_color" /> <LinearLayout android:layout_width= "match_parent" android:layout_height= "wrap_content" android:layout_marginTop= "10dp" android:orientation= "vertical"> <ImageView android:id= "@+id/iv_password_login" android:layout_width= "40dp" android:layout_height= "40dp" android:padding= "4dp" android:scaleType= "fitXY" android:src= "@drawable/password_white" android:visibility= "gone" /> <TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_marginLeft= "5dp" android:layout_marginBottom= "5dp" android:text= "密码:" android:textSize= "14sp" /> <EditText android:id= "@+id/et_password_login" android:layout_width= "match_parent" android:layout_height= "40dp" android:layout_marginLeft= "5dp" android:background= "@drawable/selector_login_edittext" android:hint= "密码" android:imeOptions= "actionDone" android:inputType= "textPassword" android:lines= "1" android:padding= "10dp" android:paddingLeft= "5dp" android:singleLine= "true" android:textColor= "#585858" android:textSize= "14sp" /> </LinearLayout> <View android:id= "@+id/view_pwdfocus_login" android:layout_width= "match_parent" android:layout_height= "1dp" android:background= "@color/white_color" /> <TextView android:id= "@+id/btn_login" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:layout_marginTop= "30dp" android:background= "@drawable/selector_greem_btn_bg" android:gravity= "center" android:padding= "8dp" android:text= "登 录" android:textColor= "@color/white_color" android:textSize= "16sp" /> <RelativeLayout android:layout_width= "match_parent" android:layout_height= "40dp" android:layout_marginTop= "15dp"> <CheckBox android:id= "@+id/cb_remember_login" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_alignParentStart= "true" android:layout_alignParentLeft= "true" android:layout_centerVertical= "true" android:background= "@drawable/selector_remember_login" android:button= "@null" /> <TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_centerVertical= "true" android:layout_marginLeft= "5dp" android:layout_toRightOf= "@+id/cb_remember_login" android:text= "记住密码" android:textSize= "@dimen/text_moderate_size" /> <Button android:id= "@+id/btn_config_login" android:layout_width= "80dp" android:layout_height= "match_parent" android:layout_alignParentRight= "true" android:background= "@drawable/login_item_btn" android:onClick= "onConfig" android:text= "系统配置" android:textColor= "#149048" android:textSize= "@dimen/text_moderate_size" android:visibility= "gone" /> </RelativeLayout> </LinearLayout>

    原清单文件:

    <activity android:name= ".activity.LoginActivity" android:configChanges= "orientation|keyboardHidden|navigation|screenSize" android:icon= "@drawable/user_btn" android:launchMode= "singleTask" android:screenOrientation= "portrait" android:windowSoftInputMode= "adjustPan|stateHidden" /> 同样的代码拷贝到demo里运行没有问题,项目里运行就有问题

    随后将清单文件简化如下:

    <activity android:name= ".activity.LoginActivity" android:windowSoftInputMode= "adjustPan|stateHidden" /> <activity android:name=".activity.LoginActivity"/> <activity android:name= ".activity.LoginActivity" android:windowSoftInputMode= "adjustUnspecified|stateHidden" />

    问题都没有解决,随后猜测:

    一、是不是java文件的某些代码造成的?

    二、是不是键盘弹出对输入框有遮挡?

    验证第一个猜想:

    1.将布局中的第二个输入框用户名和第三个输入框密码调换位置,运行后发现:密码输入框正常,用户名输入框产生了同样的问题;

    2.将布局中的密码输入框复制一份在最后,去掉控件的 id,运行后发现:两个密码框都出现了上述问题;

    3.将LoginActivity改成如下:

    public class LoginActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); } }

    运行后发现:问题依然存在

    结论:该问题与java代码无关

    验证第二个猜想:

    将多个EditText竖直方向并列放在LinearLayout中,外层包裹一个NestedScrollView,运行后出现了神奇的现象:

    输入的时候没有显示字符,上划的时候输入框里字符出现了,而且留下了半拉框在键盘上方,

    此时我才想到是硬件加速的问题,问题到此解决。

    ————————————————
    如果你觉得本人的文章对你有所帮助,客官慢走赏瓶水喝
    最新回复(0)