ฉันต้องการเปลี่ยนCollapsingToolbarLayout
ขนาดตัวอักษรและแบบอักษร ฉันจะบรรลุเป้าหมายนั้นได้อย่างไร?
คำตอบ:
ก่อนที่เราจะดำน้ำในรหัส Let 's แรกตัดสินใจสำหรับเราtextSize
CollapsingToolbarLayout
Google การเผยแพร่เว็บไซต์ที่เรียกว่าmaterial.io
เว็บไซต์นี้ยังได้อธิบายถึงวิธีที่ดีที่สุดเกี่ยวกับวิธีการจัดการกับการพิมพ์
บทความกล่าวถึงหมวดหมู่ "หัวเรื่อง" ซึ่งอธิบายขนาดแบบอักษรที่แนะนำให้ใช้sp
ด้วย
แม้ว่าบทความไม่เคยพูดถึงขนาดCollapsingToolbarLayout's
ขยายที่แนะนำแต่ไลบรารีcom.android.support:design
มีTextAppearance
ไว้สำหรับกรณีของเรา ด้วยการขุดบางแหล่งปรากฎว่ามีขนาด34sp
(ไม่ได้กล่าวถึงในบทความ)
แล้วขนาดที่ยุบล่ะ? โชคดีที่บทความกล่าวถึงบางสิ่งและเป็น20sp
เช่นนั้น
และสิ่งที่ดีที่สุดTextAppearance
ที่เหมาะกับโหมดcollpasedคือ TextAppearance.AppCompat.Title
ในขณะที่โหมดขยายของเราTextAppearance
คือTextAppearance.Design.CollapsingToolbar.Expanded
คือ
หากคุณสังเกตตัวอย่างทั้งหมดของเราข้างต้นทั้งหมดนี้ใช้แบบอักษรรุ่นREGULARซึ่งสามารถพูดได้อย่างปลอดภัยRoboto regular
จะทำงานได้เว้นแต่คุณจะมีข้อกำหนดเฉพาะ
อาจเป็นการทำงานมากเกินไปในการดาวน์โหลดฟอนต์เองทำไมไม่ใช้ไลบรารีที่มีฟอนต์ Roboto ที่จำเป็นทั้งหมดล่ะ ดังนั้นผมจึงแนะนำห้องสมุดการประดิษฐ์ตัวอักษรสำหรับ Roboto เช่นTyper
dependencies {
implementation 'com.android.support:design:28.0.0'
implementation 'com.rhexgomez.typer:typer-roboto:2.0.0'
}
<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/TextAppearance.Design.CollapsingToolbar.Expanded"
app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Title"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
// Java example
CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setCollapsedTitleTypeface(TyperRoboto.ROBOTO_REGULAR());
collapsingToolbar.setExpandedTitleTypeface(TyperRoboto.ROBOTO_REGULAR());
// Kotlin example
collapsing_toolbar.apply {
setCollapsedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
setExpandedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
}
นี่เป็นการอัปเดตปี 2019 เนื่องจากมีการอัปเดตไลบรารี Typer! ฉันยังเป็นผู้เขียนห้องสมุด
คุณสามารถใช้วิธีการสาธารณะใหม่CollapsingToolbarLayout
เพื่อตั้งค่าแบบอักษรสำหรับหัวเรื่องที่ยุบและขยายได้ดังนี้:
final Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/FrutigerLTStd-Light.otf");
collapsingToolbar.setCollapsedTitleTypeface(tf);
collapsingToolbar.setExpandedTitleTypeface(tf);
สิ่งนี้ดูเหมือนจะถูกเพิ่มเข้ามาในไลบรารีการสนับสนุนการออกแบบ 23.1.0 และเป็นการเพิ่มที่น่ายินดี
setTitle(String)
วิธีการบนCollapsingToolbarLayout
อินสแตนซ์
คุณสามารถทำสิ่งนี้:
mCollapsingToolbarLayout.setTitle(getTitle());
mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);
สไตล์การดูข้อความที่สอดคล้องกันอาจเป็น:
<style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">28sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
<style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">24sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">normal</item>
</style>
ดูข้อมูลอ้างอิงได้ที่นี่
Toolbar.setTitleTextColor()
หรือapp:titleTextColor
การToolbar
เปลี่ยนแปลงไม่ได้สีของชื่อของแถบเครื่องมือเมื่อล้อมรอบในCollapsingToolbarLayout
CollapsingToolbarLayout toolbar_layout =findViewById(R.id.toolbar_layout); toolbar_layout.setExpandedTitleColor(Color.BLACK);
mCollapsingToolbar.setTitle(getTitle());
mCollapsingToolbar.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
mCollapsingToolbar.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);
<style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">28sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
<style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">24sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">normal</item>
</style>
<style name="ExpandedAppBarPlus1" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">28.5sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
<style name="CollapsedAppBarPlus1" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">24.5sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">normal</item>
</style>
อ้างอิงที่นี่CollapsingToolbarLayout setTitle ทำงานไม่ถูกต้อง
หากต้องการเพิ่มคำตอบทั้งหมดที่นี่มันใช้งานไม่ได้สำหรับฉันใน xml ไม่ว่าฉันจะพยายามสมัครที่ไหนก็ตามใน AppTheme การอ้างอิงในสไตล์ ฉันกำลังใช้ไลบรารีสนับสนุน 27.1.1
มันทำงานตามโปรแกรมเท่านั้น
Typeface typeface = ResourcesCompat.getFont(this, R.font.my_custom_font);
collapsingToolbarLayout.setCollapsedTitleTypeface(typeface);
collapsingToolbarLayout.setExpandedTitleTypeface(typeface);
ดูเหมือนว่าฉันจะมีทางออก:
private void makeCollapsingToolbarLayoutLooksGood(CollapsingToolbarLayout collapsingToolbarLayout) {
try {
final Field field = collapsingToolbarLayout.getClass().getDeclaredField("mCollapsingTextHelper");
field.setAccessible(true);
final Object object = field.get(collapsingToolbarLayout);
final Field tpf = object.getClass().getDeclaredField("mTextPaint");
tpf.setAccessible(true);
((TextPaint) tpf.get(object)).setTypeface(Typeface.createFromAsset(getAssets(), "Roboto-Bold.ttf"));
((TextPaint) tpf.get(object)).setColor(getResources().getColor(R.color.ice));
} catch (Exception ignored) {
}
}
รหัสอยู่ที่นี่
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
app:expandedTitleTextAppearance="@style/Toolbar.TitleText"
app:collapsedTitleTextAppearance="@style/Toolbar.TitleText"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="@dimen/expanded_toolbar_title_margin_start"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
เพิ่มบรรทัดรหัสเหล่านี้ในเค้าโครง CollapsingToolbarLayout
app:expandedTitleTextAppearance="@style/Toolbar.TitleText"
app:collapsedTitleTextAppearance="@style/Toolbar.TitleText"
และรหัสที่ระบุด้านล่างใน style.xml
<style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">16sp</item>
</style>
เปลี่ยนขนาดฟอนต์หรือพาเรนต์
<style name="expandedappbar" parent="@android:style/TextAppearance.Medium"> //Change Medium to Small
<item name="android:textSize">28sp</item> <!--Or Change the font size -->
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">bold</item>
</style>
<style name="collapsedappbar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
</style>
ตอนนี้คุณสามารถกำหนดฟอนต์เป็นทรัพยากรได้https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
res-> font->
โฟลเดอร์
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/lobster_regular" />
<font
android:fontStyle="italic"
android:fontWeight="400"
android:font="@font/lobster_italic" />
</font-family>
ชุดต่อไป
val typeface = ResourcesCompat.getFont(this, R.font.lobster_regular)
htab_collapse_toolbar.setCollapsedTitleTypeface(typeface)
htab_collapse_toolbar.setExpandedTitleTypeface(typeface)