zoukankan      html  css  js  c++  java
  • 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小时

    ————————————————————————————————————————————————
    来自企鹅娘的问候:
    欢迎交流哦,如果有帮助转载的话,请务必注明出处"企鹅娘's 学习笔记",让我也小小的开心一下
  • 相关阅读:
    C# 中字符串转换成日期
    c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);
    c#获取程序版本号
    分分钟用上C#中的委托和事件
    【转载】C# 中的委托和事件(详解:简单易懂的讲解)
    C#什么时候需要使用构造函数
    15、生命周期-BeanPostProcessor-后置处理器
    13、生命周期-InitializingBean和DisposableBean
    11、组件注册-使用FactoryBean注册组件
    12、生命周期-@Bean指定初始化和销毁方法
  • 原文地址:https://www.cnblogs.com/hopecapital/p/4647613.html
Copyright © 2011-2022 走看看