有没有办法为CollapsingToolbarLayout
设置字体?
我正在使用Calligraphy,但默认字体未应用。
我认为问题在于CollapsingTextHelper
类正在使用Canvas.drawText()
而不是TextView
。
我如何更改用于Canvas.drawText()
的默认字体?
有没有办法为CollapsingToolbarLayout
设置字体?
我正在使用Calligraphy,但默认字体未应用。
我认为问题在于CollapsingTextHelper
类正在使用Canvas.drawText()
而不是TextView
。
我如何更改用于Canvas.drawText()
的默认字体?
自从最新的API更新之一,支持设计包已经更新,现在可以设置折叠标题文本的字体。
使用setCollapsedTitleTypeFace(Typeface typeface)
和setExpandedTitleTypeFace(Typeface typeface)
来设置您自定义的字体。
TypefaceUtils.load()
来加载字体... - dimsuzTypeFace
。Calligraphy
库包括用于 TypeFace
的帮助类。您可以基于 AssetManager
和 assets 目录中字体的路径生成 TypeFace
。CollapsingToolbarLayout
类应用自定义字体:class CollapsingToolbarLayoutWrapper : CollapsingToolbarLayout {
// Required constructors
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun onAttachedToWindow() {
super.onAttachedToWindow()
try {
val applicationContext = this.context.applicationContext
val assetManager = applicationContext.assets
val fontBold = applicationContext.getString(R.string.font_default_bold)
this.setCollapsedTitleTypeface(TypefaceUtils.load(assetManager, fontBold))
this.setExpandedTitleTypeface(TypefaceUtils.load(assetManager, fontBold))
} catch (exception: Exception) {
// Maybe exceptions from typeface, like missing font in assets, for font is not accept,...
}
}
}
在布局的xml文件中,使用CollapsingToolbarLayoutWrapper
代替:
<android.support.design.widget.CoordinatorLayout>
<!-- ... -->
<android.support.design.widget.AppBarLayout>
<!-- ... -->
<....CollapsingToolbarLayoutWrapper
app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
app:collapsedTitleGravity="center"
<!-- (optional) If you need to change title text size for collapsed/expanded states, can change attributes app:collapsedTitleTextAppearance, app:expandedTitleTextAppearance -->
app:collapsedTitleTextAppearance="@style/AppTheme.Widget.Style.Toolbar.TextAppearance.Title"
app:expandedTitleTextAppearance="@style/AppTheme.Widget.Style.Toolbar.TextAppearance.Title.Expanded"
app:expandedTitleGravity="start|bottom"
app:expandedTitleMarginStart="32dp">
<android.support.v7.widget.Toolbar>
<!-- ... -->
</android.support.v7.widget.Toolbar>
</....CollapsingToolbarLayoutWrapper>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
是可以的。事实上,默认情况下,标题折叠时的字体与未折叠时的字体不同。
因此,为了更改这个问题,例如,您可以这样做:
样式文件
<style name="TextAppearance.Collapsed"
parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:fontFamily">sans-serif</item>
</style>
<android.support.design.widget.CollapsingToolbarLayout
app:collapsedTitleTextAppearance="@style/TextAppearance.Collapsed">
...
</android.support.design.widget.CollapsingToolbarLayout>
第一步是选择您想要使用的字体。
其次,在您的资产目录中创建一个“Fonts”文件夹,并将您的字体复制到其中。
XML文件
<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="@android:color/transparent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<!-- Your content-->
</android.support.design.widget.CollapsingToolbarLayout>
Java文件
private void initCollapsingToolbar() {
final CollapsingToolbarLayout collapsingToolbar =
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setTitle(" ");
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
appBarLayout.setExpanded(true);
collapsingToolbar.setTitle(getString("Toolbar name");
Typeface tf = Typeface.createFromAsset(getAssets(),
"res/font/frederickathegreatregular.ttf");
collapsingToolbar.setCollapsedTitleTypeface(tf);
}
您可以按照以下方式更改CollapsingToolbarLayout标题的文本外观:
1)确保您在build.gradle依赖项中使用compile 'com.android.support:design:22.2.1'
。
2)像这样使用expandedTitleTextAppearance:
<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"
android:fitsSystemWindows="true"
app:contentScrim="@color/myPrimaryColor"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleTextAppearance="@style/HeaderTitleStyle">
3) 在你的样式文件中定义HeaderTitleStyle:
<style name="HeaderTitleStyle" parent="@android:style/TextAppearance">
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">20sp</item>
</style>
使用Android应用栏布局和可折叠工具栏布局的自定义字体
在CoordinatorLayout内部以下代码:
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/toolbar_color_palette"
android:layout_height="152dp"
android:fitsSystemWindows="true"
app:liftOnScroll="true"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay"
>
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:expandedTitleMarginStart="72dp"
app:expandedTitleMarginBottom="28dp"
app:expandedTitleTextAppearance="@style/TextAppearance.App.CollapsingToolbar.Expanded"
app:collapsedTitleTextAppearance="@style/TextAppearance.App.CollapsingToolbar.Collapsed"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/sample1"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax"
android:contentDescription="@string/app_name" />
<com.google.android.material.appbar.MaterialToolbar
android:elevation="0dp"
android:id="@+id/topAppBar5"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/toolbar_title"
app:layout_collapseMode="pin"
app:menu="@menu/menu_with_icons"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:navigationIcon="@drawable/ic_drawer_white"
/>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
风格:
<style name="TextAppearance.App.CollapsingToolbar.Expanded" parent="TextAppearance.MaterialComponents.Headline5">
<item name="android:textColor">?attr/colorOnPrimary</item>
<item name="fontFamily">@font/rosarivo</item>
<item name="android:fontFamily">@font/rosarivo</item>
</style>
<style name="TextAppearance.App.CollapsingToolbar.Collapsed" parent="TextAppearance.MaterialComponents.Headline6">
<item name="android:textColor">?attr/colorOnPrimary</item>
<item name="fontFamily">@font/rosarivo</item>
<item name="android:fontFamily">@font/rosarivo</item>
</style>
TextInputLayout
进行操作,但是使用CollapsingToolbarLayout
的步骤应该是相同的。 - adneal