6

So, ich habe ein seltsames Problem mit meinem CollapsingToolbarLayout in meinem Projekt. Nach meiner Tätigkeit beginnt, ist dies, wie mein Symbolleiste Titel erscheint:Titel in erweitertem CollapsingToolbarLayout nicht korrekt angezeigt

the expanded title has dots at the end

das Layout nach einem Zusammenbruch ist wie folgt:

collapsed title with dots at the end

Der ursprüngliche Titeltext im Beispiel: "UPC VONALKODOS TERMEK "

Ich denke, der Titel im erweiterten Zustand sollte länger sein (es ist genug Platz dafür) als in co falscher Zustand. Das, was xml meine Tätigkeit der wie folgt aussieht:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    app:theme="@style/PolarThemeNoActionBar"> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_below="@+id/tablayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
    <android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 
     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="142dp" 
      android:fitsSystemWindows="true" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleMarginStart="48dp" 
      app:expandedTitleMarginBottom="20dp" 
      app:expandedTitleTextAppearance="@style/ExpandedText"> 
      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       android:minHeight="?attr/actionBarSize" 
       app:layout_collapseMode="pin"/> 
      </android.support.design.widget.CollapsingToolbarLayout> 
     <android.support.design.widget.TabLayout 
      android:id="@+id/tablayout" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:layout_below="@+id/toolbar" 
      android:minHeight="?attr/actionBarSize" 
      android:gravity="bottom" 
      android:background="?attr/colorPrimary" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:tabIndicatorColor="?attr/colorPrimaryDark"/> 
     </android.support.design.widget.AppBarLayout> 
    </android.support.design.widget.CoordinatorLayout> 

Meine res/Stil/ExpandedText wie folgt aussieht:

<style name="ExpandedText" parent="android:TextAppearance"> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:textSize">20sp</item> 
    </style> 

Support-Bibliothek Version: 25.1.1. Telefon: Nexus 5 Android Version: 6.0.1 (Lager)

Meine Frage: Warum die Titel Punkte am Ende in expandierten Zustand haben und nicht den Raum füllt von ihm mehr zu zeigen?

[EDIT 1] Problem bleibt nach wie vor mit Support-Bibliothek Version 25.3.0

+1

Es sieht aus wie dieses Verhalten in einer relativ neuen Bibliotheksversion eingeführt wurde. Ich fand es seltsam, also zog ich ein altes Projekt, und es verhält sich so, wie Sie es mit Version 23.4.0 erwarten. Das heißt, der Titel wird vollständig in dem expandierten Zustand gezeigt, anstatt auf der Basis der kollabierten Größe und Fläche, wie zuvor erwähnt, ellipsenförmig zu sein. Ich bin nicht sicher, welche Version die Änderung gebracht hat, aber wenn ich mir die Schuld der Quelle anschaue, scheint es, dass dies Mitte letzten Jahres getan wurde, um Randfälle zu beheben, in denen der Titel Symbole und ähnliches überlagert. Sie könnten ein Problem einreichen und für den Moment wiederherstellen, wenn dies möglich ist. –

+1

@Mike M. Vielen Dank für Ihren Kommentar. Ich denke du hast recht, in einer älteren Version meiner App sieht der 'CollapsingToolbarLayout' Titel OK aus: Ich denke du solltest diesen Kommentar als Antwort posten. – zkminusck

Antwort

4

CollapsingToolbarLayout verwendet eine Hilfsklasse - CollapsingTextHelper - zu ziehen und seinen Titel zu animieren. Zum Zeitpunkt des Schreibens beschränken die neueren Versionen dieser Klasse die verfügbare Breite für den erweiterten Titel auf eine Größe, die auf der im zusammengelegten Zustand verfügbaren Breite basiert, skaliert mit dem Verhältnis der Textgrößen der Status.

Relevante Quelle Kommentare:

// If the scaled down size is larger than the actual collapsed width, we need to 
// cap the available width so that when the expanded text scales down, it matches 
// the collapsed width 

Dies wurde offenbar führte einige Grenzfälle zu adressieren, wo der Titel andere Toolbar Sachen überlappen würden, wie es in den Erläuterungen zu den the relevant commit erläutert.

Fix CollapsingToolbarLayout-Piktogrammen über

CTL skaliert es Titel, die in den meisten Fällen funktioniert. Es gibt jedoch Randfälle, in denen der Titel auf den Symbolleisten Inhalt gezeichnet werden kann, nämlich Symbole.

Diese CL behebt die Grenzfälle, wo die kollabierte und erweiterte Textgrößen in der Größe ähnlich sind, was bedeutet, dass es begrenzt ist/keine Skalierung geschieht beim Scrollen. In diesem Fall müssen wir bei der Erweiterung jede verfügbare Breite begrenzen, so dass sie "skaliert", damit sie der minimierten Breite entspricht, wenn sie minimiert wird.

Normalerweise ich alles über dich in View Klassen reißt ihr Verhalten mit Reflexion und anderen Tricks zu ändern, aber in diesem Fall die gegebene Einrichtung ist so, dass dies einiges wirklich schweres Heben nehmen würde. Auf die Hilfsklasse kann normalerweise nicht außerhalb des Bibliothekspakets zugegriffen werden, ihre Instanz ist in CollapsingToolbarLayout privat und die Größenberechnungen werden in einer privaten, sekundären Methode mit meist lokalen Variablen ausgeführt.

Wenn dies möglich ist, besteht die einfachste Lösung darin, zu einer Bibliotheksversion zurückzukehren, die vor diesem Fix veröffentlicht wurde. Ich habe nicht die genaue Version bestimmt, die diese Änderung gebracht hat, und die support library revision history scheint es leider nicht zu erwähnen. Dieses Commit wurde jedoch Mitte letzten Jahres (2016) gemacht, also wahrscheinlich um Version 24.0.0 oder etwas später. Ich kann überprüfen, dass das Verhalten in 23.4.0 nicht vorhanden ist.

Sie könnten sicherlich file a bug report dafür, wenn Sie möchten, aber keine Garantien, dass sie dies als einen Fehler betrachten würde. Ich habe zuvor keine speziell zu diesem Thema eingereichte Probleme gefunden, die sich anders als this tangentially-related one über die Ellipsenbildung, die ein Nebeneffekt dieser Änderung war, beschwerten.

+2

Gut durchdacht. –

0

Sie ellipsizing ausschalten. Fügen Sie diese auf Ihrem TextAppearance Stil:

<item name="android:ellipsize">none</item> 

Wenn es notwendig ist, können Sie auch manuell die Breite des Textview ändern, die

durch Hinzufügen Breite, um den Stil erstellt wird
<item name="android:width">300dp</item> 
+0

Danke für deine Antwort, aber es hat nicht funktioniert. Mein 'CollapsingToolbar'-Titel sieht gleich aus. – zkminusck

0

ich bearbeiten Sie den Code sehen kann dies Ihnen diese

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true"> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/tablayout" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="142dp" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:expandedTitleMarginBottom="20dp" 
     app:expandedTitleMarginStart="48dp" 
     app:expandedTitleTextAppearance="@style/ExpandedText" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:minHeight="?attr/actionBarSize" 
      app:contentInsetLeft="0dp" 
      app:contentInsetStart="0dp" 
      app:contentInsetStartWithNavigation="0dp" 
      app:layout_collapseMode="pin" /> 
    </android.support.design.widget.CollapsingToolbarLayout> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tablayout" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:layout_below="@+id/toolbar" 
     android:background="?attr/colorPrimary" 
     android:gravity="bottom" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:tabIndicatorColor="?attr/colorPrimaryDark" /> 
</android.support.design.widget.AppBarLayout> 

mögen und das ist Activity Class

public class MainActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private CollapsingToolbarLayout collapsingToolbar; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.answer2); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 
    collapsingToolbar.setTitle("UPC VONALKODOS TERMEK"); 
    collapsingToolbar.setExpandedTitleTextAppearance(R.style.ExpandedAppBar); 
    collapsingToolbar.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar); 
} 

}

und das ist res/Stil /:

<style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium"> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textStyle">normal</item> 
</style> 
<style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium"> 
    <item name="android:textSize">20sp</item> 
    <item name="android:textStyle">bold</item> 
</style> 
+0

Danke für Ihre Antwort, aber es funktioniert nicht. – zkminusck

Verwandte Themen