8

Çift yönlü bir aksiyon çubuğuna sahip olmak istiyorum (malzeme kılavuzundaki örneklerde olduğu gibi), ancak başlığında (muhtemelen) 2 satır metin var. Kullandığım başlık dinamik ve sayfada görüntülenen öğeye bağlı. Eğer bir satır varsa normal bir eylem çubuğu gibi görünmeli, eğer 2 satır varsa, metin kırılmalı ve yeni bir satıra bırakılmalıdır. Bir veya iki satır varsa, işlem düğmeleri metnin en üst satırıyla aynı hizada kalmalıdır.Android Araç Çubuğu başlığında iki satırlı mı?

Toolbar'un, eylem çubuklarını gerçekleştirmenin yeni dinamik yolu olduğunu okudum, bu yüzden muhtemelen gidilecek yol olacağını düşünmüştüm (buradaki yanıtları biliyorum, eski eylem çubuğu başlık metnini geçersiz kılabilirsiniz. satırlar, ama bu da benim için ne gittiğime benzemiyor. Android 4.4+ kullanıyorum, bu yüzden Araç Çubuğu için appcompat v7 kütüphanesini kullanmam gerekiyor.

Başlık metin görünümünün yalnızca tek bir satırla sınırlandırıldığı koda bakarken buldum (https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/appcompat/src/android/support/v7/widget/Toolbar.java - mTitleTextView.setSingleLine(); kodunu içerir).

Sonra tek bir alt yazı altyazısı olduğundan ve bu metnin biçimini değiştirebildiğimiz için onu başlık metniyle aynı şekilde biçimlendirebileceğimi ve gerekirse başlığımı iki bölüm halinde hazırlayabileceğimi düşündüm. Dizeyi ayırmak için bazı temel kodlar yazdım, ancak bunu bölmek için ihtiyacım olup olmadığını anlayabildim - ve pratikte toolbar.isTitleTruncated()'un her zaman false değerini döndürdüğünü fark ettim (her ikisi de araç çubuğundaki nesneden doğrudan erişildi ve getSupportActionBar().isTitleTruncated()).

Ben Toolbar içinde TextView sarmak cevabını here çalıştım ama bunu yaparken Çubuğu eylem düğmeleri uyum sağlamak TextView alınamıyor. Tek bir satır için doğru hizalarsam (üst dolgu kullanarak), o zaman çift satır için yanlıştır, ya da tam tersi. İşte benim 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> 

herkes herhangi bir fikir var mı? Bu gerçekten çok zor olması gerektiğini Android kurallarına aykırı bir şey mi?

Güncelleme: gösteri amaçlı ekleyerek görüntüleri:

o görünmelidir nasıl

How it should look

şimdi görünüyor nasıl:

How it does look

+0

Ben https://code.google.com/p/android/issues/detail yarattı? id = 81987 isTitleTruncated() çalışmıyor. – gkee

cevap

4

Hmmm, ne için çalışıyor ben mi.

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

Bir satır metin varsa, bu benim için iyi çalışıyor. Eğer iki tane varsa, hizalama berbat olur. Daha uzun bir başlık ile deneyin. – gkee

+0

Bu çözüm ile toolbar.setTitle() yöntemini kullanmayın. TextView'i Araç Çubuğu görünümünde alın ve metnin programatik olarak ayarlayın. – Erdi

İlgili konular