android7.1 Settings drawerlayout焦点问题

做系统平台开发,为电视盒子适配android7.1系统,发现设置里面的侧滑栏不能用遥控器器操作,究其原因是该控件没有或得到焦点。

尝试很多获得焦点的方法都不管用,最后采用折中的办法,给ui线程发时延时消息来获取焦点。

--- a/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
+++ b/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
@@ -55,6 +55,9 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
+import android.os.Handler;
+import android.os.Message;
+
 public class SettingsDrawerActivity extends Activity {
 
     protected static final boolean DEBUG_TIMING = false;
@@ -78,6 +81,14 @@ public class SettingsDrawerActivity extends Activity {
     private DrawerLayout mDrawerLayout;
     private boolean mShowingMenu;
     private UserManager mUserManager;
+       
+       private ListView lv;
+       
+       private Handler mHandler = new Handler(){
+               public void handleMessage(Message msg) {
+                       lv.requestFocus();
+        }
+       };
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -115,6 +126,7 @@ public class SettingsDrawerActivity extends Activity {
                 onTileClicked(mDrawerAdapter.getTile(position));
             }
         });
+               lv = listView;
 
         mUserManager = UserManager.get(this);
         if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
@@ -126,6 +138,7 @@ public class SettingsDrawerActivity extends Activity {
         if (mShowingMenu && mDrawerLayout != null && item.getItemId() == android.R.id.home
                 && mDrawerAdapter.getCount() != 0) {
             openDrawer();
+                       mHandler.sendEmptyMessageDelayed(1, 200);
             return true;
         }
         return super.onOptionsItemSelected(item);


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值