2016-07-07 6 views
2

私はcollapsingToolbarLayoutを持っています。タイトルはTextViewです。ツールバーレイアウトの折りたたみタイトルのテキストビューを取得

質問: 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> 

編集: 単にCollapsingToolbarLayoutタイトルはこれがToolbarのデフォルトのタイトルである enter image description here

答えて

3

Toolbarクラスは、Viewの必要に応じてその子を作成して、その後

<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> 

そして、ちょうどタイトルを見つけますタイトルはToolbarです。あなたがそれをした後、いくつかのオプションがあります。

あなたはToolbarの子View Sを反復処理することができ - ViewGroup#getChildCount()getChildAt()メソッドを使用して - TextViewを探しています。 Toolbarに他のTextViewがない場合は、タイトルのみが表示されます。他のものがある場合は、タイトルとして設定したものとテキストを照合する必要があります。

別のオプションは、反射を使用してタイトルTextViewフィールドを取得することです。例:

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; 
} 

このメソッドの戻り値で何かを行う前に、ヌルチェックを行う必要があります。

+0

解決策として正しい答えをチェックしました。残念ながら私はテキストビューに何も設定できません。私のコードを見てください:保護されたvoid onResume(){ mTitleTextView =(TextView)getTitleTextView(mToolbar); if(mTitleTextView!= null){ mTitleTextView.setText( "BLJSDosdjif"); } super.onResume(); } – jublikon

+0

さて、 'CollapsingToolbarLayout'は、タイトルのように、' Toolbar'のものを設定しようとしています。このコードは、 'super.onResume()'コールの後に移動すると動作します。後で 'CollapsingToolbarLayout'のソースコードを見てみましょう。しかし、私はまだそれを使用していません。 –

+0

私はsuper.onResume()の後にコードを実行しようとしました。残念ながら、それはまだ動作しません。あなたが少し見ていただければとても感謝しています。事前にありがとう – jublikon

0

場合と同じ動作でそれを統合していないTextViewToolbarに追加しますタイトルを変更したい場合は、

getSupportActionBar().setTitle(String title); 

しかし、これはテキストを変更するだけです。

しかし、さらに修正を加えたい場合はTextViewToolbarに追加してください。そのように:あなたが設定したまでTextViewが存在しないように、あなたはActivity

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

ありがとうございました。残念ながら、折りたたみ可能なタイトルのテキストビューの予想される動作は指定されていません。私の編集した投稿 – jublikon

+0

を参照してください。[this post](http://stackoverflow.com/questions/26861843/add-custom-layout-to-actionbar-toolbar-with-no-margins)は、要素に重力を加えるのに役立ちます。 –

関連する問題