gpt4 book ai didi

java - 如何覆盖抽屉导航按钮行为并更改图标?

转载 作者:行者123 更新时间:2023-12-01 23:41:52 24 4
gpt4 key购买 nike

我有一个应用程序,它使用抽屉导航来显示具有主要主题的不同 fragment 。 Drawer navigation

在主页 fragment 中,我显示不同的类别(那些彩色框),当我选择一个类别时,它会显示新 fragment ,其中包含该类别的日常和一般详细信息。(我们称之为详细信息 fragment )Home fragment

我想要但无法弄清楚如何完成,是在那个详细信息 fragment 中,我希望有返回箭头将我带回主页 fragment ,而不是打开抽屉导航的汉堡菜单图标。 Detail fragment

最佳答案

如果我假设您在布局中使用 android.support.v4.widget.DrawerLayout,那么这种方法可能适合您;我只在 API 21 上进行了测试,但考虑到它主要使用支持库,它应该可以在较低或较高的目标上工作(著名的遗言)。

导入 android.support.v7.app.ActionBarDrawerToggle导入 android.support.v4.widget.DrawerLayout

ActionBarDrawerToggle mDrawerToggle;
DrawerLayout drawerLayout;
private boolean mToolBarNavigationListenerIsRegistered = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
// Get DrawerLayout ref from layout
drawerLayout = (DrawerLayout)findViewById(R.id.drawer);
// Initialize ActionBarDrawerToggle, which will control toggle of hamburger.
// You set the values of R.string.open and R.string.close accordingly.
// Also, you can implement drawer toggle listener if you want.
mDrawerToggle = new ActionBarDrawerToggle (this, drawerLayout, mToolbar, R.string.open, R.string.close);
// Setting the actionbarToggle to drawer layout
drawerLayout.setDrawerListener(mDrawerToggle);
// Calling sync state is necessary to show your hamburger icon...
// or so I hear. Doesn't hurt including it even if you find it works
// without it on your test device(s)
mDrawerToggle.syncState();
}

/**
* To be semantically or contextually correct, maybe change the name
* and signature of this function to something like:
*
* private void showBackButton(boolean show)
* Just a suggestion.
*/
private void enableViews(boolean enable) {

// To keep states of ActionBar and ActionBarDrawerToggle synchronized,
// when you enable on one, you disable on the other.
// And as you may notice, the order for this operation is disable first, then enable - VERY VERY IMPORTANT.
if(enable) {
//You may not want to open the drawer on swipe from the left in this case
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
// Remove hamburger
mDrawerToggle.setDrawerIndicatorEnabled(false);
// Show back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// when DrawerToggle is disabled i.e. setDrawerIndicatorEnabled(false), navigation icon
// clicks are disabled i.e. the UP button will not work.
// We need to add a listener, as in below, so DrawerToggle will forward
// click events to this listener.
if(!mToolBarNavigationListenerIsRegistered) {
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Doesn't have to be onBackPressed
onBackPressed();
}
});

mToolBarNavigationListenerIsRegistered = true;
}

} else {
//You must regain the power of swipe for the drawer.
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

// Remove back button
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
// Show hamburger
mDrawerToggle.setDrawerIndicatorEnabled(true);
// Remove the/any drawer toggle listener
mDrawerToggle.setToolbarNavigationClickListener(null);
mToolBarNavigationListenerIsRegistered = false;
}

// So, one may think "Hmm why not simplify to:
// .....
// getSupportActionBar().setDisplayHomeAsUpEnabled(enable);
// mDrawer.setDrawerIndicatorEnabled(!enable);
// ......
// To re-iterate, the order in which you enable and disable views IS important #dontSimplify.
}

该解决方案使用 ActionBarDrawerToggle.setDrawerIndicatorEnabled 来切换汉堡包图标的可见性,并使用 ActionBar.setDisplayHomeAsUpEnabled 来切换向上按钮的可见性,本质上是利用它们各自的可绘制资源。

关于java - 如何覆盖抽屉导航按钮行为并更改图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58255488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com