问题
我正在使用Android模板中的导航抽屉。我想在我的一些片段中使用UP按钮(箭头),安装“汉堡”按钮。我用AppCompatActivity。
我使用此代码显示按钮箭头:
public void UseUpButton(boolean value) {
ActionBar actionBar = getSupportActionBar();
if (value) {
actionBar.setDisplayHomeAsUpEnabled(false);
toggle.setDrawerIndicatorEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
} else {
toggle.setDrawerIndicatorEnabled(true);
}
}尝试过的变体:
但我没办法按下这个按钮。我尝试了一些方法:
使用onOptionsItemSelected
public boolean onOptionsItemSelected(MenuItem item) {
Log.d("WTF", "menu");
switch (item.getItemId())
{
case android.R.id.home:
getFragmentManager().popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
}我将getSupportActionBar().setHomeButtonEnabled(true);添加到我的Activity::onCreate中,但是当我按Up按钮时没有调用onOptionsItemSelected,当我按菜单项时工作正常。
使用ActionBarToggle OnClickListener
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
toggle.setToolbarNavigationClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
}
});但是这种方法也不需要按向上键。
结论:
那么,我怎样才能捕捉向上按钮按下事件呢?
发布于 2016-04-30 12:22:29
几天前我在某个地方发现了这个。
在我的代码中我初始化了ActionBarDrawerToggle。它有一些构造函数,但我感兴趣的是:
1
public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,
@StringRes int openDrawerContentDescRes,
@StringRes int closeDrawerContentDescRes) {
this(activity, null, drawerLayout, null, openDrawerContentDescRes,
closeDrawerContentDescRes);
}2
public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,
Toolbar toolbar, @StringRes int openDrawerContentDescRes,
@StringRes int closeDrawerContentDescRes) {
this(activity, toolbar, drawerLayout, null, openDrawerContentDescRes,
closeDrawerContentDescRes);
}看一看:第二个构造函数有参数。
如果您想要处理UP BUTTON事件,不要使用第二个CONSTUCTOR,而是先使用。
示例:
toggle = new ActionBarDrawerToggle(
this,
drawer,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
getSupportActionBar().setHomeButtonEnabled(true);setHomeButtonEnabled很重要,没有它,你就不会看到汉堡或向上按钮。
发布于 2017-07-16 15:14:13
我在您的方法中添加了几行代码,以便实现back按钮:
public void useUpButton(boolean value) {
ActionBar actionBar = getSupportActionBar();
if (value) {
actionBar.setDisplayHomeAsUpEnabled(false);
toggle.setDrawerIndicatorEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
} else {
toggle.setDrawerIndicatorEnabled(true);
toggle.setToolbarNavigationClickListener(null);
}
}发布于 2017-01-15 00:13:33
对于默认行为,使汉堡包按钮打开抽屉,您可以只使用以下代码
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(
this, drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(mActionBarDrawerToggle);
mActionBarDrawerToggle.syncState();然后,若要覆盖任何子活动中的默认行为,请执行以下操作
getSupportActionBar().setDisplayHomeAsUpEnabled(true); // shows the up navigation button instead of the hamburger
mToolbar.setNavigationOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
finish(); //end current activity
}
});当ActionBarDrawerToggle接受工具栏作为输入时,它会在工具栏上设置自己的NavigationOnClickListener。当单击up按钮时,我们可以重写它来调用我们的代码。
https://stackoverflow.com/questions/36083785
复制相似问题