8

Chcę mieć pasek czynności o podwójnej wysokości (jak w przykładach materiałów), ale z (prawdopodobnie) 2 liniami tekstu w tytule. Tytuł, którego używam, jest dynamiczny i zależy od pozycji wyświetlanej na stronie. Jeśli jest jedna linia, powinna wyglądać jak normalny pasek akcji, jeśli są 2 linie, tekst powinien się zepsuć i zrzucić na nową linię. Przyciski akcji powinny być wyrównane do górnej linii tekstu, niezależnie od tego, czy jest jedna, czy dwie linie.Pasek narzędzi Android z dwoma liniami w tytule?

Przeczytałem, że Toolbar jest nowym dynamicznym sposobem tworzenia pasków akcji, więc pomyślałem, że to prawdopodobnie będzie droga (wiem, że istnieją odpowiedzi, które pozwolą ci zastąpić stary tekst tytułu paska akcji, aby go 2 linie, ale to też nie wygląda na to, co zamierzam). Używam Androida 4.4+, więc muszę użyć biblioteki appcompat v7 do paska narzędzi Toolbar.

Znalazłem, patrząc na kod, że tytułowy widok jest ograniczony tylko do jednej linii (https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/appcompat/src/android/support/v7/widget/Toolbar.java - zawiera kod mTitleTextView.setSingleLine();).

Potem pomyślałem, że skoro poniżej znajduje się podtytuł jednej linii, a my możemy zmienić format tego tekstu, mogę sformatować go tak samo, jak tekst tytułu i po prostu umieścić tytuł w dwóch częściach, jeśli to konieczne. Napisałem podstawowy kod, aby podzielić ciąg znaków, ale polegał on na tym, że jestem w stanie powiedzieć, czy muszę go podzielić. W praktyce okazało się, że toolbar.isTitleTruncated() zawsze zwraca wartość false (zarówno z mojego obiektu paska narzędzi dostępowego bezpośrednio, jak iz getSupportActionBar().isTitleTruncated()).

Próbowałem odpowiedź here zawinąć TextView w Toolbar, ale nie mogę uzyskać TextView wyrównać za pomocą przycisków akcji Toolbar kiedy to zrobić. Jeśli wyrównam go poprawnie dla pojedynczej linii (przy użyciu dopełnienia górnego), oznacza to, że jest źle dla podwójnej linii i na odwrót. Oto mój kod:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/view_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<fragment 
    android:id="@+id/fragment_pager" 
    android:name="com.example.ProductPagerFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/product_details_toolbar" 
    style="@style/style.toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/double_height_toolbar" 
    android:minHeight="?attr/actionBarSize" 
    android:gravity="top" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" > 

    <TextView 
     android:id="@+id/product_details_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="top" 
     android:paddingTop="@dimen/padding_normal" 
     style="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse" 
     android:maxLines="2" /> 

</android.support.v7.widget.Toolbar> 

Czy ktoś ma jakieś pomysły? Czy to naprawdę jest tak sprzeczne z wytycznymi dla Androida, że ​​powinno być tak trudne?

aktualizacji: dodawanie zdjęć do celów demonstracyjnych:

Jak to powinno wyglądać:

How it should look

jak to wygląda teraz:

How it does look

+0

stworzyłem https://code.google.com/p/android/issues/detail? id = 81987, ponieważ problem z isTitleTruncated() nie działa. – gkee

Odpowiedz

4

Hmmm, to działa dobrze dla mnie.

Screenshot

<android.support.v7.widget.Toolbar 
     android:layout_height="200dp" 
     android:layout_width="match_parent" 
     android:minHeight="?attr/actionBarSize" 
     android:gravity="top" 
     android:background="?attr/colorPrimaryDark" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

    <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Title" 
      android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"/> 

</android.support.v7.widget.Toolbar> 
+1

Działa to dobrze dla mnie, jeśli mam jedną linię tekstu. Jeśli mam dwa, to wyrównanie zostaje spartaczone. Wypróbuj z dłuższym tytułem. – gkee

+0

Nie używaj toolbar.setTitle() z tym rozwiązaniem. Pobierz widok tekstowy w widoku Paska narzędzi i ustaw go programowo. – Erdi

Powiązane problemy