【问题标题】:Display settings using "Settings" in triple-dot menu使用三点菜单中的“设置”显示设置
【发布时间】:2014-04-13 19:14:27
【问题描述】:

我正在为我的 android 应用程序设置一些基本设置,但遇到了一些问题。首先,我不知道如何使用操作栏右上角的三点菜单打开设置。所以我临时创建了一个调用chooseSettings的按钮:

    public void chooseSettings(View view) {
    getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
}

这是我的 PreferenceActivity 类的代码:

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

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

哪种有效。这导致我的屏幕看起来像这样:。

【问题讨论】:

    标签: android preferencefragment


    【解决方案1】:

    溢出菜单中的设置

    为了使用溢出菜单中的设置,您需要覆盖 onOptionsItemSelected 方法(如果尚未覆盖)并处理正确的 id。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            // Code to show settings.
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    

    R.id.action_settings 替换为您的菜单项的ID。

    显示 PreferenceFragment

    正如您在图片中显示的那样,您的首选项屏幕与现有布局重叠。

    请注意,您只能替换您添加的片段dynamically

    我猜你的屏幕上带有 Guess Country 和 Guess Flags 按钮的 xml 被夸大了,并且没有作为片段动态添加,因此通过添加首选项片段,它只会重叠显示。

    解决方案

    您可以解决此问题的一种方法是创建并启动一个新活动,该活动将加载您的偏好片段。

    例如,如果您创建名为 SettingsActivity 的类,它将加载首选项(不要忘记添加到 AndroidManifest):

    public class SettingsActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
        }
    }
    

    然后在您的onOptionsItemSelected 中,您可以启动设置活动。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            Intent intent = new Intent(this, SettingsActivity.class);
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    

    否则,您需要更改主布局以使用框架布局等内容,以便正确添加/删除/替换片段。

    【讨论】:

    • 非常感谢您的详细回答,非常感谢。它完美地工作!说真的,谢谢你,我在其他任何地方都无法理解。你说得完美而清晰:D。
    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    相关资源
    最近更新 更多