2016-04-27 51 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

工具欄有問題。我在getSupportActionBar()中得到一個NullPointerException。setHomeButtonEnabled(true); – adriennoir

+0

「activity_main.xml」我想你的意思是爲SettingsActivity單獨的xml,而不是MainActivity xml。 我將其稱爲「settings_main.xml」。 是不是還需要setContentView(R.layout.settings_main)?我添加了它。 我嘗試用Toolbar toolbar =(Toolbar)findViewById(R.id.app_bar)替換Toolbar toolbar =(Toolbar)findViewById(R.id.toolbar),並且工具欄顯示但與Settings內容重疊。我的意思是,「設置」文本和箭頭位於第一個PreferenceCategory文本上方,而工具欄上的彩色矩形不可見。 – adriennoir

+0

@AdrienNoir我的帖子中的代碼只是一個普通的活動+工具欄+片段給你一個它可能看起來如何的例子。你將不得不根據自己的需要來調整它,但重要的位是1。在清單2中指定父級。在YourActivity.onCreate()中獲取工具欄並將其設置爲顯示箭頭。該箭頭會將您帶回您在工具欄中指定的任何父項。沒有我看你的應用程序,這是很難給你更多的建議... – Micro

相關問題