Android中的首选项菜单

时间:2013-11-18 00:01:17

标签: android android-fragments android-preferences

我一直在关注此developer.android.com教程,尝试将偏好片段添加到我的应用中。我遇到的问题是,虽然PreferenceFragment显示,但没有操作栏,背景是透明的。理想情况下,我希望它看起来与开发指南中的类似。

我尝试在android:background文件中添加preferences.xml标记,并制作单独的布局xml文件并使用

`    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View root = inflater.inflate(R.layout.fragment_settings,container, false)  ;
        return root;
    }`

在下面的SettingsFragment.java文件中。 (我在应用程序崩溃时删除了这两个)。

我的代码如下:

preferences.xml

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- settings menu -->
    <PreferenceCategory
        android:title="@string/pref_title_sample_size"
        android:key="pref_sample_size"
            >

        <EditTextPreference
            android:key="pref_sample_freq"
            android:summary="@string/pref_summery_sample_freq"
            android:title="@string/pref_title_sample_freq"
            android:defaultValue="1"
            />
        <EditTextPreference
            android:key="pref_total_size"
            android:summary="@string/pref_summary_total_sample"
            android:title="@string/pref_title_total_sample"
            android:defaultValue="2"
            />

        </PreferenceCategory>

SettingsFragment.java

public class SettingsFragment extends PreferenceFragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

以及MainActivity.java

的以下摘录
        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
            case R.id.menu_settings:
                getFragmentManager().beginTransaction()
                        .replace(android.R.id.content, new SettingsFragment())
                        .commit();
                return true;
        }
        return super.onOptionsItemSelected(item);

有人能指出我想要的方向吗?

2 个答案:

答案 0 :(得分:0)

我不确切地知道你想要什么,但也许你想在你的活动中制作headers 当您选择commit() Fragment {{1}}菜单时,我认为您错了  你应该读这个:Preference Headers from Google
还有:Preference Headers Tutorial

让我知道它是否有帮助,以及是否是您想要的。

答案 1 :(得分:0)

如果您想在偏好设置上添加操作栏,请在SettingsFragment.java onCreate内添加此操作栏:

getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setTitle(R.string.title_activity_preference);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.BLUE));
getActionBar().setDisplayShowTitleEnabled(true);

在onCreate方法之外,添加:

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
    case android.R.id.home:
        SettingsFragment.this.finish();
        break;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    new MenuInflater(this).inflate(R.menu.main, menu);
    return(super.onCreateOptionsMenu(menu));
}