Кнопка закриття матеріалу на панелі інструментів замість кнопки Назад


82

Я бачив у програмі Google Inbox, що створює новий електронний лист, на панелі інструментів замість кнопки "Назад" (стрілка) є кнопка "закрити" (див. Малюнок).

Як я можу цього досягти?

кнопка складання вхідних повідомлень

Відповіді:


108

Використовуйте  

this.getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_close);

 

для досягнення цього.

Ви можете створити свою власну піктограму закриття або отримати піктограму матеріального дизайну, встановлену на GitHub. Крім того, додайте цей рядок перед наведеним вище рядком, щоб зробити функцію близького функціонування як стрілка назад.

this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Це не працює. Це не замінює стрілку назад новою піктограмою, з’являються обидві. Крім того, за допомогою цього рішення піктограма не отримує властивість "colorPrimaryDark".
Марта Родрігес

Це працює, але це не зовсім те, що я хотів. Я очікував працювати так, як це робить піктограма "назад" з "colorPrimaryDark". Але, схоже, піктограма "закрити" не є частиною SDK. Дякую @AlokNair!
Марта Родрігес,

1
Відмінно працює, коли використовується ActionBarActivity, а PARENT вказано в маніфесті. +1 за відповідь. Дякую, друже!
PsyGik

7
Я виявив, що мені довелося викликати setDisplayHomeAsUpEnabled перед SetHomeAsUpIndicator, інакше піктограма не буде замінена.
CodeChimp

1
і як повернутися до оригіналу?
Мішель Файнштейн,

22

Вам потрібно визначити батьків у маніфесті, а потім замінити onSupportNavigationUp (), якщо, звичайно, використовується панель додатків підтримки. Також перейдіть на цей зручний сайт із пакетами значків: https://www.google.com/design/icons/

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

    setContentView(R.layout.yourAwesomeLayout);

    setupToolBar();    
}

private void setupToolBar() {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    if (toolbar == null) return;

    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
}

@Override
public boolean onSupportNavigateUp() {
    finish(); // close this activity as oppose to navigating up

    return false;
}

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


3
з якоїсь причини ви повернули помилкове onSupportNavigateUp()? У документації сказано, що це лише прапор успіху
brainmurphy1,

7

вибачте за пізню відповідь. я знайшов найпростіше рішення для вас . тут перш за все відповідь не працює для мене ( because i want to use toolbar not actionBar due to theming). тому спробуйте додати кнопку закриття через макет xml. і це працює.

ось синтаксис xml для додавання кнопки закриття на панель інструментів (v7).

app:navigationIcon="@drawable/ic_close_black_24dp"

ans ось викладене зображення вихідне зображення


Звідки береться @drawable/ic_close_black_24dp?
CACuzcatlan,

@CACuzcatlan Це просто випадкове зображення, яке він має у папці свого малюнка. Ви можете вибрати будь-яку піктограму.
Міккель Ларсен

@CACuzcatlan ви можете знайти його у векторних ресурсах Android Studio.
Sourav Bagchi

5
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Search");
toolbar.setNavigationIcon(R.drawable.abc_ic_clear_mtrl_alpha);
setSupportActionBar(toolbar);

3

Альтернативою визначенню батьківської активності в маніфесті є обробка того, які дії в методі onOptionsItemSelected, як у цьому прикладі:

 @Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        // Respond to the action bar's Up/Home/back button
        case android.R.id.home:
            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
}

-5

Ви можете визначити стиль:

<style name="Theme.Toolbar.Clear">
    <item name="toolbarNavigationIcon">@drawable/abc_ic_clear_mtrl_alpha</item>
</style>

і використовувати його у своїй темі:

<style name="Theme.Clear">
    <item name="toolbarTheme">@style/Theme.Toolbar.Clear</item>
</style>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.