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小时

时间: 2024-12-29 11:33:05

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

HTML 在安卓手机端软键盘弹出顶起页面布局的解决办法

$('body').height($('body')[0].clientHeight); 以上是背景即BODY被顶起的解决办法. 如果是footer被顶起,则可以用判断解决, $('input').focus(function(){ $('.share').css('display','none'); }) $('input').blur(function(){ $('.share').css('display','block'); })

Android项目:输入法软键盘显示/隐藏的监听和控制,InputMethodManager用法研究

在项目开发中,用到编辑框的地方经常涉及到要监听或者控制软键盘的显示/隐藏状态.本以为这是很容易解决的一个小问题,没想到当初碰到这个问题才明白还得花点小心思才能整好.现将针对软键盘的显示/隐藏状态的监听/监控方法做一些总结,以备后用. 一.点击空白处隐藏软键盘 这是具有编辑框焦点的页面对输入法软键盘状态监听的一般需求和解决方法. 首先获得InputMethodManager:        InputMethodManager manager = (InputMethodManager) getS

Android点击空白处,隐藏软键盘

在做登陆或者注册的时候,软键盘经常可能会挡住一些界面.我们需要在输入完成之后隐藏软键盘. 在我们点击空白处或者非EditText的地方来隐藏软键盘. public class HomeActivity extends Activity { ...... @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // 获得当前得到焦点的

Android 完美的隐藏软键盘方法

最近有这么一个需求:在点击EditText时弹出软键盘,然后在点击空白处或者其他控件的时候隐藏软键盘.这个需求在平板电脑上非常实用,因为屏幕大,用户不可能每次都点左下角去隐藏,并且点击空白处更容易. 刚开始从网上搜索,不是很理想,后来突然想到Android的事件分发机制,于是想到了实现方法: publicclassHomeActivityextendsActivity{     ......     @Override     publicboolean dispatchTouchEvent(M

[转]Android 完美的隐藏软键盘方法 点击编辑框外软键盘消失

最近有这么一个需求:在点击EditText时弹出软键盘,然后在点击空白处或者其他控件的时候隐藏软键盘.这个需求在平板电脑上非常实用,因为屏幕大,用户不可能每次都点左下角去隐藏,并且点击空白处更容易. 刚开始从网上搜索,不是很理想,后来突然想到Android的事件分发机制,于是想到了实现方法: public class HomeActivity extends Activity { ...... @Override public boolean dispatchTouchEvent(MotionE

Android隐藏软键盘

1,用java代码隐藏: /**隐藏软键盘**/        View view = getWindow().peekDecorView();        if (view != null) {            InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);            inputmanger.hideSoftInputF

Android开发,在Activity启动时,默认隐藏软键盘。和遮挡Edittext时的处理

在Activity启动时,默认隐藏软键盘: 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="stateAlwaysHidden" ------------------------ 输入遮挡Edittext时的处理: 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="adjustPan&qu

Android开发之如何隐藏软键盘

在Activity文件中加入下面的函数,实现点击空白处隐藏键盘: 1 @Override 2 public boolean onTouchEvent(MotionEvent event) 3 { 4 if(event.getAction()==MotionEvent.ACTION_DOWN){ 5 if(this.getCurrentFocus().getWindowToken()!=null){ 6 //获取此Activity的软键盘服务 7 InputMethodManager imm=(I

Android -- 打开时隐藏软键盘

当activity中有edittext时,软键盘会自动弹出,有时希望隐藏软键盘(并保留edittext的focus,比如扫码)可以在activity onCreate时,使用以下代码来实现: this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);