Jestem migracji z ActionBar
do Toolbar
w mojej aplikacji. Ale nie wiem, jak wyświetlać i ustawiać zdarzenie kliknięcia na Wstecznej strzałce Toolbar
tak jak ja Actionbar
.
Z ActionBar
dzwonię mActionbar.setDisplayHomeAsUpEnabled(true)
. Ale nie ma podobnej metody takiej jak ta.
Czy ktoś kiedykolwiek zmierzył się z tą sytuacją i jakoś znalazł sposób na jej rozwiązanie?
Odpowiedzi:
Jeśli używasz
ActionBarActivity
, możesz nakazać systemowi Android, aby używał tegoToolbar
wActionBar
podobny sposób:A potem dzwoni do
będzie działać. Możesz również użyć tego w dołączonych fragmentach,
ActionBarActivities
możesz użyć tego w następujący sposób:Jeśli nie używasz
ActionBarActivities
lub chcesz uzyskać strzałkę wstecz naToolbar
nie ustawionym jako twójSupportActionBar
, możesz użyć następujących czynności:Jeśli używasz
android.support.v7.widget.Toolbar
, dodaj następujący kod doAppCompatActivity
:źródło
R.drawable.abc_ic_ab_back_mtrl_am_alpha
jednegoR.drawable.ic_action_back
.toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
Widzę wiele odpowiedzi, ale tutaj jest moja, o której wcześniej nie wspomniano. Działa z API 8+.
źródło
onOptionItemSelected()
Uzupełnia to, czego MrEngineer13 nie ujął w swojej odpowiedzi.Jest na to wiele sposobów, oto mój ulubiony:
Układ:
Czynność:
źródło
setNavigationOnClickListener()
możesz dodaćcase android.R.id.home:
wewnątrz 'onOptionsItemSelected () `.case android.R.id.home
nie działało dla mnie. więc po pewnym czasie Twoja odpowiedź zadziałała. dzięki.możesz użyć metody setNavigationIcon na pasku narzędzi. Dokument Android
źródło
setNavigationOnClickListener()
została dodana do interfejsu API na poziomie 21 i wyższymJeśli nie chcesz tworzyć niestandardowego
Toolbar
, możesz to zrobić w ten sposóbW Tobie
AndroidManifest.xml
możesz także oznaczyć
android:theme="@style/Theme.AppCompat.Light"
to<aplication>
tagiem, aby zastosować je do wszystkich działańźródło
if (item.getItemId() == android.R.id.home)
I dla API 21+
android:navigationIcon
źródło
Użyłem tej metody z Dokumentacji programisty Google :
Jeśli otrzymasz wyjątek wskaźnika zerowego, może to zależeć od motywu. Spróbuj użyć innego motywu w manifeście lub użyj tego alternatywnie:
Następnie w manifeście, w którym ustawiam aktywność nadrzędną dla bieżącej aktywności:
Mam nadzieję, że to Ci pomoże!
źródło
getSupportActionBar()
działał. Dzięki!Jeśli ty były przy użyciu
AppCompatActivity
i poszły w dół drogi nie jest używany, ponieważ nie chciał, aby uzyskać automatyczneActionBar
, że zapewnia, ponieważ chcemy, aby oddzielić się zToolbar
powodu swoich potrzeb Materiał projekt iCoordinatorLayout
czyAppBarLayout
zatem rozważyć to:Nadal możesz używać
AppCompatActivity
, nie musisz przestać go używać tylko po to, aby móc użyć<android.support.v7.widget.Toolbar>
w xml. Po prostu wyłącz styl paska akcji w następujący sposób:Po pierwsze, uzyskaj styl z jednego z motywów NoActionBar, który lubisz w swoim
styles.xml
, użyłem go w tenTheme.AppCompat.Light.NoActionBar
sposób:W manifeście aplikacji wybierz właśnie zdefiniowany motyw stylu potomnego:
W pliku XML aktywności, jeśli pasek narzędzi jest zdefiniowany w następujący sposób:
I to jest ważna część, którą ustaliłeś pasek akcji wsparcia na AppCompatActivity, które rozszerzasz, tak aby pasek narzędzi w twoim pliku xml stał się się paskiem akcji. Uważam, że jest to lepszy sposób, ponieważ możesz po prostu robić wiele rzeczy, na które pozwala ActionBar, takich jak menu, automatyczny tytuł aktywności, obsługa wyboru pozycji itp. Bez uciekania się do dodawania niestandardowych programów obsługi kliknięć itp.
W zastąpieniu onCreate działania wykonaj następujące czynności:
źródło
źródło
Prosty i łatwy sposób pokazania przycisku Wstecz na pasku narzędzi
Wklej ten kod w metodzie onCreate
Wklej tę metodę zastępowania poza metodą onCreate
źródło
W Kotlinie byłoby
źródło
Z łatwością możesz to zrobić.
Kredyty: https://freakycoder.com/android-notes-24-how-to-add-back-button-at-toolbar-941e6577418e
źródło
Na
AppCompatActivity
przykład możesz to zrobićźródło
W pliku manifestu dla działania, do którego chcesz dodać przycisk Wstecz, użyjemy właściwości android: parentActivityName
PS Ten atrybut został wprowadzony na poziomie API 16.
źródło
To działało idealnie
źródło
Najpierw musisz zainicjować pasek narzędzi:
następnie wywołaj przycisk Wstecz z paska akcji:
źródło
Jeśli chcesz wyświetlić strzałkę wstecz na pasku narzędzi, który nie jest ustawiony jako pasek SupportActionBar:
(kotlin)
aby uzyskać res z atrybutów:
źródło
Dodaj to do xml działania w folderze układu:
Ustaw klikalny pasek narzędzi, dodaj je do metody onCreate:
źródło
Prawdopodobnie bardziej niezawodny sposób na uzyskanie ikony w górę z motywu (jeśli nie używasz paska narzędzi jako paska akcji):
Aby zmienić atrybut motywu na rysunkowy, użyłem funkcji rozszerzenia:
źródło
Jeśli używasz DrawerLayout z ActionBarDrawerToggle , a następnie, aby wyświetlić przycisk Wstecz zamiast przycisku Menu (i viceversa), musisz dodać ten kod do działania:
Więc jeśli chcesz pokazać przycisk Wstecz zamiast przycisku Menu , wywołaj showBackInToolbar (true) , a jeśli potrzebujesz przycisku Menu , wywołaj showBackInToolbar (false) .
Możesz wygenerować strzałkę wstecz (ic_arrow_back_white_32dp) tutaj , wyszukaj arrow_back w sekcji Clipart (użyj domyślnej 32dp z wypełnieniem 8dp). Po prostu wybierz żądany kolor.
źródło
Zawsze można dodać
Relative layout
lubLinear Layout
w twojejToolbar
i umieścić widok zdjęcie ikonę plecy lub ikonę Zamknij gdziekolwiek w pasku jak chceszNa przykład użyłem układu względnego na pasku narzędzi
I wygląda to tak:
Możesz dodać detektor kliknięć do tego widoku obrazu z działania lub fragmentu w ten sposób.
źródło
Z Kotlin stał się:
Xml:
W Twojej działalności: -
źródło
Jeśli korzystasz z nawigacji JetPack.
Oto układ dla MainActivity
Ustaw pasek narzędzi w swojej aktywności, jak poniżej w onCreate () swojej klasy Activity.
setupActionBarWithNavController (navController) W razie potrzeby utworzy przycisk Wstecz na pasku narzędzi i obsługuje funkcję BackButton. Jeśli musisz napisać funkcję CustomBack, utwórz metodę callBack, jak poniżej, w swojej metodzie onCreate ()
Z dokumentacji: https://developer.android.com/guide/navigation/navigation-custom-back
źródło
Jeśli używasz
androidx.appcompat.app.AppCompatActivity
tylko użyj:Następnie po prostu zdefiniuj w
Manifest.xml
działaniu nadrzędnym.Zamiast tego, jeśli używasz a
Toolbar
i chcesz niestandardowego zachowania, po prostu użyj:oraz w Twojej działalności:
źródło