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="adjustResize|stateHidden" />
</application>
第二种:开启硬件加速
经过我多方测试,发现问题就是硬件加速没有开启导致的
(WTF,一般开了硬件加速才会有问题,9.0不开会有问题,WTF
)
1. 在application下开启硬件加速(不用说也知道不推荐,但是的确好使)
<application
...
android:hardwareAccelerated="true"
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);
博友cnbeta1993 反馈: Xamarin VS219 16.7.4版本亲测,Application 里面加了 硬件加速就正常了,editview里面设置加速依旧没用。
以上三种请根据需要任选其一
分析问题:
(刚开始没有找对方向,走了些弯路,下面写的比较啰嗦,不喜欢的的可以跳过)
原布局文件如下:
<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,运行后出现了神奇的现象:
输入的时候没有显示字符,上划的时候输入框里字符出现了,而且留下了半拉框在键盘上方,
此时我才想到是硬件加速的问题,问题到此解决。