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

相关问题