CollapsingToolbarLayout副标题

我可以通过setTitle方法设置CollapsingToolbarLayout的标题吗?

还有一种方法来设置字幕?

如果你想在AppBar完全折叠的时候将字幕转到Toolbar ,你应该创build你自己的CoordinatorLayout.Behaviour像这样: Github Guide

但是,如果你只想在AppBar扩展时在标题后面放一个较小的文本,你可以试试这个布局:

 <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.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="300dp" android:fitsSystemWindows="true" 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="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginBottom="160dp" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/header" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/quila2" android:fitsSystemWindows="true" android:scaleType="centerCrop" app:layout_collapseMode="parallax" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:textColor="@android:color/white" android:layout_marginBottom="32dp" android:layout_marginEnd="64dp" android:layout_marginStart="48dp" app:layout_collapseMode="parallax" android:layout_gravity="bottom" android:text="Lorem Ipsum Iran Lorem Ipsum Iran Lorem Ipsum Iran Lorem Ipsum Iran Lorem Ipsum Iran Lorem Ipsum Iran Lorem Ipsum Iran Lorem Ipsum Iran "/> <android.support.v7.widget.Toolbar android:id="@+id/anim_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> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:lineSpacingExtra="8dp" android:text="@string/lorem" android:textSize="18sp"/> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:clickable="true" android:src="@drawable/abc_ic_search_api_mtrl_alpha" app:layout_anchor="@+id/appbar" app:layout_anchorGravity="bottom|right|end" /> </android.support.design.widget.CoordinatorLayout> 

请注意,在这里,我将AppBar高度设置为300dp ,而且app:expandedTitleMarginBottom160dp因此标题不会与下拉字幕相冲突。 在这个例子中,你应该使用collapsingToolbarTitle.setTitle("My Title");在运行时dynamic设置CollapsingToolbarTitle collapsingToolbarTitle.setTitle("My Title"); 方法。

结果会是这样的:

在这里输入图像描述

尝试这样的事情,它为我工作我已经创build自定义ViewBehavior

 @Override public boolean layoutDependsOn(CoordinatorLayout parent, HeaderView child, View dependency) { return dependency instanceof AppBarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, HeaderView child, View dependency) { shouldInitProperties(child, dependency); int maxScroll = ((AppBarLayout) dependency).getTotalScrollRange(); float percentage = Math.abs(dependency.getY()) / (float) maxScroll; float childPosition = dependency.getHeight() + dependency.getY() - child.getHeight() - (getToolbarHeight() - child.getHeight()) * percentage / 2; childPosition = childPosition - mStartMarginBottom * (1f - percentage); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams(); lp.leftMargin = (int) (percentage * mEndMargintLeft) + mStartMarginLeft; lp.rightMargin = mMarginRight; child.setLayoutParams(lp); child.setY(childPosition); ... return true; } 

这是我的布局

 <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.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" 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="wrap_content" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed" > <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" android:scaleType="centerCrop" android:src="@drawable/img_nature" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" > <include android:id="@+id/toolbar_header_view" layout="@layout/header_view" android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_marginRight="@dimen/header_view_end_margin_right" android:visibility="gone" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/scroll" android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > ... </LinearLayout> </android.support.v4.widget.NestedScrollView> <include android:id="@+id/float_header_view" layout="@layout/header_view" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="com.subtitlebehavoir.harcopro.simple.ViewBehavior" /> </android.support.design.widget.CoordinatorLayout> 

ViewHeader布局:

 <?xml version="1.0" encoding="utf-8"?> <com.subtitlebehavoir.harcopro.simple.HeaderView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <!-- Title --> <TextView android:id="@+id/header_view_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="18sp" /> <!-- Subtitle --> <TextView android:id="@+id/header_view_sub_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="16sp" /> </com.subtitlebehavoir.harcopro.simple.HeaderView> 

这里是Harco上面给出的修改版本( 这个 ),当我们展开和折叠布局时,它也会改变标题的大小。

ViewBehavior.java

 public class ViewBehavior extends CoordinatorLayout.Behavior<HeaderView> { private static final float MAX_SCALE = 0.5f; private Context mContext; private int mStartMarginLeft; private int mEndMargintLeft; private int mMarginRight; private int mStartMarginBottom; private boolean isHide; public ViewBehavior(Context context, AttributeSet attrs) { mContext = context; } @Override public boolean layoutDependsOn(CoordinatorLayout parent, HeaderView child, View dependency) { return dependency instanceof AppBarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, HeaderView child, View dependency) { shouldInitProperties(child, dependency); int maxScroll = ((AppBarLayout) dependency).getTotalScrollRange(); float percentage = Math.abs(dependency.getY()) / (float) maxScroll; // Set scale for the title float size = ((1 - percentage) * MAX_SCALE) + 1; child.setScaleXTitle(size); child.setScaleYTitle(size); // Set position for the header view float childPosition = dependency.getHeight() + dependency.getY() - child.getHeight() - (getToolbarHeight() - child.getHeight()) * percentage / 2; childPosition = childPosition - mStartMarginBottom * (1f - percentage); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams(); lp.leftMargin = (int) (percentage * mEndMargintLeft) + mStartMarginLeft; lp.rightMargin = mMarginRight; child.setLayoutParams(lp); child.setY(childPosition); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { if (isHide && percentage < 1) { child.setVisibility(View.VISIBLE); isHide = false; } else if (!isHide && percentage == 1) { child.setVisibility(View.GONE); isHide = true; } } return true; } private void shouldInitProperties(HeaderView child, View dependency) { if (mStartMarginLeft == 0) mStartMarginLeft = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_start_margin_left); if (mEndMargintLeft == 0) mEndMargintLeft = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_end_margin_left); if (mStartMarginBottom == 0) mStartMarginBottom = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_start_margin_bottom); if (mMarginRight == 0) mMarginRight = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_end_margin_right); } public int getToolbarHeight() { int result = 0; TypedValue tv = new TypedValue(); if (mContext.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { result = TypedValue.complexToDimensionPixelSize(tv.data, mContext.getResources().getDisplayMetrics()); } return result; } } 

HeaderView.java

 public class HeaderView extends LinearLayout { @Bind(R.id.header_view_title) TextView title; @Bind(R.id.header_view_sub_title) TextView subTitle; public HeaderView(Context context) { super(context); } public HeaderView(Context context, AttributeSet attrs) { super(context, attrs); } public HeaderView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public HeaderView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onFinishInflate() { super.onFinishInflate(); ButterKnife.bind(this); } public void bindTo(String title) { bindTo(title, ""); } public void bindTo(String title, String subTitle) { hideOrSetText(this.title, title); hideOrSetText(this.subTitle, subTitle); } private void hideOrSetText(TextView tv, String text) { if (text == null || text.equals("")) tv.setVisibility(GONE); else tv.setText(text); } public void setScaleXTitle(float scaleXTitle) { title.setScaleX(scaleXTitle); title.setPivotX(0); } public void setScaleYTitle(float scaleYTitle) { title.setScaleY(scaleYTitle); title.setPivotY(30); } } 

我也有同样的问题。 最后,我制作了一个包含标题和副标题的LinearLayout,然后将expandedTitleTextAppearance设置为透明 – 当Layout展开时,隐藏了工具栏标题。 使用这种方法,工具栏折叠在LinearLayout上,最后只显示处于折叠状态的标题。

完整的XML在这里:

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="@dimen/series_detail_header_height" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:expandedTitleTextAppearance="@style/TransparentText" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_collapseMode="parallax"> <ImageView android:id="@+id/image_view" android:layout_width="match_parent" android:layout_height="@dimen/series_detail_header_image_height" android:scaleType="centerCrop"/> <LinearLayout android:id="@+id/header_text_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="?attr/colorPrimary" android:gravity="center_vertical" android:minHeight="@dimen/series_detail_text_layout_height" android:orientation="vertical" android:paddingLeft="20dp" android:paddingRight="10dp" android:paddingTop="10dp"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="My title" android:textColor="@android:color/white" android:textSize="24sp"/> <TextView android:id="@+id/subtitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="17sp"/> </LinearLayout> </FrameLayout> <View android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@drawable/shape_toolbar_black_gradient" app:layout_collapseMode="pin"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_gravity="top" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/show_view_pager" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:paddingTop="@dimen/toolbar_height" app:layout_behavior="@string/appbar_scrolling_view_behavior"/></android.support.design.widget.CoordinatorLayout> 

确保您的样式也扩展了TextAppearance,否则如果您的devise支持库是v22.2.0,应用程序将会崩溃:

 <style name="TransparentText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00666666</item> </style> 

此错误似乎在v22.2.1( https://code.google.com/p/android/issues/detail?id=178674 )中得到解决:

CollapsingToolbarLayout中的字幕支持是我也渴望的function,所以我创build了一个库collapsingtoolbarlayout-subtitle :

在这里输入图像描述

像使用任何CollapsingToolbarLayout一样使用它,只需在其上添加字幕属性即可:

 <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.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <com.hendraanggrian.widget.SubtitleCollapsingToolbarLayout android:id="@+id/subtitlecollapsingtoolbarlayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentScrim="?colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:subtitle="CollapsingToolbarLayout" app:title="Subtitle"> <!-- collapsing toolbar content goes here --> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="?actionBarSize" app:layout_collapseMode="pin"/> </com.hendraanggrian.widget.SubtitleCollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <!-- content goes here --> </android.support.design.widget.CoordinatorLayout> 

这里是Harco's implmentation( this )的修改版本,标题和副标题放在中间。

activity_main.xml中

 <?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"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" 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="wrap_content" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" android:scaleType="centerCrop" android:src="@drawable/img_nature" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin"> <include android:id="@+id/toolbar_header_view" layout="@layout/header_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="@dimen/header_view_end_margin_right" android:visibility="gone" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/scroll" android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> <include android:id="@+id/float_header_view" layout="@layout/header_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_behavior="com.subtitlebehavoir.harcopro.simple.ViewBehavior" /> </android.support.design.widget.CoordinatorLayout> 

dimens.xml

 <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="header_view_end_margin_left">56dp</dimen> <dimen name="header_view_end_margin_right">14dp</dimen> <dimen name="header_view_start_margin_bottom">14dp</dimen> </resources> 

header_view.xml

 <?xml version="1.0" encoding="utf-8"?> <com.subtitlebehavoir.harcopro.simple.HeaderView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <!-- Title --> <TextView android:id="@+id/header_view_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="1" android:textColor="@android:color/white" android:textSize="18sp" /> <!-- Subtitle --> <TextView android:id="@+id/header_view_sub_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/header_view_title" android:maxLines="1" android:textColor="@android:color/white" android:textSize="16sp" /> </com.subtitlebehavoir.harcopro.simple.HeaderView> 

HeaderView.java

 public class HeaderView extends RelativeLayout { @Bind(R.id.header_view_title) TextView title; @Bind(R.id.header_view_sub_title) TextView subTitle; Context context; public HeaderView(Context context) { super(context); this.context = context; } public HeaderView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public HeaderView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public HeaderView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); this.context = context; } @Override protected void onFinishInflate() { super.onFinishInflate(); ButterKnife.bind(this); } public void bindTo(String title) { bindTo(title, ""); } public void bindTo(String title, String subTitle) { hideOrSetText(this.title, title); hideOrSetText(this.subTitle, subTitle); } private void hideOrSetText(TextView tv, String text) { if (text == null || text.equals("")) tv.setVisibility(GONE); else tv.setText(text); } public void setScaleXTitle(float scaleXTitle) { title.setScaleX(scaleXTitle); title.setPivotX(0); } public void setScaleYTitle(float scaleYTitle) { title.setScaleY(scaleYTitle); title.setPivotY(30); } public TextView getTitle() { return title; } public TextView getSubTitle() { return subTitle; } } 

和ViewBehavior.java

 public class ViewBehavior extends CoordinatorLayout.Behavior<HeaderView> { private static final float MAX_SCALE = 0.5f; private Context mContext; private int mStartMarginLeftTitle; private int mStartMarginLeftSubTitle; private int mEndMargintLeft; private int mMarginRight; private int mStartMarginBottom; private boolean isHide; public ViewBehavior(Context context, AttributeSet attrs) { mContext = context; } @Override public boolean layoutDependsOn(CoordinatorLayout parent, HeaderView child, View dependency) { return dependency instanceof AppBarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, HeaderView child, View dependency) { shouldInitProperties(child, dependency); int maxScroll = ((AppBarLayout) dependency).getTotalScrollRange(); float percentage = Math.abs(dependency.getY()) / (float) maxScroll; // Set scale for the title float size = ((1 - percentage) * MAX_SCALE) + 1; child.setScaleXTitle(size); child.setScaleYTitle(size); // Set position for the header view float childPosition = dependency.getHeight() + dependency.getY() - child.getHeight() - (getToolbarHeight() - child.getHeight()) * percentage / 2; childPosition = childPosition - mStartMarginBottom * (1f - percentage); child.setY(childPosition); // Set Margin for title RelativeLayout.LayoutParams lpTitle = (RelativeLayout.LayoutParams) child.getTitle().getLayoutParams(); lpTitle.leftMargin = (int) ((mStartMarginLeftTitle) - (percentage * (mStartMarginLeftTitle - mEndMargintLeft))); if (lpTitle.leftMargin < 20) { lpTitle.leftMargin = 20; } lpTitle.rightMargin = mMarginRight; child.getTitle().setLayoutParams(lpTitle); // Set Margin for subtitle RelativeLayout.LayoutParams lpSubTitle = (RelativeLayout.LayoutParams) child.getSubTitle().getLayoutParams(); lpSubTitle.leftMargin = (int) ((mStartMarginLeftSubTitle) - (percentage * (mStartMarginLeftSubTitle - mEndMargintLeft))); if (lpSubTitle.leftMargin < 20) { lpSubTitle.leftMargin = 20; } lpSubTitle.rightMargin = mMarginRight; child.getSubTitle().setLayoutParams(lpSubTitle); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { if (isHide && percentage < 1) { child.setVisibility(View.VISIBLE); isHide = false; } else if (!isHide && percentage == 1) { child.setVisibility(View.GONE); isHide = true; } } return true; } private void shouldInitProperties(HeaderView child, View dependency) { if (mStartMarginLeftTitle == 0) mStartMarginLeftTitle = getStartMarginLeftTitle(child); if (mStartMarginLeftSubTitle == 0) mStartMarginLeftSubTitle = getStartMarginLeftSubTitle(child); if (mEndMargintLeft == 0) mEndMargintLeft = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_end_margin_left); if (mStartMarginBottom == 0) mStartMarginBottom = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_start_margin_bottom); if (mMarginRight == 0) mMarginRight = mContext.getResources().getDimensionPixelOffset(R.dimen.header_view_end_margin_right); } public int getStartMarginLeftTitle(HeaderView headerView) { TextView title = headerView.getTitle(); DisplayMetrics displaymetrics = new DisplayMetrics(); WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getMetrics(displaymetrics); int width = displaymetrics.widthPixels; int stringWidth = getStingWidth(title); int marginLeft = (int) ((width / 2) - ((stringWidth + (stringWidth * MAX_SCALE)) / 2)); return marginLeft; } public int getStartMarginLeftSubTitle(HeaderView headerView) { TextView subTitle = headerView.getSubTitle(); DisplayMetrics displaymetrics = new DisplayMetrics(); WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getMetrics(displaymetrics); int width = displaymetrics.widthPixels; int stringWidth = getStingWidth(subTitle); int marginLeft = ((width / 2) - (stringWidth / 2)); return marginLeft; } public int getStingWidth(TextView textView) { Rect bounds = new Rect(); Paint textPaint = textView.getPaint(); textPaint.getTextBounds(textView.getText().toString(), 0, textView.getText().toString().length(), bounds); return bounds.width(); } public int getToolbarHeight() { int result = 0; TypedValue tv = new TypedValue(); if (mContext.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { result = TypedValue.complexToDimensionPixelSize(tv.data, mContext.getResources().getDisplayMetrics()); } return result; } }