你的位置:首页 > 操作系统

[操作系统]Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)


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

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

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

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

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

当然需要在setContentView后使用;

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

 1 <??> 2 <LinearLayout ="http://schemas.android.com/apk/res/android" 3   android:id="@+id/user_info_add" 4   android:layout_width="match_parent" 5   android:layout_height="match_parent"  6   android:background="@color/white_color" 7   android:clickable="true" 8   android:orientation="vertical"> 9 10 <!--中间省略 -->11 12 </LinearLayout>

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

 1 ll_login = (LinearLayout)findViewById(R.id.ll_activity_login); 2     /*点击空白区域关闭软键盘*/ 3     ll_login.setOnClickListener(new OnClickListener(){ 4       @Override 5       public void onClick(View v) { 6         switch (v.getId()) { 7         case R.id.ll_activity_login: 8           InputMethodManager imm2 = (InputMethodManager) 9            getSystemService(Context.INPUT_METHOD_SERVICE);10           imm2.hideSoftInputFromWindow(v.getWindowToken(), 0);11           break;12         }13 14       }15     });  

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

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

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

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

 

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

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

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

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

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

      有人说忘记

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