Przycisk „zamknij” materiału na pasku narzędzi zamiast przycisku Wstecz

81

Widziałem w aplikacji Google Inbox, jak tworzyłem nowy e-mail, na pasku narzędzi zamiast przycisku Wstecz (strzałka) ma przycisk „zamknij” (patrz zdjęcie).

Jak mogę to osiągnąć?

przycisk zamykania skrzynki odbiorczej tworzenia wiadomości

Marta Rodriguez
źródło

Odpowiedzi:

108

Posługiwać się  

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

 

osiągnąć to.

Możesz stworzyć własną ikonę zamknięcia lub pobrać z zestawu ikon Material Design na GitHub. Dodaj również tę linię przed powyższą linią, aby zamknąć funkcję jako strzałkę wstecz.

this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Alok Nair
źródło
To nie działa. Nie zastępuje strzałki wstecz z nową ikoną, pojawiają się obie. Ponadto w tym rozwiązaniu ikona nie otrzymuje właściwości „colorPrimaryDark”.
Marta Rodriguez
Działa, ale nie jest dokładnie tym, czego chciałem. Spodziewałem się działać tak, jak robi to ikona wstecz, z "colorPrimaryDark". Wygląda jednak na to, że ikona „zamknij” nie jest częścią zestawu SDK. Dzięki @AlokNair!
Marta Rodriguez
1
Działa dobrze, gdy używasz ActionBarActivity, a PARENT jest określony w manifeście. +1 za odpowiedź. Dzięki stary!
PsyGik
7
Okazało się, że muszę wywołać setDisplayHomeAsUpEnabled przed SetHomeAsUpIndicator, w przeciwnym razie ikona nie zostanie zastąpiona.
CodeChimp
1
i jak wrócić do oryginału?
Michel Feinstein
22

Musisz zdefiniować rodzica w manifeście, a następnie zastąpić onSupportNavigationUp (), jeśli oczywiście używasz paska aplikacji pomocy technicznej. Przejdź również do tej przydatnej witryny z pakietami ikon: 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;
}

wprowadź opis obrazu tutaj

pracował
źródło
3
z jakiegoś powodu zwróciłeś fałsz onSupportNavigateUp()? Dokumentacja mówi, że to tylko flaga sukcesu
brainmurphy1
7

przepraszam za spóźnioną odpowiedź. znalazłem dla Ciebie najłatwiejsze rozwiązanie . tutaj przede wszystkim odpowiedź nie działa dla mnie ( because i want to use toolbar not actionBar due to theming). więc spróbuj dodać przycisk zamykania poprzez układ XML. i to działa.

tutaj jest składnia xml dodająca przycisk zamykania do paska narzędzi (v7).

app:navigationIcon="@drawable/ic_close_black_24dp"

A oto obraz wyjściowy obraz wyjściowy

Rk215 Tech
źródło
Skąd się @drawable/ic_close_black_24dpbierze?
CACuzcatlan
@CACuzcatlan To tylko losowy obraz, który ma w swoim folderze do rysowania. Możesz wybrać dowolną ikonę.
Mikkel Larsen
@CACuzcatlan można go znaleźć w zasobach wektorowych 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);
krishnan
źródło
3

Alternatywą dla zdefiniowania aktywności rodzica w manifeście jest obsłużenie, jaką akcję należy podjąć w metodzie onOptionsItemSelected, jak w tym przykładzie:

 @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);
}
34m0
źródło
-5

Możesz zdefiniować styl:

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

i użyj go w swoim motywie:

<style name="Theme.Clear">
    <item name="toolbarTheme">@style/Theme.Toolbar.Clear</item>
</style>
fabiozo
źródło