我正在使用Appcompat V7库中的新工具栏,我正在使用导航抽屉和碎片制作应用程序。
在某些片段中,我不想显示汉堡包图标而是显示箭头......我很好,我这样做了:
mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
我的问题是:我需要如何或在哪里设置主页按钮lisener或我需要听“后退”按钮? 我想调用主要的反向方法并使用汉堡包图标设置导航抽屉图标..
答案 0 :(得分:70)
在onCreate()
:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然后覆盖onOptionItemSelected()
,如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
答案 1 :(得分:41)
你可以这样做:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
toolbar = (Toolbar)findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
setUpNavigationDrawer();
getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager
}
定义onBackSTackChangedListener:
private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
setNavIcon();
};
}
根据片段的后台堆叠设置图标:
protected void setNavIcon() {
int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}
检测何时按下抽屉图标:
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case x:
return true;
default:
return false;
}
}
并处理向上按钮:
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
这对我有用。祝你好运。
答案 2 :(得分:31)
不确定这是否适用于OP的情况,但在许多情况下,这可能是使用AppCompat工具栏实现“后退”按钮的最简单选项。
跳过所有setHomeButtonEnabled
,setDisplayHomeAsUpEnabled
和onOptionsItemSelected
内容以及related issues。
相反,在初始化工具栏时,只需设置1)导航图标和2)导航OnClickListener:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (enableBackNavigation) {
toolbar.setNavigationIcon(R.drawable.ic_back);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
答案 3 :(得分:16)
1-创建Toolbar
布局;
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/dark_blue"
android:minHeight="?attr/actionBarSize"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
2-在您希望toolbar
的地方的布局中包含此内容。
3-在您的活动中粘贴以下代码。(扩展ActionBarActivity
)
private Toolbar mToolbar;
//For Toolbar (Action bar) start
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
mToolbar.setNavigationIcon(R.drawable.ic_back_arrow);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
getSupportActionBar().setTitle("Event Details");
//For Toolbar (Action bar) end
4-将后退点击图标更改为您想要的任何内容。
答案 4 :(得分:3)
激活后退按钮:
getActionBar().setDisplayHomeAsUpEnabled(enable);
并聆听onBackPressed()
显然,您的活动必须延长ActionBarActivity
答案 5 :(得分:2)
您只需设置导航图标,并确保在设置pyodbc
setNavigationOnClickListener()
setSupportActionBar(toolbar)
答案 6 :(得分:1)
在您希望后箭头工作的活动下添加这些行
android:parentActivityName =&#34;您的父活动名称&#34;
答案 7 :(得分:0)
添加setDisplayHomeAsUpEnabled(true)
Toolbar toolbar = findViewById(R.id.toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
处理后退按钮
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}