Значок панели навигации не
Я пытаюсь новый компонент панели инструментов и возникли некоторые проблемы со значком навигации. Я хочу реализовать пользовательский значок для обратной навигации :
в моем манифесте я установил родителя для моей деятельности:
<activity android:name=".CardsActivity" android:parentActivityName=".MainActivity">
<!-- Parent activity meta-data to support API level 7+ -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
Я объявляю панель инструментов следующим образом:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.lollitest.MainActivity" >
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:layout_marginBottom="10dp"
android:background="?attr/colorPrimary" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/my_awesome_toolbar"
android:text="@string/hello_world" />
</RelativeLayout>
затем в моей деятельности я настраиваю панель инструментов следующим образом:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
toolbar.setNavigationIcon(R.drawable.ic_good);
toolbar.setTitle("Title");
toolbar.setSubtitle("Sub");
toolbar.setLogo(R.drawable.ic_launcher);
setSupportActionBar(toolbar);
что дает мне :
задняя значок не тот, который я установил с setNavigationIcon()
! Независимо от того, что я даю методу, значок навигации всегда является стрелкой назад.
Я попытался удалить родительскую ассоциацию в манифесте, но единственный эффект (очевидно), чтобы предотвратить кнопку, чтобы вернуться.
наоборот, если я хочу значок стрелки назад по умолчанию и не звоните setNavigationIcon()
у меня нет никакого значка вообще.
как правильно обрабатывать значок навигации на панели инструментов (пользовательский и по умолчанию) ?
Примечание: я запускаю свой тест на Android 4.4
13 ответов:
В настоящее время вы можете использовать его, изменяя порядок: (кажется, это ошибка)
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_good); toolbar.setTitle("Title"); toolbar.setSubtitle("Sub"); toolbar.setLogo(R.drawable.ic_launcher);
специфичный для значка навигации, это правильный порядок
// get the actionbar as Toolbar and set it up Toolbar toolbar = (Toolbar) findViewById(R.id.signIn_toolbar); setSupportActionBar(toolbar);
информируйте панель инструментов, чтобы обеспечить обратную навигацию. Это установит значок на значок материала по умолчанию
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
позже переопределите значок с пользовательским, в моем случае значок Holo back
toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_36dp);
(ответ пользователю 802421)
private void setToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_action_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } }
панели инструментов.xml
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="@dimen/toolbar_height" android:background="?attr/colorPrimaryDark" />
Я только что нашел решение. Это действительно очень просто:
mDrawerToggle.setDrawerIndicatorEnabled(false);
надеюсь, что это поможет вам.
используйте setNavigationIcon, чтобы изменить его. не забудьте сначала создать ActionBarDrawerToggle!
пример кода работает для меня:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); drawer = (DrawerLayout)findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); toolbar.setNavigationIcon(R.drawable.ic_menu);
у меня была аналогичная проблема. После большой головной боли я обнаружил, что мой ActionBarDrawerToggle изменял значок, также когда он не должен изменять значок (потому что я не давал ссылку на панель инструментов для компонента переключения). Так что в моем NavigationDrawerFragment класс (который обрабатывает Открытие и закрытие) в
setUp(...)
метод, который я установилmDrawerToggle.setHomeAsUpIndicator(R.drawable.app_icon);
и, наконец, это сработало.
Я попытался настроить панель инструментов, как @Gabriele Mariotti, но у меня были некоторые проблемы с названием. Итак, я установил порядок
toolbar.setTitle("Title") setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_good);
и это работает.
я использовал метод, который действительно является загадкой всех тех, что выше. Я также обнаружил, что onOptionsItemSelected никогда не активируется.
mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBar().setHomeButtonEnabled(true); Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); if (toolbar != null) { toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); }
можно использовать
invalidate()
метод для изменения состояния панели инструментов в любом месте. Пример:Toolbar toolbar = (Toolbar)findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.mipmap.arrow_white); toolbar.invalidate(); // restore toolbar
удалите эту строку из действия, если вы добавили
@Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); }
затем установите значок
getSupportActionBar().setHomeAsUpIndicator(icon);
попробуйте это:
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:toolbar="http://schemas.android.com/apk/res-auto" android:id="@+id/tool_drawer" android:layout_width="match_parent" android:layout_height="?actionBarSize" toolbar:navigationIcon="@drawable/ic_navigation"> </android.support.v7.widget.Toolbar>
работать на меня...
<android.support.v7.widget.Toolbar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/toolBar" android:background="@color/colorGreen" app:title="Title" app:titleTextColor="@color/colorBlack" app:navigationIcon="@drawable/ic_action_back"/>
Если вы не хотите устанавливать панель инструментов в качестве панели действий, вы можете использовать это:
val toggle = ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) toggle.isDrawerSlideAnimationEnabled = false toggle.isDrawerIndicatorEnabled = false toggle.setHomeAsUpIndicator(AppCompatResources.getDrawable(this, ...)) drawer!!.addDrawerListener(toggle) toggle.setToolbarNavigationClickListener { setDrawerOpened(!isDrawerOpened()) } toggle.syncState() fun setDrawerOpened(open: Boolean) { if (open == drawerLayout.isDrawerOpen(GravityCompat.START)) return if (open) drawerLayout.openDrawer(GravityCompat.START) else drawerLayout.closeDrawer(GravityCompat.START) }