正常显示效果应该是这样:
在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,运行后出现了神奇的现象:
输入的时候没有显示字符,上划的时候输入框里字符出现了,而且留下了半拉框在键盘上方,