在首选项活动中添加带有后退按钮的操作栏

use*_*452 11 android preferenceactivity android-actionbar

这是我的偏好活动:

package com.example.hms.test;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class PrefsActivity extends PreferenceActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
    }

}
Run Code Online (Sandbox Code Playgroud)

在这里,我想显示一个带有名称设置的操作栏和一个回到主页的后退按钮

Poo*_*oya 20

你应该做几件事:

  1. 将以下内容添加到onCreate of PreferenceActivity:

    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 覆盖PreferenceActivity中的onOptionsItemSelected:

    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId())
         {
             case android.R.id.home:
                 NavUtils.navigateUpFromSameTask(this);
                 return true;
         }
         return super.onOptionsItemSelected(item);
     }
    
    Run Code Online (Sandbox Code Playgroud)
  3. <activity>清单中的标记更改为PreferenceActivity,如下所示:

    <activity
      android:name=".PrefsActivity"
      android:label="@string/title_activity_settings"
      android:parentActivityName=".MainActivity">
      <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.android.MainActivity" />
    </activity>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后<activity>在清单中的MainActivity 标记中放入android:launchMode ="singleTop" :

    <activity
      android:name=".MainActivity"
      android:label="@string/app_name"
      android:launchMode="singleTop"
      android:theme="@style/AppTheme.NoActionBar">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    
    Run Code Online (Sandbox Code Playgroud)


Bal*_*eep 10

Pooya给出的答案不适用于PreferenceActivity.而是让您的类扩展AppCompatActivity,并使用PreferenceFragment加载首选项.这是我的设置代码:

public class MyPrefsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();

        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    }

    @Override
    public boolean onSupportNavigateUp(){
        finish();
        return true;
    }

    public static class MyPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

将活动放在AndroidManifest.XML中:

<activity android:name=".MyPrefsActivity"
    android:label="Preferences"
    android:theme="@style/AppTheme"/>
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用我的主要活动中的意图(或您拥有的任何父活动)开始设置活动:

Intent prefsIntent = new Intent(activity, MyPrefsActivity.class);
activity.startActivity(prefsIntent);
Run Code Online (Sandbox Code Playgroud)