【发布时间】:2014-11-11 07:36:54
【问题描述】:
我正在使用 Appcompat 21 中的工具栏而不是标准操作栏,一切都很顺利,除了额外活动中的 HomeAsUp 按钮不起作用。
当我打开PrefsActivity(下面的代码sn-ps)时,HomeAsUp按钮正常显示(一个小左箭头),当我点击按钮时,从代码中,我想要它“完成”,但它仍然没有变化。当我将 onCreateOptionsMenu 函数添加到 BaseActivity 并膨胀只有一个菜单项 Settings 的 global.xml 时,单击按预期进行,但需要额外的操作出现包含 Settings 的菜单溢出,这是我不想要的。然后我尝试编辑global.xml,删除默认的Settings菜单项,结果按钮再次没有变化。
在 4.4.2 设备上使用相同代码进行测试时,问题消失了。
我的问题是,如何在BaseActivity中不添加onCreateOptionsMenu菜单项的情况下制作PrefsActivity效果的HomeAsUp按钮?
部分代码如下:
基础活动:
public abstract class BaseActivity extends ActionBarActivity {
protected Toolbar mActionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResource());
mActionBar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mActionBar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
protected abstract int getLayoutResource();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
case R.id.action_settings:
startActivity(new Intent(this, PrefsActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
// add this function, the button acts normally, but an extra
// action overflow menu appears in the right side of the Toolbar
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.global, menu);
return true;
}
//...
}
PrefsActivity.java:
public class PrefsActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(R.id.frag_container, new PrefsFragment())
.commit();
}
@Override
protected int getLayoutResource() {
return R.layout.activity_prefs;
}
}
【问题讨论】:
-
你有什么问题?
-
@MohammedAli 我已经编辑了问题并说清楚了,谢谢你的提醒。
-
“HomeAsUp”按钮的 PrefsActivity 效果...什么效果?
标签: android toolbar android-appcompat