android中控件焦点问题和输入法的显示与隐藏

一、焦点问题

  1、焦点问题

  开发中常遇到的问题,特别是列表类控件(尤以ListView为甚,现在不建议列表控件使用ListView,这已经过时很久,现在RecyclerView已经普及)。大家可能遇到过,用一个容器类控件(布局)去装很多个视图类控件

(Button,ImageView,ImageButton,CheckBox...等)作为列表控件的Item,然后去点击Item时,没有反应,整个Item无法获取到焦点。原因在于在自定义的Item中存在包含Clickable或Checkable属性的子类控件,如

Button,ImageButton,CheckBox等。这些控件会在初始化之初,将焦点获取到,所以常常点击Item变化的是Item的子控件,而Item本身没有反应。Google为解决此类问题,在xml中定义了一个属性android:descendantFocusability。

  2android:descendantFocusability

  android:descendantFocusability 定义了当一个View获取焦点时,ViewGroup与其子控件两者之间的关系。

  该属性的值有三种:

                  beforeDescendants:viewgroup会优先其子类控件而获取到焦点

                  afterDescendants: viewgroup只有当其子类控件不需要获取焦点时才获取焦点

                  blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

二、输入法的显示与隐藏

  1、获取系统默认输入法管理器

  InputMethodManager imManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

  2、显示系统默认输入法(SHOW_FORCED为强制显示

  imManager.showSoftInput(View,InputMethodManager.SHOW_FORCED);//View为需要键盘输入的视图

  3、隐藏系统默认输入法

  imManager.hideSoftInputFromWindow(View.getWindowToken(), 0);//View为需要键盘隐藏的视图

  或者

  imManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NO   T_ALWAYS);

  4、如果输入法在窗口上已经显示,则隐藏,反之则显示

  imManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);  

  5、获取输入法是否显示的状态

  boolean isShow = imManager.isActive();//true为已经显示,false为隐藏

  6、如果一个页面包含Edittext控件,在页面显示时,Edittext会自动获得焦点,并弹出软键盘,如果不想弹出软键 盘有两种类型的方法:

  ①在清单文件中将对应的Activity设置:

  android:windowSoftInputMode="stateHidden"

  或者

  android:windowSoftInputMode="stateUnchanged"

  ②让页面内其他不是Edittext类型的控件获得焦点

  一般操作为,在xml中为其他控件添加:

  android:focusable="true"

  android:focusableInTouchMode="true"

  即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值