Как настроить навигационную кнопку "Домой" в Android для активности appcompat для панели инструментов?
Я использую appcompat
активность для Android v-21. Я хочу включить кнопку домой, которую я установил true
в моем коде. Я также переопределил onOptionsItemSelected
но это все еще не работает.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_apply_card);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
//Action bar
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
4 ответа
Простой способ добавить панель включения панели действий в действие Appcompat
getSupportActionBar().show();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Добавьте эти две функции в свою деятельность:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
}
Я использую Xamarin Android, и для AppCompatActivity я также использовал этот метод, который у меня не работал.
SupportActionBar.SetHomeButtonEnabled (истина);
но после нахождения в интернете я нашел другой метод, который у меня сработал, и показал кнопку домашней навигации.
SupportActionBar.SetDisplayHomeAsUpEnabled (истина);
Я знаю, что это старый вопрос, но для того, чтобы другие не тратили время на решение этой проблемы, я хочу поделиться своим методом работы.
Я не уверен в причине этого. Возможно, поскольку ActionBar устарел и уступил место Панели инструментов после AppCompat, некоторые методы AppCompatActivity могут работать не так, как ожидается. Хотя Burger (кнопка навигации) определена как домашняя кнопка ActionBar, мы не могли контролировать события нажатия этой кнопки с помощью.onOptionsItemSelected(MenuItem). Панель инструментов представляет нам еще один метод для достижения этой цели, toolbar.setNavigationOnClickListener(View.OnClickListener).
В качестве примера я попытался использовать MaterialMenuIcon balysv с этим методом вместо.onOptionsItemSelected (MenuItem) следующим образом:
private void setupToolbar() {
toolbar = (Toolbar) ((LinearLayout) findViewById(R.id.app_bar)).getChildAt(0);
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawerLayout.isDrawerVisible(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
materialMenu.animatePressedState(MaterialMenuDrawable.IconState.BURGER);
} else {
drawerLayout.openDrawer(GravityCompat.START);
materialMenu.animatePressedState(MaterialMenuDrawable.IconState.ARROW);
}
}
});
materialMenu = new MaterialMenuIconToolbar(this, Color.WHITE, MaterialMenuDrawable.Stroke.THIN) {
@Override public int getToolbarViewId() {
return R.id.toolbar;
}
};
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
materialMenu.setTransformationOffset(
MaterialMenuDrawable.AnimationState.BURGER_ARROW,
isDrawerOpened ? 2 - slideOffset : slideOffset
);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
isDrawerOpened = true;
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
isDrawerOpened = false;
}
@Override
public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState);
if (newState == DrawerLayout.STATE_IDLE) {
if (isDrawerOpened) materialMenu.setState(MaterialMenuDrawable.IconState.ARROW);
else materialMenu.setState(MaterialMenuDrawable.IconState.BURGER);
}
}
});
}
Я надеюсь, что это помогает.
Следующий фрагмент кода установить значок навигации на панели инструментов,
toolbar.setNavigationIcon(R.mipmap.ic_launcher);
Я надеюсь, что это поможет вам.