Próbuję użyć następującego kodu, aby wyśrodkować tekst w ActionBar
, ale wyrównuje się do lewej.
Jak sprawiasz, że pojawia się w środku?
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle("Canteen Home");
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.back);
android
android-actionbar
android-theme
Sourabh Saldi
źródło
źródło
Odpowiedzi:
Aby mieć wyśrodkowany tytuł w ABS (jeśli chcesz mieć ten domyślny
ActionBar
, po prostu usuń "wsparcie" w nazwach metod), możesz po prostu zrobić to:W swojej aktywności, w swojej
onCreate()
metodzie:abs_layout
:Teraz powinieneś mieć
Actionbar
tylko tytuł. Jeśli chcesz ustawić niestandardowe tło, ustaw je w powyższym układzie (ale nie zapomnij ustawićandroid:layout_height="match_parent"
).lub z:
źródło
android:layout_gravity="center"
do LinearLayout.((TextView)actionBar.getCustomView().findViewById(R.id.textView1)).setText("new title");
, gdzie textView1 to TwójTextView
identyfikator w Twoim CustomView.Nie odniosłem wielkiego sukcesu z innymi odpowiedziami ... poniżej jest dokładnie to, co działało dla mnie na Androidzie 4.4.3 przy użyciu ActionBar w bibliotece wsparcia v7. Mam ustawione wyświetlanie ikony szuflady nawigacji („przycisk menu burgera”)
XML
Jawa
źródło
params
obiekt? Czy nie możemy określić grawitacji w zewnętrznym pliku układu, który przypisujemy do ActionBar.Zdefiniuj swój własny widok z tekstem tytułu, a następnie przekaż LayoutParams do setCustomView (), jak mówi Sergii.
EDYTOWANE : Przynajmniej w przypadku szerokości należy użyć WRAP_CONTENT lub szuflady nawigacji, ikony aplikacji itp. NIE BĘDZIE POKAZANA (widok niestandardowy wyświetlany u góry innych widoków na pasku akcji). Dzieje się tak zwłaszcza wtedy, gdy nie jest wyświetlany żaden przycisk akcji.
EDYTOWANO : Odpowiednik w układzie xml:
Nie wymaga to określenia LayoutParams.
źródło
Tylko szybki dodatek do odpowiedzi Ahmada. Nie możesz już używać getSupportActionBar (). SetTitle, gdy używasz widoku niestandardowego z TextView. Aby więc ustawić tytuł, gdy masz wiele działań z tym niestandardowym ActionBar (używając tego jednego XML), w metodzie onCreate () po przypisaniu niestandardowego widoku:
źródło
DOBRZE. Po wielu badaniach, w połączeniu z zaakceptowaną odpowiedzią powyżej, znalazłem rozwiązanie, które działa również, jeśli masz inne rzeczy na pasku akcji (przycisk Wstecz / Strona główna, przycisk menu). Więc zasadniczo umieściłem metody override w działaniu podstawowym (które rozszerzają wszystkie inne działania) i umieściłem tam kod. Ten kod ustawia tytuł każdego działania, tak jak jest dostarczony w AndroidManifest.xml, a także wykonuje inne niestandardowe rzeczy (takie jak ustawienie niestandardowego odcienia przycisków paska akcji i niestandardowej czcionki w tytule). Musisz tylko pominąć grawitację w action_bar.xml i zamiast tego użyć dopełnienia.
actionBar != null
check jest używany, ponieważ nie wszystkie moje działania go mają.Testowane na 4.4.2 i 5.0.1
A mój action_bar.xml wygląda tak (jeśli ktoś jest zainteresowany):
EDYCJA : Jeśli chcesz zmienić tytuł na inny PO załadowaniu działania (zostało już wywołane onCreateOptionsMenu), umieść inny TextView w swoim action_bar.xml i użyj poniższego kodu, aby „dopełnić” ten nowy TextView, ustawić tekst i pokazać to:
EDYCJA (25.08.2016) : To nie działa z wersją appcompat 24.2.0 (sierpień 2016), jeśli twoja aktywność ma „przycisk Wstecz”. Złożyłem raport o błędzie ( wydanie 220899 ), ale nie wiem, czy będzie to przydatne (wątpię, że zostanie to naprawione w najbliższym czasie). Tymczasem rozwiązaniem jest sprawdzenie, czy klasa dziecka jest równa AppCompatImageButton.class i zrób to samo, zwiększ szerokość tylko o 30% (np. AppCompatImageButton.getWidth () * 1.3 przed odjęciem tej wartości od oryginalnego wypełnienia):
W międzyczasie wrzuciłem tam kilka sprawdzeń dopełnienia / marginesów:
źródło
bez customview może wyśrodkować tytuł paska akcji. doskonale działa również w szufladzie nawigacji
Miłego kodowania. Dziękuję Ci.
źródło
Po wielu badaniach: To faktycznie działa:
Musisz zdefiniować układ custom_actionbar.xml zgodny z wymaganiami, np .:
źródło
Ładnie działa.
Poniżej układ paska niestandardowego:
źródło
Musisz ustawić
ActionBar.LayoutParams.WRAP_CONTENT
iActionBar.DISPLAY_HOME_AS_UP
źródło
Najlepszy i najłatwiejszy sposób, szczególnie dla tych, którzy chcą po prostu wyświetlać tekst ze środkiem ciężkości bez żadnego układu XML.
źródło
Kod tutaj pracuje dla mnie.
źródło
Jedyne rozwiązanie Kotlin, które nie wymaga zmian w układach XML:
źródło
Oto kompletne rozwiązanie Kotlin + androidx, oparte na odpowiedzi od @Stanislas Heili. Mam nadzieję, że przyda się innym. Dotyczy to przypadku, gdy masz działanie, które zawiera wiele fragmentów, przy czym tylko jeden fragment jest aktywny w tym samym czasie.
W Twojej działalności:
W twoich fragmentach:
źródło
Inne samouczki, które widziałem, zastępują cały układ paska akcji, ukrywając MenuItems. Udało mi się to zrobić, wykonując następujące kroki:
Utwórz plik xml w następujący sposób:
A w klasie zrób to:
źródło
Dla użytkowników Kotlin:
Użyj następującego kodu w swojej aktywności:
I układ XML / zasobów:
źródło
Ten kod nie ukryje przycisku wstecz, w tym samym czasie wyrówna tytuł do środka.
wywołaj tę metodę w oncreate
źródło