Показать Назад Стрелка на панели инструментов Android

Я переношу из ActionBar в Toolbar в своем приложении. Но я не знаю, как отображать и устанавливать событие click на Toolbar Back Arrow на Toolbar как Actionbar на Toolbar Actionbar .
Введите описание изображения здесь

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

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

Если вы используете 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; } 

Я вижу много ответов, но вот моя, о которой не упоминалось ранее. Он работает от 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); } 

Вы можете использовать инструмент 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(); } }); 

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

Планировка:

 <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 } }); 

Если вы использовали AppCompatActivity и пошли по пути не использовать его, потому что вы не хотели получать автоматический ActionBar который он предоставляет, потому что вы хотите выделить Toolbar из-за ваших потребностей в Material Design и 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> 

В вашей деятельности Xml, если панель инструментов определена следующим образом:

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

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

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

 @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); } 
  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"/> 

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

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

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

 @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> 

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

 MyActivity extends AppCompatActivity { private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { ... toolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(arrow -> onBackPressed()); } 

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

 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 } }); } } 

Если вы не хотите создавать пользовательскую 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(); } } } 

В AndroidManifest.xml

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

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

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

Intereting Posts
Как заставить LibGDX работать над проектом Eclipse для работы над AIDE (приложение для Android IDE) Панель инструментов и контекстный ActionBar с AppCompat-v7 Networkimageview для отображения изображения в автономном режиме? После уничтожения приложения и его повторного открытия. Как и приложение facebook, Как отображать прозрачную активность по другому действию без удаления предыдущей активности Открыть следующее действие только после того, как навигационный ящик завершает закрытие анимации Сообщите Android AsyncTaskLoader, чтобы получить больше данных Как увеличить размер значков вкладок в TabLayout Возможно ли иметь анимированный чертеж? Кнопка возврата ActionBarActivity не выскочит из задней части Диалоговая активность для переноса содержимого Метод getOrientation () Android возвращает плохие результаты Как удалить всплывающий текст всплывающего окна Android в процессе поиска? Как работают технологии интеллектуальных обновлений Google? Как удалить дополнение в Android CheckBox Включение события MediaPlayerBuffering для запуска в android-vlc