要在安卓应用中创建一个设置页面,并在主页右上角添加一个按钮进入设置页面,你可以按照以下步骤来实现:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:title="设置"
app:showAsAction="never"/>
</menu>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
这样就实现了一个基本的设置页面,并可以在主页右上角点击进入。根据应用的实际需求,你可以在设置页面添加各种设置选项,比如复选框、单选框、列表选择等,存储和读取设置值,在主页面相应地改变行为。
要实现从SettingsActivity点击左上角退出箭头回退到MainActivity,你可以按照以下步骤修改:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
// ...
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
Intent data = new Intent();
// 设置返回数据
data.putExtra("some_key", "some_value");
setResult(RESULT_OK, data);
super.onBackPressed();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SETTINGS_REQUEST_CODE && resultCode == RESULT_OK) {
// 处理返回数据
String value = data.getStringExtra("some_key");
// ...
}
}
这样修改后,在SettingsActivity中点击左上角的返回箭头就会回退到MainActivity了。如果你传递了返回数据,MainActivity也能正确接收到。
如果你想在MainActivity中启动SettingsActivity时使用startActivityForResult(),可以按照以下方式修改你的代码:
private static final int SETTINGS_REQUEST_CODE = 1;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
startActivityForResult(intent, SETTINGS_REQUEST_CODE);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SETTINGS_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// 处理返回数据
String value = data.getStringExtra("some_key");
// ...
}
}
}
@Override
public void onBackPressed() {
Intent data = new Intent();
// 设置返回数据
data.putExtra("some_key", "some_value");
setResult(RESULT_OK, data);
super.onBackPressed();
}
这样,当你在MainActivity中点击设置菜单项时,会启动SettingsActivity,并等待它返回数据。当你在SettingsActivity中点击返回箭头时,会将数据传回MainActivity,并在onActivityResult()方法中接收到。
请注意,在这个例子中,我们假设SettingsActivity返回的数据是一个字符串,key为"some_key"。你应该根据你的实际需求来设置返回数据的类型和键值。