2016-07-07 18 views
2

Ich habe eine collapsingToolbarLayout und ich muss einige zusätzliche Einstellungen zum Titel TextView machen.Holen Sie Titeltextansicht des minimierenden Symbolleistenlayouts

Frage: Wie bekomme ich einen Verweis auf diese TextView?

enter image description here

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/review_coordinator_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.stack.overflow.reviewmaschine.ReviewMaschineActivity" 
    tools:ignore="MergeRootFrame"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/app_bar_height" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/toolbar_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:toolbarId="@+id/toolbar"> 

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

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

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

    <FrameLayout 
     android:id="@+id/item_detail_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior = "@string/appbar_scrolling_view_behavior" 
     /> 

    <com.mego.smscloud.reviewmaschine.SaveFloatingActionButton 
     android:id="@+id/review_fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:backgroundTint="@color/colorPrimary" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@drawable/ic_floppy_white_48dp" 
     app:borderWidth="0dp" 
     app:elevation="@dimen/fab_elevation" 
     app:rippleColor="#00ffff"/> 

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

Edit: einfach das Hinzufügen eines TextView zum Toolbar nicht in dem gleichen Verhalten zu integrieren, wie CollapsingToolbarLayout Titel tun enter image description here

Antwort

3

Die Toolbar Klasse ihre Kind View s je nach Bedarf erzeugt, so dass TextView nicht existieren, bis die festgelegt haben Titel auf der Toolbar. Nachdem Sie das getan haben, gibt es ein paar Optionen.

Sie könnten über die Toolbar ‚s Kind View s laufen - die ViewGroup#getChildCount() und getChildAt() Methoden - für einen TextView suchen. Wenn es keine TextView s in der Toolbar gibt, dann wird der Titel der einzige sein. Wenn es andere gibt, sollten Sie den Text anhand dessen überprüfen, was Sie als Titel festgelegt haben.

Eine weitere Option ist die Verwendung der Reflektion, um das Feld TextView zu erfassen. Zum Beispiel:

private TextView getTitleTextView(Toolbar toolbar) { 
    try { 
     Class<?> toolbarClass = Toolbar.class; 
     Field titleTextViewField = toolbarClass.getDeclaredField("mTitleTextView"); 
     titleTextViewField.setAccessible(true); 
     TextView titleTextView = (TextView) titleTextViewField.get(toolbar); 

     return titleTextView; 
    } 
    catch (NoSuchFieldException | IllegalAccessException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

Sie sollten natürlich einen Null-Check durchführen, bevor Sie irgendetwas mit der Rückgabe dieser Methode machen.

+0

Ich habe Ihre Antwort als Lösung überprüft, weil sie die richtige Textansicht für mich zurückgibt. Leider kann ich nichts auf die Textansicht setzen. Bitte beachten Sie meinen Code: protected void onResume() { mTitleTextView = (TextView) getTitleTextView (mToolbar); if (mTitleTextView! = Null) { mTitleTextView.setText ("BLJSDosdjif"); } super.onResume(); } – jublikon

+0

Nun, das 'CollapsingToolbarLayout' wird Dinge auf der' Toolbar' setzen, wie der Titel.Dieser Code funktioniert möglicherweise, wenn Sie ihn nach dem 'super.onResume()' Aufruf verschieben. Ich werde mir später den Quellcode für 'CollapsingToolbarLayout' ansehen, wenn ich eine Chance bekomme, aber ich habe es noch nicht oft benutzt, also bin ich mir nicht sicher, wie genau es mit den Dingen umgeht, atm. –

+0

Ich habe versucht, den Code nach super.onResume() auszuführen. Leider funktioniert es immer noch nicht. Ich wäre Ihnen sehr dankbar, wenn Sie sich ein wenig umsehen würden. Vielen Dank im Voraus – jublikon

0

Dies ist der Standardtitel der Toolbar Wenn Sie den Titel ändern möchten, rufen Sie einfach:

getSupportActionBar().setTitle(String title); 

Aber das ändert nur den Text.

Wenn Sie jedoch weitere Änderungen vornehmen möchten, fügen Sie Ihre eigenen TextView an die Toolbar. Wie folgt aus:

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

    <TextView 
      android:id="@+id/title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 

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

Und dann finden nur den Titel in Ihnen Activity

TextView title = (TextView) findViewById(R.id.title); 
+1

Vielen Dank für Ihre Hilfe. Leider ist das erwartete Verhalten eines kollabierbaren Titeltextview nicht gegeben. Bitte sehen Sie meinen bearbeiteten Beitrag – jublikon

+0

Vielleicht [dieser Beitrag] (http://stackoverflow.com/questions/26861843/add-custom-layout-to-actionbar-toolbar-with-no-margins) wird Ihnen helfen, die Schwerkraft Elemente hinzuzufügen . –