Ответ 1
Чтобы изменить значок, просто вызовите во время выполнения:
toolbar.setNavigationIcon(R.drawable.home);
Уловка со стилями/темами не работает.
Я хочу изменить стандартный индикатор ActionBar homeAsUp (drawable) на моей панели инструментов AppCompat. Как это сделать? Отображается только стрелка по умолчанию.
(то же самое для другого уровня API):
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- API 14 theme customizations can go here. -->
<item name="android:windowActionBarOverlay">true</item>
<item name="android:homeAsUpIndicator">@drawable/home</item>
<!-- Support library compatibility -->
<item name="windowActionBarOverlay">true</item>
<item name="homeAsUpIndicator">@drawable/home</item>
</style>
Панель инструментов в макете фрагмента:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:homeAsUpIndicator="@drawable/home"
android:minHeight="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/AppTheme" />
В фрагменте:
toolbar = (Toolbar) rootView.findViewById(R.id.my_awesome_toolbar);
activity.setSupportActionBar(toolbar);
ActionBar actionBar = activity.getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
Чтобы изменить значок, просто вызовите во время выполнения:
toolbar.setNavigationIcon(R.drawable.home);
Уловка со стилями/темами не работает.
Я пробовал setHomeAsUpIndicator(int resId)
, он работает.
private void initToolbar ( Toolbar mToolbar ) {
mToolbar.setTitleTextColor ( getResources ().getColor ( R.color.main_title ) );
setSupportActionBar ( mToolbar );
ActionBar actionbar = getSupportActionBar ();
actionbar.setDisplayHomeAsUpEnabled ( true );
actionbar.setHomeAsUpIndicator ( R.drawable.ic_action_back );
}
Но mToolbar.setNavigationIcon(R.drawable.ic_action_back)
не работает: (
Просто добавьте эту строку в свои styles.xml
<item name="navigationIcon">@drawable/ic_back_arrow</item>
Если файл android.support.v7.app.ActionBarDrawerToggle используется вместе с DrawerLayout и панель инструментов, вы можете изменить значок homeAsUp следующим кодом:
//set home as up indicator
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_up_indicator);
//remove home as up indicator
mDrawerToggle.setHomeAsUpIndicator(null);
чтобы показать индикацию homeAsUpIndicator вместо домашнего индикатора, выполните следующие действия:
mDrawerToggle.setDrawerIndicatorEnabled(false);
Docs:
ActionBarDrawerToggle # setHomeAsUpIndicator ActionBarDrawerToggle # setDrawerIndicatorEnabled
К сожалению, если эта строка стиля используется в общедоступной панели AppCompat ToolBar/App с другими действиями в приложении, включая основное действие, указанная " navigationIcon" будет показана автоматически, в отличие от стандартный стандартный файл HomeAsUpIndicator по умолчанию, который не отображается, если явно явно не указано , как правило, следующим образом: (в onCreate())
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
С приведенной выше строкой стиля, поскольку она ведет себя обратным образом, аналогично, индикатор должен быть явно отключен, если это нежелательно показывать, как на основном мероприятии, следующим образом: (в onCreate())
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
(как показано на телефонах Android 4.0.4, 4.3 и 4.4.2)
я только что узнал, что он действительно работает toolbar.setNavigationIcon(R.drawable.ic_action_back) и вот код, чтобы заставить его работать.
@Override
protected void onCreate(Bundle savedInstanceState) {
.....
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_action_back);
Введите следующий код в onOptionsItemSelected (элемент MenuItem)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
......
if (id == android.R.id.home) {
startActivity(new Intent(this, MainActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
Примечание. Основная активность в этом коде - это текущая активность, на которую я хочу вернуть свою кнопку возврата или дома. Надеюсь, это поможет