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

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

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

BUG记录:安卓9.0 EditText输入框不显示字符问题_第1张图片

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

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

先上解决办法,有两种:

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

 

android:windowSoftInputMode="adjustResize|stateHidden" 

 

    
     
        
    
    

第二种:开启硬件加速

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

(WTF,一般开了硬件加速才会有问题,9.0不开会有问题,WTFBUG记录:安卓9.0 EditText输入框不显示字符问题_第2张图片

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

    
     
        
    

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

    
     
        
    

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

        EidtText.setLayerType(View.LAYER_TYPE_HARDWARE,null);

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

 

 

分析问题:

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

原布局文件如下:



    

    

    

        

        

        
    

    

    

        

        

        
    

    

    

        

        

        
    

    

    

    

        

        

        

原清单文件:

        
同样的代码拷贝到demo里运行没有问题,项目里运行就有问题

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

        
        
        

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

一、是不是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,运行后出现了神奇的现象:

BUG记录:安卓9.0 EditText输入框不显示字符问题_第3张图片

输入的时候没有显示字符,上划的时候输入框里字符出现了,而且留下了半拉框在键盘上方,BUG记录:安卓9.0 EditText输入框不显示字符问题_第4张图片

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

你可能感兴趣的:(Android,安卓)