2015-06-15 16 views

Antwort

3

@Javed, korrigieren Sie mich, wenn ich falsch liege, möchten Sie den Titel in der Symbolleiste zentriert haben, dann CollapsingToolbarLayout ist zusammengebrochen und Ihr Layout ist so etwas, oder?

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

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:scaleType="centerCrop" 
      android:fitsSystemWindows="true" 
      app:layout_collapseMode="parallax"/> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      app:layout_collapseMode="pin" /> 

    </android.support.design.widget.CollapsingToolbarLayout> 

Dann können Sie diesen Trick tun (ich tue es in onCreate der Aktivität):

try { 
     Field declaredField = toolbar.getClass().getDeclaredField("mTitleTextView"); 
     declaredField.setAccessible(true); 
     TextView titleTextView = (TextView) declaredField.get(toolbar); 
     ViewGroup.LayoutParams layoutParams = titleTextView.getLayoutParams(); 
     layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; 
     titleTextView.setLayoutParams(layoutParams); 
     titleTextView.setGravity(Gravity.CENTER_HORIZONTAL); 
    } catch (Exception e) { 
     //"Error!" 
    } 

Der Schlüssel ist, dass Textview innerhalb Toolbar width-Eigenschaft "Wrap Content" hat, so müssen wir ändere es in "Parent Eltern". (Siehe weitere Einzelheiten zu dieser Reflexion here)

auf Android 5.1.1 getestet und Android 4.3 (sollte ziemlich überall arbeiten)

+1

Ich arbeite an dem gleichen Problem. Zentrieren eines benutzerdefinierten Titels 'TextView' in einer' Toolbar' scheint so zu sein, wie es funktionieren sollte, aber aus irgendeinem Grund zentriert 'layout_gravity = "center" 'den Text in diesem Szenario nicht. Der 'TextView'-Text wird stattdessen rechtsbündig ausgerichtet. Möglicherweise ein Fehler. – Ryan

+0

@Ryan großer Fang, liebe es! Reparierte meine Antwort und testete es auf Android 5.1.1 und Android 4.3. Danke für die Nachricht! –

+0

Ihre aktualisierte Antwort sieht so aus, als ob sie funktionieren sollte, aber ich hasse es, auf Reflektion zurückgreifen zu müssen. Schade, es gibt keinen strafferen Ansatz für dieses Problem. – Ryan

43

Es ist ein Attribut expandedTitleGravity, die Sie mit dem CollapsingToolbarLayout können den erweiterten Titel zum Zentrum Text. Fügen Sie diese auf Ihre CollapsingToolbarLayout:

app:expandedTitleGravity="bottom|center_horizontal" 
+4

Perfekte Antwort :) –

+0

intelligente Antwort :) –

10

In meinem Anwendungsfall, habe ich app:titleEnabled auf falsch, ich habe es sowieso nicht brauchen. Danach wurde meine Schwerkraft innerhalb des Toolbar-Layouts respektiert.

+0

Ich wollte meine benutzerdefinierte Symbolleiste Titel in der Mitte zeigen. durch die Einrichtung dieser Eigenschaft in CollapsingToolbarLayout half mir bei meiner Anforderung. Vielen Dank. – Jigar

+0

gut und einfach. –

0

Wie Nguyễn Hoàng Anh oben gesagt hat, setzen app:titleEnabled zu false arbeitete wie ein Charme.

Mit dieser Option aktiviert ist, nachdem einige mit dem Layout-Inspektoren zu graben, verdächtige unbenannte-Ansicht immer vor TextView innerhalb von Toolbar hinzugefügt wird, kurz nach ‚Up‘ Taste (wenn es aktiviert ist).

Also, obwohl Layout Schwerkraft richtig funktioniert, nimmt einige verdächtige Ansicht alle zusätzlichen Leerzeichen innerhalb der Toolbar.

1

Im Fall versuchen Sie, den Titel im zusammengeklappten Zustand zu zentrieren Sie

android:paddingEnd="70dp" 
android:paddingRight="70dp" 

wie diese verwenden:

<android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:paddingEnd="70dp" 
      android:paddingRight="70dp" 
      app:collapsedTitleGravity="center_horizontal"   
      app:expandedTitleGravity="start" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin"> 

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

     </android.support.design.widget.CollapsingToolbarLayout> 
Verwandte Themen