如何将OnClickListener设置为CollapsingToolbarLayout标题

问题描述:

我有一个协调的布局如何将OnClickListener设置为CollapsingToolbarLayout标题

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <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:expandedTitleMarginStart="@dimen/activity_horizontal_margin" 
     app:expandedTitleMarginEnd="@dimen/activity_horizontal_margin" 
     app:expandedTitleGravity="start|bottom" 
     app:collapsedTitleTextAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" 
     app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#FAFAFA" 
      android:fitsSystemWindows="true" 
      android:orientation="vertical" 
      app:layout_collapseMode="parallax"> 

      <com.petronas.laniakea.view.FixedRatioImageView 
       android:id="@+id/image" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:scaleType="centerCrop" 
       android:src="@drawable/logo_blue" /> 

     </LinearLayout> 

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

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

如何设置一个OnClickListener为标题的TextView里面默认AppBar布局?我能得到的工具栏标题私人TextView的,把它公开,并设置一个OnClickListener这种看法:以上

toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     Field titleField = null; 
     try { 
      titleField =Toolbar.class.getDeclaredField("mTitleTextView"); 
      titleField.setAccessible(true); 
      TextView barTitleView = (TextView) titleField.get(toolbar); 
      barTitleView.setOnClickListener(v -> {}); 
     } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 

代码工作正常,但我还是当我点击标题没有得到一个点击事件。有任何想法吗? 这是我的观点的层次结构,它出现在Stetho: View Hierarchy

+0

可能是你可以检查这个https://*.com/a/24838396/900128 –

+0

@MuthukrishnanRajendran我试过这已经返回null,不起作用。 – MhdAdeebMasoud

您可以通过Toolbar包裹TextView尝试。所以,你的布局结构是这样:

<Toolbar ...> 
    <TextView android:id="@+id/toolbarTextId" ..../> 
</Toolbar> 

现在,使用OnClickListener为龙头的文本。

yourTextView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // some action 
    } 
}); 
+0

我尝试过,但它显示为工具栏上的固定TextView(不显示CollapsingToolbarLayout的展开/折叠动画)。 – MhdAdeebMasoud

据我所知,没有办法在任何类型的ActionBar或工具栏上的TextView上设置OnClickListener。您使用的方式使用反射API,当它们打包在发布应用程序中时,会立即崩溃。

+0

感谢您的提示,我也不喜欢它。这就是我寻找解决方案的原因。 – MhdAdeebMasoud