Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)

本文详细介绍了在Android应用中遇到软键盘遮挡登录界面的问题,并提供了有效的解决方案,包括如何在Activity加载完成后屏蔽软键盘,以及如何在根布局中允许点击并关闭软键盘。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写的APP,老师说我的登陆界面虽然有ScrollView滑动,但用户体验不太好,因为软键盘会挡住输入框或登录button(小米Pad,横屏,当指定只能输入数字时没找到关闭系统自带键盘的下箭头)。

虽然我觉得ScrollView就够用了,能找到登录按钮……

在默默吐槽了下连搜狗都有的功能小米没有后,上网上搜索了下解决办法。

首先,当activity加载完成后,屏蔽EditText自动弹出软键盘,需要一句话:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

当然需要在setContentView后使用;

接着,参照网上广泛例子,给根布局id并允许点击:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/user_info_add"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="@color/white_color"
    android:clickable="true"
    android:orientation="vertical">

<!--中间省略 -->

</LinearLayout>


然后在对应的Activity里加入响应代码,响应点击:

ll_login = (LinearLayout)findViewById(R.id.ll_activity_login);
        /*点击空白区域关闭软键盘*/
        ll_login.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                case R.id.ll_activity_login:
                     InputMethodManager imm2 = (InputMethodManager)
                     getSystemService(Context.INPUT_METHOD_SERVICE);
                     imm2.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    break;
                }

            }
        });


想着该大功告成了吧,点击却发现软键盘无法关闭!

再查查看,问题出在ScrollView,他会屏蔽这种点击事件。解决办法不是没有,但找到的几个都对ScrollView和内部组件点击操作有一定影响( ̄_ ̄|||) 

既然软键盘都能隐藏了,要你何用,删掉(╯‵□′)╯︵┻━┻

最后测试一下,没问题啦,一切正常~

 

PS:软键盘其实不难,但架不住千奇百怪的ERROR:

①findViewById这句话一直运行不通过,不是他下面,是他不通过:

解决办法:网上说的,IDE问题(eclipse……哎):Project→Clean;

②findViewById运行了,他的下一句setOnClickListener运行不通过:

解决办法:Debug一下,发现ll_login的值竟然是null,网上搜索下,clean过了无视,setContentView位置在前没错,View也是当前的view……

      有人说忘记xml里定义id,我之前刚做完……等等!我写的是手机平板公用的app,横竖屏都定义了,我好像只改了port没改land里的……

      改完,debug看有值了,一切正常,哭瞎……这错误卡了我n小时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值