EditText弹出软键盘遮住输入框问题

如果在activity中的布局的下方有EditText,获取焦点的时候,弹出软键盘,会遮盖输入框

需要用到EditText的布局大概分为两种,一种是页面显示的内容不希望有残缺,比如软键盘把标题挤出了屏幕,如登录注册搜索等,EditText多半在页面上半部分.另一种是页面的上半部分不重要,比如聊天窗口,软键盘弹出的时候,上半部分的聊天记录可以被基础屏幕外,EditText多半在最下方.

网上针对这个问题解决的方法大概这个几种:

  1. 修改AndroidManifest.xml文件
  2. 在activity中添加配置
  3. 在布局文件中添加ScrollView

修改Manifest.xml文件

在Manifest.xml中对应的activity中配置:android:windowSoftInputMode="stateVisible|adjustResize

<activity
            android:name=".LoginActivity"
            //显示软键盘,并让布局压缩
            android:windowSoftInputMode="stateVisible|adjustResize"
            android:screenOrientation="portrait">
</activity>

解释它们的含义:
stateUnspecified:界面没有设置“android:windowSoftInputMode” 时的状态。这个状态是在有EditText的界面时不弹出软键盘,当EditText获取焦点的时候,弹出全键盘

stateUnchanged:状态不改变,意思就是和上一个界面相同,上一个界面弹出软键盘,跳转到这个界面时,软键盘也是弹出状态

stateHidden:隐藏键盘,弹出这个界面的时候,不管上个界面时什么状态,这个界面的软键盘都是隐藏的

stateAlwaysHidden:一直隐藏(跟上面的区别未知,试不出来)

stateVisible:强制弹出软键盘,跳转到界面后,没有EditText也弹出键盘

stateAlwaysVisible:一直显示键盘(同上).

下面是跟内容相关的,也跟文本相关的

adjustUnspcified:算是默认方式,如果界面没有被ScrowView包裹,键盘会挡住一部分内容,如果被包裹,会让ScrowView中的内容滚动,以放下键盘

adjustResize:主界面会缩放,用来放置软键盘
这里写图片描述
这里写图片描述

adjustPan:主界面不会缩放,会向上放置软键盘
这里写图片描述

上面两个不同的地方在于,如果内容是listview,当现实最下面一个item后弹出软键盘,adjustResize会让listview下沿被软键盘挡住,adjustPan则还是现实最下面一个item.


在activity中添加配置

在该Activity中的onCretae()的setContentView()方法前面添加:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)

含义:

SOFT_INPUT_ADJUST_NOTHING:不调整(输入法完全直接覆盖,未开放此参数)

SOFT_INPUT_ADJUST_PAN:把这个Layout顶上去露出获得焦点的EditText,不压缩多余空间

SOFT_INPUT_ADJUST_RESIZE:整个Layout重新编排,重新分配多余空间

 SOFT_INPUT_ADJUST_UNSRECIFIED:系统自己根据内容自行选择上两种方式的一种执行(默认配置)
@Overrideprotected
 void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //让布局向上移来显示软键盘
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    setContentView(R.layout.activity_login);
    init();
}


在布局中添加ScrollView

ScrollView是能让弹出的软键盘添加到布局的下面,从而不挡住部分布局.这里往往需要跟上面的adjustResize和adjustPan两个状态一起用.

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="8"
    android:fillViewport="true">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="50dp" />
    </LinearLayout>
</ScrollView>

向上移的方式 设置:

<activity
        android:name=".SecondActivity"
        android:windowSoftInputMode="adjustPan"></activity>

压缩的方式 设置:

 <activity
        android:name=".SecondActivity"
        android:windowSoftInputMode="adjustResize"></activity>

结果:
只要弹出软键盘会影响到布局的情况,都用ScrollView把布局包裹起来,被包裹的内容就是可能被缩放或挤出屏幕外的内容.然后根据EditText的位置判断用adjustResize还是用adjustPan.
adjustResize是收缩adjustPan是向上挤 个人推荐,登录注册用adjustResize,聊天窗口用adjustPan

链接:http://www.jianshu.com/p/1fb4f6d61ca3
來源:简书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值