我的问题与这个问题类似,但是我在使用我更改为c#的Android - Switch ActionBar Back Button to Navigation Button代码时遇到了问题。
import android.support.v7.app.ActionBarDrawerToggle
import 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.addDrawerListener(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.
}因此,我的问题是如何更改按钮导航单击侦听器,从打开导航抽屉的汉堡包到用于关闭活动的后退按钮。可以像java代码一样使用ToolbarNavigationClickListener吗?如果可以,如何使用?
发布于 2020-11-02 14:39:05
使用您提供的链接和描述,您似乎想要将back按钮更改为hamburger图标,并为此hamburger设置单击事件。
在Xamarin.Android中,您可以使用ActionBarDrawerToggle。创建您自己的MyActionBarDrawerToggle。
internal class MyActionBarDrawerToggle : ActionBarDrawerToggle
{
NavigationDrawerActivity owner;
public MyActionBarDrawerToggle (NavigationDrawerActivity activity, DrawerLayout layout, int imgRes, int openRes, int closeRes)
: base (activity, layout, imgRes, openRes, closeRes)
{
owner = activity;
}
public override void OnDrawerClosed (View drawerView)
{
owner.ActionBar.Title = owner.Title;
owner.InvalidateOptionsMenu ();
}
public override void OnDrawerOpened (View drawerView)
{
owner.ActionBar.Title = owner.mDrawerTitle;
owner.InvalidateOptionsMenu ();
}
}然后设置此布局的mDrawerToggle。
mDrawerToggle = new MyActionBarDrawerToggle (this, mDrawerLayout,
Resource.Drawable.ic_drawer,
Resource.String.drawer_open,
Resource.String.drawer_close);
mDrawerLayout.SetDrawerListener (mDrawerToggle);
if (savedInstanceState == null) //first launch
selectItem (0);为RecyclerView创建单击侦听器。
public interface OnItemClickListener{
void OnClick(View view, int position);
}然后在布局中实现它。
public void OnClick (View view, int position)
{
selectItem (position);
}截图:

您可以从该链接下载源文件以供参考。
https://docs.microsoft.com/en-us/samples/xamarin/monodroid-samples/android50-navigationdrawer/
https://stackoverflow.com/questions/64631397
复制相似问题