栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

动作栏主屏幕按钮不适用于嵌套的PreferenceScreen

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动作栏主屏幕按钮不适用于嵌套的PreferenceScreen

我最近有这个问题,这就是我解决的方法。首先,要访问PreferenceScreen,我使用与上面提到的完全相同的方法。

@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {    super.onPreferenceTreeClick(preferenceScreen, preference);    // If the user has clicked on a preference screen, set up the action bar    if (preference instanceof PreferenceScreen) {        initializeActionBar((PreferenceScreen) preference);    }    return false;}

从这里,我研究了PreferenceScreen是什么,而我很难过地发现它只是Dialog的包装。继续前进,然后设置操作栏显示选项并尝试找到“主页”按钮区域。不幸的是,这种方法不太容易实现,但是在层次结构查看器的帮助下,我设法找到了主页图标,然后找到了其父视图,从而获得了访问权限。一旦我们能够访问包含的LinearLayout,就可以附加onClickListener,以关闭PreferenceScreen的对话框,该对话框调用PreferenceScreen的onDismissListener并将我们返回到上一个屏幕。

public static void initializeActionBar(PreferenceScreen preferenceScreen) {    final Dialog dialog = preferenceScreen.getDialog();    if (dialog != null) {        // Inialize the action bar        dialog.getActionBar().setDisplayHomeAsUpEnabled(true);        // Apply custom home button area click listener to close the PreferenceScreen because PreferenceScreens are dialogs which swallow        // events instead of passing to the activity        // Related Issue: https://pre.google.com/p/android/issues/detail?id=4611        View homeBtn = dialog.findViewById(android.R.id.home);        if (homeBtn != null) { onClickListener dismissDialogClickListener = new onClickListener() {     @Override     public void onClick(View v) {         dialog.dismiss();     } }; // Prepare yourselves for some hacky programming ViewParent homeBtnContainer = homeBtn.getParent(); // The home button is an ImageView inside a frameLayout if (homeBtnContainer instanceof frameLayout) {     ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent();     if (containerParent instanceof LinearLayout) {         // This view also contains the title text, set the whole view as clickable         ((LinearLayout) containerParent).setonClickListener(dismissDialogClickListener);     } else {         // Just set it on the home button         ((frameLayout) homeBtnContainer).setonClickListener(dismissDialogClickListener);     } } else {     // The 'If all else fails' default case     homeBtn.setonClickListener(dismissDialogClickListener); }        }        }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号