2016-04-27 6 views
1

Я создал приложение/экран настроек для своего приложения, используя руководство this. Пример кода ниже. Что мне не хватает, чтобы добавить панель инструментов к этому новому действию с помощью стрелки назад в левой части?Панель инструментов на странице настроек, построенной с помощью PreferenceFragment

AndroidManifest.xml

.... 
<activity 
    android:name=".SettingsActivity" 
    android:label="Settings" 
    android:launchMode="singleTask" 
    android:theme="@style/AppTheme.NoActionBar"/> 
.... 

preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<CheckBoxPreference 
    android:key="pref_sync" 
    android:title="@string/pref_sync" 
    android:summary="@string/pref_sync_summ" 
    android:defaultValue="true" /> 
<ListPreference 
    android:dependency="pref_sync" 
    android:key="pref_syncConnectionType" 
    android:title="@string/pref_syncConnectionType" 
    android:dialogTitle="@string/pref_syncConnectionType" 
    android:entries="@array/pref_syncConnectionTypes_entries" 
    android:entryValues="@array/pref_syncConnectionTypes_values" 
    android:defaultValue="@string/pref_syncConnectionTypes_default" /> 
</PreferenceScreen> 

SettingsFragment.java

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); 
    } 
    ... 
} 

SettingsActivity.java

public class SettingsActivity extends Activity { 
    @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(); 
    } 
} 

ответ

5

Вы должны включить панель инструментов в макете деятельности. Например:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".activities.SettingsActivity"> 

     <include 
      android:id="@+id/app_bar" 
      layout="@layout/app_bar" /> 

     <FrameLayout 
      android:id="@+id/container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/app_bar"/> 

    </RelativeLayout> 

app_bar.xml

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:popupTheme="@style/AppTheme.PopupOverlay" /> 

В вашем Activity.onCreate() получить панель и установить дома (маленькая стрелка):

 Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Установите SettingsActivity быть ребенком родительского MainActivity:

<activity 
    android:name=".activities.SettingsActivity" 
    android:label="@string/title_activity_main" 
    android:parentActivityName=".activities.MainActivity" /> 

И это даст вам, что маленькая стрелка.

Кроме того, сделайте следующее:

public class SettingsActivity extends AppCompatActivity 

Не это:

public class SettingsActivity extends Activity 

Для того, чтобы использовать библиотеку поддержки.

+0

Что-то не так с панелью инструментов. Я получаю исключение NullPointerException в getSupportActionBar(). SetHomeButtonEnabled (true); – adriennoir

+0

«activity_main.xml» Я предполагаю, что вы имеете в виду отдельный xml для параметра SettingsActivity, а не MainActivity xml. Я назову его «settings_main.xml». Не установленоContentView (R.layout.settings_main) также необходимо? Я добавил. Я попытался заменить панель инструментов Toolbar = (панель инструментов) findViewById (R.id.toolbar) с панелью инструментов Toolbar = (панель инструментов) findViewById (R.id.app_bar) и панель инструментов, но она перекрывает содержимое настроек. Я имею в виду, текст и стрелки «Настройки» находятся над первым текстом PreferenceCategory, а цветной прямоугольник на панели инструментов невидим. – adriennoir

+0

@AdrienNoir Код в моем сообщении предназначен только для общей активности + панели инструментов + фрагмент, чтобы дать вам пример того, как он может выглядеть. Вам придется адаптировать его к вашим потребностям, но важными битами являются 1.Задайте родительский элемент в манифесте 2. зайдите в панель инструментов YourActivity.onCreate() и установите ее так, чтобы она показывала стрелку. Эта стрелка возвращает вас к любому родителю, указанному вами на панели инструментов. Без меня, глядя на ваше приложение, вам сложно дать больше советов ... – Micro