Как настроить навигационную кнопку "Домой" в 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);

Я надеюсь, что это поможет вам.

Другие вопросы по тегам