Android的焦点(Focus)问题 focusable

今天解决了一个Android平台下的焦点问题。发现其中关键问题的所在是Android的touchMode。从JavaSwing平台过来的人,都会关注setFocusable()和requestFocus()方法,但是在Android的View中还有另外的两个个方法,setFocusableInTouchMode()和requestFocusFromTouch()方法。这个两个方法就是解决Android上的焦点获取问题的关键。


同时在View类中,还有一个isInTouchMode(),可以帮助我们在监听Focuse事件时判断是否执行click(). 代码如下:

 

今天解决了一个Android平台下的焦点问题。发现其中关键问题的所在是Android的touchMode。从JavaSwing平台过来的人,都会关注setFocusable()和requestFocus()方法,但是在Android的View中还有另外的两个个方法,setFocusableInTouchMode()和requestFocusFromTouch()方法。这个两个方法就是解决Android上的焦点获取问题的关键。


同时在View类中,还有一个isInTouchMode(),可以帮助我们在监听Focuse事件时判断是否执行click(). 代码如下:

XML/HTML代码
  1. ImageButton.OnFocusChangeListener mFocusChangeListener = new ImageButton.OnFocusChangeListener(){ 
  2.      
  3.     public void onFocusChange(View v, boolean hasFocus) { 
  4.         Log.d("FocuseChange", "Focuse has changed."); 
  5.           if (hasFocus) { 
  6.                    // 如果是touchmode就执行click,否则就会只是选中。  
  7.               v.setBackgroundDrawable(getResources().getDrawable(R.drawable.)); 
  8.               if (v.isInTouchMode()){ 
  9.                   ((ImageButton)v).performClick(); 
  10.               }  
  11.           } else { 
  12.               v.setBackgroundDrawable(getResources().getDrawable(R.)); 
  13.               v.getBackground().setAlpha(100); 
  14.           } 
  15.          
  16.     } 
  17. }; 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,焦点移动可以通过以下几种方式实现: 1. 通过代码设置焦点:可以通过调用 View 的 requestFocus() 方法来设置焦点,例如: ``` EditText editText = findViewById(R.id.editText); editText.requestFocus(); ``` 2. 通过 XML 属性设置焦点:可以在 XML 文件中使用 android:focusableandroid:focusableInTouchMode 属性来设置 View 是否可获得焦点,例如: ``` <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" /> ``` 3. 通过监听器处理焦点:可以通过设置 View 的 OnFocusChangeListener 来监听焦点变化事件,例如: ``` editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { // 处理获取焦点事件 } else { // 处理失去焦点事件 } } }); ``` 4. 通过键盘事件处理焦点:可以在处理键盘事件时,根据当前焦点 View 的 ID 或位置,计算出下一个需要获得焦点的 View,并调用其 requestFocus() 方法来设置焦点,例如: ``` editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) { View nextView = v.focusSearch(View.FOCUS_DOWN); if (nextView != null) { nextView.requestFocus(); return true; } } return false; } }); ``` 以上是几种常见的焦点移动方式,可以根据自己的需求选择合适的方式来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值