Intereting Posts
Фрагменты Android. Сохранение AsyncTask во время поворота экрана или изменения конфигурации Обновлено до AppCompat v22.1.0 и теперь onKeyDown и onKeyUp не запускаются при нажатии клавиши меню Заполнение счетчика непосредственно в макете xml Может ли AAR включать транзитивные зависимости? Прокручиваемый EditText внутри ScrollView Android: установите цвет CheckBox Ошибка Gradle при создании нового проекта с Android Studio Как отрегулировать высоту строки в TextView с несколькими типоразмерами? OutputStream.write () успешно, но данные не доставляются Изменение яркости экрана программно (как и с помощью виджета питания) Android: получите программную информацию по программному обеспечению Что произойдет, если Android-приложение будет выпущено с возможностью отладки? Проверьте, запущена ли функция из службы Не удалось создать Android AVD из-за настроек Target и CPU / ABI? Как изменить цвет значка выбранной вкладки TabLayout?

Android – кнопка переключения ActionBar Back на навигационную кнопку

У меня возникает следующая проблема:

Я знаю, как настроить панель инструментов, чтобы показать значок кнопки «Назад», а не значок кнопки гамбургера.

Из этого:
Введите описание изображения здесь

к этому:

Введите описание изображения здесь

Используя: getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Теперь, я хочу сделать обратное действие, я хочу перейти от кнопки кнопки до значка гамбургера:

Введите описание изображения здесь

сюда:

Введите описание изображения здесь

Как я могу это сделать?

Обновить:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); } private void enableViews(boolean enable) { if(enable) { // Enables back button icon getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { // TODO: Enables burger icon } } 

Solutions Collecting From Web of "Android – кнопка переключения ActionBar Back на навигационную кнопку"

Если я предполагаю, что вы используете android.support.v4.widget.DrawerLayout в своем макете, тогда этот подход может сработать для вас; Я тестировал только API 21 но, учитывая, что он в основном использует библиотеки поддержки, он должен работать (известные последние слова) по более низким или более высоким целям.

 import android.support.v7.app.ActionBarDrawerToggle import android.support.v4.widget.DrawerLayout ActionBarDrawerToggle mDrawerToggle; 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 = (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) { // Remove hamburger mDrawerToggle.setDrawerIndicatorEnabled(false); // Show back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); // when DrawerToggle is disabled ie setDrawerIndicatorEnabled(false), navigation icon // clicks are disabled ie 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 { // 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 для видимости кнопки « Вверх» , в основном используя их соответствующие ресурсы.

Другие предположения

  • Тема вашей темы расширяет Theme.AppCompat.Light.NoActionBar .

Вы можете изменить кнопку панели действий с помощью:

  getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_button); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Использовать это

 getSupportActionBar().setDisplayShowHomeEnabled(true); 
  final Toolbar toolbar = (Toolbar) findViewById(R.id.actionbar); toolbar.setTitle(Html.fromHtml("<font color=#ffffff>" + getString(R.string.print_s) + "</font>")); toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.menu_icon)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DetailActivity.this.finish(); } }); toolbar.inflateMenu(R.menu.fav); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { item.setIcon(R.drawable.back_icon) return true; } return false; } }); 

Попробуйте добавить ниже код style AppTheme в activity's theme/style.xml вашей activity's theme/style.xml это сделает ваш hamburger icon для back icon с animation .

Условие, если вы используете значок гамбургера с помощью NavigationDrawer и AppCompatActivity/ActionBarActivity

 <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="windowActionBar">false</item> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/white</item> </style> 

Я надеюсь, что это помогает! Или вам просто нужно сделать это только с возможностью рисования.

Проверить эту ссылку