Android中关于APK对遥控器支持的修改

        最近,对Andoid中APK做了一些修改,让其支持遥控器的支持,这把人弄得焦头烂额,好不郁闷,这里特别记录下思路,留给有需要的同志。

        其实Android本身是做了对遥控器的上下左右按键的焦点移动控制,以及对Enter键的响应,现在知道的原因就是1:View的子类在派生时对其动作做了从写,导致其焦点控制失效;2:不明原因导致焦点控制失败。该文只是从功能上总结了自己在APK的IR修改中摸索出的一些方法,来达到支持IR控制的效果。

    思路一:android提供了一些焦点相关的属性,在现有的框架层下通过设置View的属性来获得焦点

    android:focusable:设置一个控件能否获得焦点
    android:background:设置在作为背景的drawable
    android:nextFocusDown:定义下一个获得焦点的控件当按下键时
    android:nextFocusUp:定义下一个获得焦点的控件当按上键时
    android:nextFocusLeft:定义下一个获得焦点的控件当按左键时
    android:nextFocusRight:定义下一个获得焦点的控件当按右键时
    <requestFocus/>:强制设置一个焦点到指定的view或它的一个子类,前提是android:focusable为true能够获得焦点

实例一:

    <ImageButton
        android:id="@+id/close"
        android:focusable="true"
        android:nextFocusDown="@+id/url"
        android:background="?android:attr/selectableItemBackground"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/accessibility_button_closetab"
        android:src="@drawable/ic_tab_close" />

实例二:

  <EditText android:id="@+id/user_dictionary_add_word_text"
        ……
        ……
        android:imeOptions="flagNoFullscreen">
        <requestFocus />
  </EditText>

实践经验:如果XML设置无效的话,尝试下在代码中XXX.requestFocus()显式设置

         思路二:自己管理焦点的移动,自己进行高亮的重绘,自己进行enter键的响应,总之:一切都靠你自己

Step 1:焦点的移动,首先你就要做到IR按键的捕获与响应

         单独Activity的话,下面的两组函数都能够捕获按键消息

public boolean dispatchKeyEvent (KeyEvent event) 
public boolean onKeyDown (int keyCode, KeyEvent event)
public boolean onKeyUp(int keyCode, KeyEvent event)

public boolean dispatchKeyEventPreIme (KeyEvent event)
public boolean onKeyPreIme (int keyCode, KeyEvent event)

一般来说重写onKeyDownonKeyUp就可以了,但需要在输入法之前做一些动作,便需要重写

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值