Отобразить стрелку назад на панели инструментов

Я перехожу с ActionBar на Toolbar в своем приложении. Но я не знаю, как отображать и устанавливать событие щелчка на стрелке назад на Toolbar, как это было на Actionbar.

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

С ActionBar я звоню mActionbar.setDisplayHomeAsUpEnabled(true). Но подобного метода нет.

Кто-нибудь когда-нибудь сталкивался с такой ситуацией и как-то находил способ ее решить?


person Huy Duong Tu    schedule 30.10.2014    source источник
comment
Как насчет stackoverflow.com/a/29809691/1644301   -  person mDroidd    schedule 19.07.2016
comment
Используйте здесь пример getSupportActionBar () freakyjolly.com/how -to-add-back-arrow-in-android-activity   -  person Code Spy    schedule 04.06.2018


Ответы (25)


Если вы используете ActionBarActivity, вы можете указать Android использовать Toolbar в качестве ActionBar следующим образом:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);

А потом звонит

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

буду работать. Вы также можете использовать это во фрагментах, прикрепленных к ActionBarActivities, вы можете использовать его следующим образом:

((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);

Если вы не используете ActionBarActivities или хотите получить стрелку назад на Toolbar, который не установлен как ваш SupportActionBar, вы можете использовать следующее:

mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       //What to do on back clicked
   }
});

Если вы используете android.support.v7.widget.Toolbar, вам следует добавить в свой AppCompatActivity следующий код:

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
person MrEngineer13    schedule 30.10.2014
comment
@ MrEngineer13 Откуда вы взяли возможность использования ic_action_back? - person ZakTaccardi; 16.11.2014
comment
Официальный репозиторий значков материального дизайна Google github. ru / google / material-design-icons / blob / master / navigation / - person MrEngineer13; 16.11.2014
comment
Если вы используете последнюю версию appcompat-v7 (21.0.3 или выше), вы можете использовать R.drawable.abc_ic_ab_back_mtrl_am_alpha для рисования стрелки назад, которая включена в библиотеку поддержки. - person Taeho Kim; 24.02.2015
comment
Обратите внимание, что getResources (). GetDrawable (...) устарел. Вместо этого вы должны использовать ContextCompat.getDrawable (context, ...). - person Quentin S.; 30.09.2015
comment
ActionBarActivity устарел (@deprecated Вместо этого используйте {@link android.support.v7.app.AppCompatActivity}.). Означает ли это, что нужно обрабатывать события щелчка вручную? - person hgoebl; 30.12.2015
comment
@hgoebl нет, просто используйте класс AppCompatActivity вместо ActionBarActivity. - person Ivvan; 18.02.2016
comment
Не сработало, не могу найти ни R.drawable.abc_ic_ab_back_mtrl_am_alpha, ни R.drawable.ic_action_back. - person Henrique de Sousa; 14.04.2016
comment
Что делать в onClick(View v)? Просто позвоните onBackPressed() - person rpattabi; 24.07.2016
comment
если я установил setDisplayHomeAsUpEnabled (true) и setDisplayShowHomeEnabled (true); энальбе назад стрелка. Тогда титул не идет по центру. Я пробовал установить actionBar.setTitle (); и setDisplayShowTitleEnabled (ложь). Но все еще не смог решить проблему - person Prashanth Debbadwar; 18.11.2016
comment
Стоит отметить, что эти чертежи могут быть недоступны в некоторых версиях Android (например, они недоступны в некоторых версиях CyanogenMod). Поэтому лучше всего скопировать их в свой проект. В противном случае вы неизбежно столкнетесь с несколькими сбоями. - person Bitcoin Cash - ADA enthusiast; 22.12.2016
comment
чтобы вернуть значок из библиотеки поддержки toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material); - person Bolein95; 15.02.2017
comment
Вместо этого вручную реализовать onBackPressed (); вы можете использовать правильную обратную навигацию, предоставляемую Google developer.android.com/training/ реализация-навигация / - person Mohamed; 26.02.2017
comment
android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material это сработало для меня, получив значок возврата. - person Rahul Raveendran; 28.03.2017
comment
Спасибо за совет с переопределением onSupportNavigateUp(), я не могу придумать причину, по которой стрелка назад и кнопка возврата должны делать разные вещи. - person martinstoeckli; 19.07.2017
comment
лучше использовать метод идентификатора ресурса, а затем метод рисования ... mToolbar.setNavigationIcon(R.drawable.ic_arrow_left); - person user25; 18.03.2018
comment
setSupportActionBar работает. Спасибо. В моем случае я также хотел изменить цвет, поэтому я сделал: toolbar.getNavigationIcon (). SetColorFilter (getResources (). GetColor (R.color.white), PorterDuff.Mode.SRC_ATOP); - person GabrielBB; 14.11.2018
comment
Вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод void android.support.v7.app.ActionBar.setDisplayHomeAsUpEnabled (boolean) для ссылки на нулевой объект - person Fernando Torres; 03.10.2019
comment
Ты мой спаситель! Бьется головой с двух дней. Этот фрагмент кода помог onSupportNavigateUp() - person coderpc; 16.10.2019
comment
в моем случае мы переопределяли панель инструментов, и нам нужно было явно установить значок навигации, спасибо - person reidisaki; 28.02.2020

Я вижу много ответов, но вот мой, о котором раньше не упоминалось. Работает с API 8+.

public class DetailActivity extends AppCompatActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);

    // toolbar
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // add back arrow to toolbar
    if (getSupportActionBar() != null){
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // handle arrow click here
    if (item.getItemId() == android.R.id.home) {
        finish(); // close this activity and return to preview activity (if there is any)
    }

    return super.onOptionsItemSelected(item);
}
person Vasil Valchev    schedule 25.01.2016
comment
Это работает, только если вы установите Toolbar как ActionBar. Это не для отдельных панелей инструментов. - person Kuffs; 19.02.2016
comment
Проголосовать за onOptionItemSelected(). Это завершает то, о чем MrEngineer13 не упомянул в своем ответе. - person Atul; 06.06.2016
comment
Спасибо, это сработало для меня. Кажется, это лучше, чем использовать прослушиватель щелчков, мне наплевать на отдельные панели инструментов. - person Mike76; 21.08.2016
comment
Как изменить цвет стрелки? - person Dmitry; 06.09.2018
comment
Мне не нужны строки под строкой комментариев на панели инструментов, отлично работает. - person Hack06; 12.10.2018
comment
Единственный ответ, который на самом деле показывает, как вернуться назад, вызвав finish(), а не просто предоставив бесполезный комментарий вроде // handle back button. - person t3chb0t; 14.01.2021
comment
это круто +1 работает как шарм - person HiDd3N; 26.01.2021

Есть много способов добиться этого, вот мой любимый:

Макет:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:navigationIcon="?attr/homeAsUpIndicator" />

Деятельность:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // back button pressed
    }
});
person Igor Bubelov    schedule 12.07.2016
comment
использование атрибута темы намного лучше, чем большинство других предложений в этом вопросе - person Pedro Loureiro; 17.10.2016
comment
вместо использования setNavigationOnClickListener() вы можете добавить case android.R.id.home: внутри onOptionsItemSelected (). - person eugene; 26.12.2016
comment
case android.R.id.home у меня не сработало. так что после некоторого поиска ваш ответ сработал .. спасибо. - person deejay; 16.08.2017
comment
Это наиболее достоверное решение, особенно если вы хотите использовать значок возврата по умолчанию системы Android. - person Nauman Aslam; 21.10.2017
comment
с помощью toolbar.setNavigationOnClickListener {onBackPressed ()} - person filthy_wizard; 14.06.2018
comment
нет значка по умолчанию - person filthy_wizard; 15.06.2018
comment
отличное решение для меня. Намного чище в реализации. - person Rhusfer; 16.10.2018
comment
На мой взгляд, это лучший ответ, потому что он не требует изменения состояния ActionBar. - person aeskreis; 01.12.2018
comment
В случае, если он не установлен как supportActionBar, это лучший ответ для управления панелью инструментов. - person Bryan Dormaier; 02.07.2020

вы можете использовать метод setNavigationIcon панели инструментов. Android Doc

mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleOnBackPress();
    }
});
person Sam    schedule 22.11.2015
comment
Не могли бы вы пояснить свой ответ? Ответы только на код не одобряются SO. - person honk; 22.11.2015
comment
Обратите внимание, что метод setNavigationOnClickListener() был добавлен в API уровня 21 и выше. - person Ali Mehrpour; 10.01.2016
comment
R.drawable.abc_ic_ab_back_mtrl_am_alpha теперь отсутствует в поддержке 23.2.0, вместо этого используйте принятый ответ. - person Milan; 02.03.2016

Если вы не хотите создавать собственный Toolbar, вы можете сделать вот так

public class GalleryActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...  
        getSupportActionBar().setTitle("Select Image");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}                     

В тебе AndroidManifest.xml

<activity
    android:name=".GalleryActivity"
    android:theme="@style/Theme.AppCompat.Light">        
</activity>

вы также можете поместить этот тег android:theme="@style/Theme.AppCompat.Light" в <aplication>, чтобы применить ко всем действиям

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

person Linh    schedule 10.08.2017
comment
Спасибо за if (item.getItemId() == android.R.id.home) - person Adizbek Ergashev; 18.01.2018
comment
Идеальное решение - person tenTen; 27.08.2020

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setNavigationIcon(R.drawable.back_arrow); // your drawable
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed(); // Implemented by activity
        }
    });

И для API 21+ android:navigationIcon

<android.support.v7.widget.Toolbar
    android:navigationIcon="@drawable/back_arrow"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"/>
person Ilya Gazman    schedule 16.02.2017

Я использовал этот метод из документации для разработчиков Google:

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getActionBar().setDisplayHomeAsUpEnabled(true);
}

Если вы получите исключение с нулевым указателем, это может зависеть от темы. Попробуйте использовать другую тему в манифесте или используйте ее в качестве альтернативы:

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

Затем в манифесте, где я установил родительскую активность для текущей активности:

<activity
        android:name="com.example.myapp.MyCurrentActivity"
        android:label="@string/title_activity_display_message"
     android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myapp.MyMainActivity" />
</activity>

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

person Paolo Anghileri    schedule 25.02.2017
comment
Ссылка на документы Google и getSupportActionBar() работали. Спасибо! - person Rick; 17.08.2017

Если вы использовали AppCompatActivity и пошли по пути его неиспользования, потому что вы не хотели получать автоматический ActionBar, который он предоставляет, потому что вы хотите отделить Toolbar из-за вашего материального дизайна потребности и CoordinatorLayout или AppBarLayout, тогда примите во внимание следующее:

Вы все еще можете использовать AppCompatActivity, вам не нужно прекращать его использование только для того, чтобы вы могли использовать <android.support.v7.widget.Toolbar> в своем xml. Просто отключите стиль панели действий следующим образом:

Во-первых, получите стиль из одной из тем NoActionBar, которая вам нравится в вашем styles.xml, я использовал Theme.AppCompat.Light.NoActionBar вот так:

<style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/primary_dark</item>
    ...
    ...
</style>

В манифесте вашего приложения выберите только что определенную дочернюю тему стиля, например:

    <activity
        android:name=".activity.YourSuperCoolActivity"
        android:label="@string/super_cool"
        android:theme="@style/SuperCoolAppBarActivity">
    </activity>

В вашем Activity Xml, если панель инструментов определена так:

...
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        />
...

Затем, и это важная часть, вы устанавливаете для панели действий поддержки значение AppCompatActivity, которое вы расширяете, так что панель инструментов в вашем xml становится панелью действий . Я считаю, что это лучший способ, потому что вы можете просто делать многие вещи, которые позволяет ActionBar, например, меню, автоматическое название активности, обработка выбора элементов и т. Д., Не прибегая к добавлению пользовательских обработчиков кликов и т. Д.

В переопределении onCreate вашей Activity сделайте следующее:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_super_cool);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    setSupportActionBar(toolbar);
    //Your toolbar is now an action bar and you can use it like you always do, for example:
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} 
person Dhiraj Gupta    schedule 26.09.2015

Если вы используете androidx.appcompat.app.AppCompatActivity, просто используйте:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Затем просто определите в Manifest.xml родительское действие.

<activity
    android:name=".MyActivity"
    ...>
  <meta-data
      android:name="android.support.PARENT_ACTIVITY"
      android:value=".ParentActivity" />
</activity>

Вместо этого, если вы используете Toolbar и хотите настраиваемое поведение, просто используйте:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar" 
    app:navigationIcon="?attr/homeAsUpIndicator"
    .../>

и в вашей деятельности:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //....
    }
});
person Gabriele Mariotti    schedule 29.05.2020
comment
Сработало у меня !!! - person void pointer; 23.04.2021

Простой и легкий способ показать кнопку возврата на панели инструментов

Вставьте этот код в метод onCreate

 if (getSupportActionBar() != null){

            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }

Вставьте этот метод переопределения вне метода onCreate

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()== android.R.id.home) {

        finish();
    }
    return super.onOptionsItemSelected(item);
}
person Waheed Sabir    schedule 15.04.2018

В Котлине это было бы

private fun setupToolbar(){
    toolbar.title = getString(R.string.YOUR_TITLE)
    setSupportActionBar(toolbar)
    supportActionBar?.setDisplayHomeAsUpEnabled(true)
    supportActionBar?.setDisplayShowHomeEnabled(true)
}

// don't forget click listener for back button
override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}
person gprathour    schedule 11.11.2018

Вы легко можете это сделать.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

Кредиты: https://freakycoder.com/android-notes-24-how-to-add-back-button-at-toolbar-941e6577418e

person Euler Tiago    schedule 29.10.2018

Например, в AppCompatActivity вы можете сделать

public class GrandStatActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grand_stat);
    }

    @Override
    public void onResume() {
        super.onResume();

        // Display custom title
        ActionBar actionBar = this.getSupportActionBar();
        actionBar.setTitle(R.string.fragment_title_grandstats);

        // Display the back arrow
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

    // Back arrow click event to go to the parent Activity
    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }

}
person DmitryBoyko    schedule 02.03.2018

В вашем файле манифеста для действия, в которое вы хотите добавить кнопку возврата, мы будем использовать свойство android: parentActivityName.

        <activity
        android:name=".WebActivity"
        android:screenOrientation="portrait"
        android:parentActivityName=".MainActivity"
        />

P.S. Этот атрибут был введен в API уровня 16.

person Sunny Kumar Aditya    schedule 08.10.2017

Это сработало отлично

public class BackButton extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_box);
        Toolbar chatbox_toolbar=(Toolbar)findViewById(R.id.chat_box_toolbar);
        chatbox_toolbar.setTitle("Demo Back Button");
        chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white));
        setSupportActionBar(chatbox_toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        chatbox_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Define Back Button Function
            }
        });
    }
}
person Vikash Sharma    schedule 09.01.2017

Если вы хотите получить стрелку назад на панели инструментов, которая не установлена ​​в качестве SupportActionBar:

(котлин)

val resId = getResIdFromAttribute(toolbar.context, android.R.attr.homeAsUpIndicator)
toolbarFilter.navigationIcon = ContextCompat.getDrawable(toolbar.context, resId)
toolbarFilter.setNavigationOnClickListener { fragmentManager?.popBackStack() }

чтобы получить res из атрибутов:

@AnyRes
fun getResIdFromAttribute(context: Context, @AttrRes attr: Int): Int {
    if (attr == 0) return 0
    val typedValueAttr = TypedValue()
    context.theme.resolveAttribute(attr, typedValueAttr, true)
    return typedValueAttr.resourceId
}
person John    schedule 30.07.2019

Во-первых, вам нужно инициализировать панель инструментов:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

затем вызовите кнопку возврата на панели действий:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
person Anubhav    schedule 31.10.2019

Добавьте это в xml активности в папке макета:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <android.support.v7.widget.Toolbar
        android:id="@+id/prod_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>

Сделайте панель инструментов интерактивной, добавьте их в метод onCreate:

Toolbar toolbar = (Toolbar) findViewById(R.id.prod_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});
person Mike Yang    schedule 10.12.2018

Возможно, более надежный способ получить значок вверх из вашей темы (если вы не используете панель инструментов в качестве панели действий):

toolbar.navigationIcon = context.getDrawableFromAttribute(R.attr.homeAsUpIndicator)

Чтобы превратить атрибут темы в чертеж, я использовал функцию расширения:

fun Context.getDrawableFromAttribute(attributeId: Int): Drawable {
    val typedValue = TypedValue().also { theme.resolveAttribute(attributeId, it, true) }
    return resources.getDrawable(typedValue.resourceId, theme)
}
person danwilkie    schedule 12.12.2019

Если вы используете DrawerLayout с ActionBarDrawerToggle, чтобы отображать кнопку Назад вместо кнопки Меню (и наоборот), вам нужно добавить этот код в свою деятельность:

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

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.application_name, R.string.application_name);
    mDrawerLayout.addDrawerListener(mDrawerToggle);

    mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_32dp);
    mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onBackPressed(); // Or you can perform some other action here when Back button is clicked.
        }
    });
    mDrawerToggle.syncState();
    // ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item))
        return true;

    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        // ...
    }

    return super.onOptionsItemSelected(item);
}

public void showBackInToolbar(boolean isBack) {
    // Remove next line if you still want to be able to swipe to show drawer menu.
    mDrawerLayout.setDrawerLockMode(isBack ? DrawerLayout.LOCK_MODE_LOCKED_CLOSED : DrawerLayout.LOCK_MODE_UNLOCKED);
    mDrawerToggle.setDrawerIndicatorEnabled(!isBack);
    mDrawerToggle.syncState();
}

Поэтому, когда вам нужно показать кнопку Назад вместо кнопки Меню, вызовите showBackInToolbar (true), а если вам нужно Меню , вызовите showBackInToolbar (false).

Вы можете создать стрелку назад (ic_arrow_back_white_32dp) здесь, выполните поиск arrow_back в Раздел Clipart (используйте 32dp по умолчанию с заполнением 8dp). Просто выберите нужный цвет.

person Borzh    schedule 04.03.2019

Вы всегда можете добавить Relative layout или Linear Layout в свой Toolbar и разместить значок просмотра изображения для значка «Назад» или значка закрытия в любом месте панели инструментов по своему усмотрению

Например, я использовал относительный макет на своей панели инструментов.

 <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_top"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:minHeight="?attr/actionBarSize"
                android:nextFocusDown="@id/netflixVideoGridView"
                app:layout_collapseMode="pin">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">


                    <TextView

                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Myflix"
                        android:textAllCaps="true"
                        android:textSize="19sp"
                        android:textColor="@color/red"
                        android:textStyle="bold" />


                    <ImageView
                        android:id="@+id/closeMyFlix"
                        android:layout_alignParentRight="true"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        app:srcCompat="@drawable/vector_close" />


                </RelativeLayout>

            </android.support.v7.widget.Toolbar>

А это выглядит так:

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

Вы можете добавить прослушиватель кликов в это представление изображения из Activity или фрагмента, подобного этому.

  closeMyFlix.setOnClickListener({
            Navigator.instance.showFireTV(  activity!!.supportFragmentManager)
        })
person Hitesh Sahu    schedule 19.03.2019

С Kotlin это стало:

XML:

<include
android:id="@+id/tbSignToolbar "
layout="@layout/toolbar_sign_up_in"/>

В вашей деятельности: -

setSupportActionBar(tbSignToolbar as Toolbar?)//tbSignToolbar :id of your toolbar 
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
person wissem miled    schedule 19.02.2019

Если вы используете JetPack Navigation.

Вот макет для MainActivity

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                               xmlns:app="http://schemas.android.com/apk/res-auto"
                                               xmlns:tools="http://schemas.android.com/tools"
                                               android:layout_width="match_parent"
                                               android:layout_height="match_parent"
                                               tools:context=".MainActivity">

<androidx.appcompat.widget.Toolbar
        android:id="@+id/toolBar"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

</androidx.appcompat.widget.Toolbar>

<fragment
        android:id="@+id/my_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintTop_toBottomOf="@id/toolBar"
        app:layout_constraintBottom_toTopOf="parent"
        app:navGraph="@navigation/nav_graph"/>

SetUp your toolbar in your activity like below in onCreate() of your Activity class.

val navHostFragment = supportFragmentManager
        .findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return

val navController = navHostFragment.findNavController()
val toolBar = findViewById<Toolbar>(R.id.toolBar)
setSupportActionBar(toolBar) // To set toolBar as ActionBar
setupActionBarWithNavController(navController)

setupActionBarWithNavController (navController) При необходимости создаст кнопку возврата на панели инструментов и обрабатывает функциональность backButton. Если вам нужно написать функциональность CustomBack, создайте callBack, как показано ниже, в методе onCreate () фрагмента.

val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
        // Handle the back button event
    }

Из документации: https://developer.android.com/guide/navigation/navigation-custom-back

person Prakash    schedule 19.09.2019

возможно, это кому-то поможет, я не нашел в ответах того, что сделал к концу: с ActionBarDrawerToggle mDrawerToggle; для отображения стрелки назад в наборе панели инструментов: mDrawerToggle.setDrawerIndicatorEnabled (false);

и если вы хотите, чтобы гамбургер отображался на панели инструментов:

mDrawerToggle.setDrawerIndicatorEnabled (true);

person batsheva    schedule 19.11.2020

person    schedule
comment
Вы можете использовать ретроламбду. - person Artemiy; 27.04.2017
comment
это то, что у меня есть, и это не работает. не могу понять это. - person filthy_wizard; 15.06.2018