当前位置: 代码迷 >> Android >> Android界面隐藏软键盘的探索(兼findViewById返回null解决方法)
  详细解决方案

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

热度:51   发布时间:2016-04-28 00:03:50.0
Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)

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

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

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

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

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

当然需要在setContentView后使用;

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

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="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……

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

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

  相关解决方案