做系统平台开发,为电视盒子适配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);