PreferenceActivity中的ActionBar

Mat*_*ers 12 java android android-preferences android-layout android-actionbar

示例:Android Market

在我的应用程序中,我使用来自Google(位于<sdk>/samples/android-<version>/ActionBarCompat)的新动作栏兼容性示例,该示例效果很好.我唯一的问题就是将此应用于我PreferenceActivity,以获得类似Android Market中的设置的屏幕(见图片).

要填充ActionBar图标,每个图标都Activity必须扩展ActionBarActivity.问题是我Activity已经扩展PreferenceActivity并且在Java类中不能扩展多个类.

必须有一种方法来与... ActionBar一起PreferenceScreen.如果有人能为这个共同问题提供解决方案,我会很高兴.

PS:如何向PreferenceScreen添加按钮的解决方案不适合,因为ActionBar它实际上是标题栏,所以这更像是Java而不是布局.

pyk*_*yko 15

编辑:下面我的答案相当hacky,它似乎现在已经过时了(对于Android 3.0之前的版本)看看其他答案,以减少hacky和更新的解决方案~pyko 2014-09-01


我设法让它工作 - 不确定这是最好/最干净的解决方案,但它的工作原理.

不得不做出以下改变:

  1. 复制ActionBarActivity并扩展新类PreferenceActivity

    public abstract class ActionBarPreferenceActivity extends PreferenceActivity {
        // contents exactly the same as 'ActionBarActivity'
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 修改onCreate()ActionBarHelperBase.java略有-使一个特例PreferenceActivity

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // If the activity is a PreferenceActivity, don't make the request
        if (!(mActivity instanceof PreferenceActivity)) {
            mActivity.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 让您的PreferenceActivity扩展此类并FEATURE_CUSTOM_TITLE 调用之前添加请求super.onCreate()

    public class MyPreferenceActivity extends ActionBarPreferenceActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); // add this line
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
            // etc etc
        }
    
        // etc etc
    }
    
    Run Code Online (Sandbox Code Playgroud)

据我所知,需要更改2和3,因为PreferenceActivity:

"只要调用super.onCreate(),就会设置ViewGroup,因此不允许更改Window的参数." (见奥利弗对答案的评论)

我想PreferenceActivity创建活动中组件的顺序与普通Activity活动不同.


Ost*_*tan 5

如果您想尝试基于support-v4片段的PreferenceFragment实现:

https://github.com/kolavar/android-support-v4-preferencefragment

我自己使用它并且将PreferenceActivity转换为PreferenceFragment并没有多大工作.