2015-03-09 3 views

ответ

0

PreferenceActivity не распространяется ActionBarActivity, что необходимо для того, чтобы панель действий была доступна.

Если вам нужен экран настроек с панелью действий, попробуйте использовать PreferenceFragment вместо ActionBarActivity.

public class SettingsActivity extends ActionBarActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Display the fragment as the main content. 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment()) 
       .commit(); 
    } 
} 

public static class SettingsFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences); 
    } 
    ... 
} 

Ссылка: http://developer.android.com/guide/topics/ui/settings.html#Fragment

+1

Это отстой: я хочу использовать пример из Android студии. Когда вы выбираете New -> Activity -> SettingsActivity, потому что это должен быть путь ... Почему Google не обновляется там в студии Android, когда они обновляют свою библиотеку поддержки !? – Roel

3

Если вы не хотите использовать PreferenceFragment внутри ActionBarActivity и все еще хотите использовать существующую PreferenceActivity с AppCompat поддержки v7 библиотеки, вы можете использовать, чтобы использовать Toolbar и переопределить PreferenceActvity.setContentView() с индивидуальный макет

Вы можете использовать опору Toolbar при сохранении тока PreferenceActivity, и он хорошо работает для 2.3.4 и выше

private Toolbar mActionBar; 

@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setTheme(R.style.Theme_MyApp_Settings); 

    super.onCreate(savedInstanceState); 

    addPreferencesFromResource(R.xml.settings); 

    mActionBar.setTitle(getTitle()); 

    //other things to create/init 
} 


public void setContentView(int layoutResID) { 
    ViewGroup contentView = (ViewGroup) LayoutInflater.from(this).inflate(
     R.layout.settings_activity, new LinearLayout(this), false); 

    mActionBar = (Toolbar) contentView.findViewById(R.id.action_bar); 
    mActionBar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 

    ViewGroup contentWrapper = (ViewGroup) contentView.findViewById(R.id.content_wrapper); 
    LayoutInflater.from(this).inflate(layoutResID, contentWrapper, true); 

    getWindow().setContentView(contentView); 
} 

settings_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/action_bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="?attr/actionBarSize" /> 

    <FrameLayout 
     android:id="@+id/content_wrapper" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

</LinearLayout> 

styles.xml

<style name="Theme.MyApp.Settings" parent="@style/Theme.AppCompat"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="toolbarStyle">@style/Widget.Toolbar</item> 
</style> 


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar"> 
    <item name="android:background">?attr/colorPrimary</item> 
    <item name="navigationIcon">?attr/homeAsUpIndicator</item> 
</style> 
+0

Настоящий ответ! благодаря! – Roel

Смежные вопросы