使用三点菜单中的“设置”显示设置
-
21-12-2019 - |
题
我正在为我的 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);
}
}
哪种作品。这导致我的屏幕看起来像这样:
解决方案
溢出菜单中的设置
为了使用溢出菜单中的设置,您需要覆盖 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
正如您在图片中所示,您的首选项屏幕与现有布局重叠。
请注意,您只能替换您添加的片段 动态地.
我猜测您的屏幕上具有“猜测国家”和“猜测旗帜”按钮的 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);
}
否则,您需要更改主布局以使用框架布局之类的内容,以便您可以正确添加/删除/替换片段。
不隶属于 StackOverflow