CollapsingToolbarLayout टाइपफेस और आकार कैसे बदलें?


86

मैं CollapsingToolbarLayoutफ़ॉन्ट आकार और इसके प्रकार को बदलना चाहता हूं । मैं इसे कैसे प्राप्त कर सकता हूं?

यहाँ छवि विवरण दर्ज करें


3
सेट किए गए प्रयास किए गए CCapsedTitleTextAppearance (); और setCollapsedTitleTextColor (); समारोह ?
अभिषेक

@ अभिषेक, यह वह नहीं है जिसकी मुझे तलाश है। मैं xml के माध्यम से टाइपफेस नहीं बदल सकता।
एलेक्समॉमोटोव

जवाबों:


139

अपडेट करें

इससे पहले कि हम कोड में गोता लगाएँ, चलो पहले textSizeहमारे लिए फैसला करें CollapsingToolbarLayout। Google ने एक वेबसाइट प्रकाशित की जिसका नाम है material.io, यह वेबसाइट टाइपोग्राफी से निपटने के तरीके के बारे में सबसे अच्छा तरीका भी बताती है ।

लेख "हेडिंग" श्रेणी के बारे में उल्लेख किया गया है जिसमें उपयोग करने के लिए अनुशंसित फ़ॉन्ट आकार भी बताया गया है sp

यहाँ छवि विवरण दर्ज करें

हालांकि लेख ने अनुशंसित CollapsingToolbarLayout's विस्तारित आकार का कभी उल्लेख नहीं किया है लेकिन पुस्तकालय हमारे मामले के लिए com.android.support:designप्रदान करता है TextAppearance। स्रोत के साथ कुछ खुदाई के साथ यह पता चला है कि आकार है 34sp(लेख में उल्लेख नहीं किया गया है)।

तो कैसे ढह आकार के बारे में? सौभाग्य से लेख में कुछ उल्लेख किया गया है और यह है 20sp

यहाँ छवि विवरण दर्ज करें

और TextAppearanceअब तक का सबसे अच्छा है जो ढह मोड में फिट बैठता है, TextAppearance.AppCompat.Titleजबकि हमारा विस्तारित मोड TextAppearanceहै TextAppearance.Design.CollapsingToolbar.Expanded

यदि आप उन सभी के ऊपर हमारे सभी उदाहरणों का अवलोकन करते हैं , तो फ़ॉन्ट के REGULAR संस्करण का उपयोग करता है जो यह कहना सुरक्षित है कि Roboto regularजब तक आपके पास विशिष्ट आवश्यकताएं नहीं हैं, तब तक कार्य करेंगे।

यह फोंट डाउनलोड करने के लिए बहुत अधिक काम हो सकता है क्यों एक पुस्तकालय का उपयोग न करें जिसमें सभी आवश्यक रोबोटो फोंट हैं? तो मैं Roboto उदा टाइपकर्ता के लिए एक सुलेख पुस्तकालय का परिचय ।

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

// Kotlin example
collapsing_toolbar.apply {
    setCollapsedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
    setExpandedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
}

यह 2019 का अपडेट है क्योंकि टायपर लाइब्रेरी अपडेटेड है! मैं पुस्तकालय का लेखक भी हूं।


1
वहाँ कुछ भी करने के लिए मार्जिन पतन शीर्षक सेट है,
श्री

@ Mr.G ऐप का उपयोग करें: titleMargin = "" आपके टूलबार पर।
एमरे अक्चन

82

आप नए सार्वजनिक तरीकों का उपयोग कर सकते हैं CollapsingToolbarLayout, जैसे कि टूटे हुए और विस्तारित शीर्षक के लिए टाइपफेस सेट करने के लिए:

final Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/FrutigerLTStd-Light.otf");
collapsingToolbar.setCollapsedTitleTypeface(tf);
collapsingToolbar.setExpandedTitleTypeface(tf);

ऐसा लगता है कि डिज़ाइन सपोर्ट लाइब्रेरी 23.1.0 में जोड़ा गया है, और यह बहुत ही स्वागत योग्य है।


आप शीर्षक कैसे बदलते हैं? मैं शीर्षक को प्रोग्रामेटिक रूप से भिन्न पाठ पर सेट करना चाहता हूं।
बराबर

1
आप संभवतः उदाहरण setTitle(String)पर विधि का उपयोग कर सकते हैं CollapsingToolbarLayout
नील सांचे

67

आप ऐसा कुछ कर सकते हैं:

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>

संदर्भ के लिए यहां भी देखें


1
यह शीर्षक पाठ का रंग बदलने का मेरे लिए काम किया है, के बाद से मुझे लगता है कि लगता है Toolbar.setTitleTextColor()या app:titleTextColorकी Toolbarजब में संलग्न नहीं करता परिवर्तन उपकरण पट्टी के शीर्षक का रंगCollapsingToolbarLayout
patrickjason91

1
@ patrickjason91 u का उपयोग करना होगाCollapsingToolbarLayout toolbar_layout =findViewById(R.id.toolbar_layout); toolbar_layout.setExpandedTitleColor(Color.BLACK);
abbasalim

14
    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 सेटटाइट ठीक से काम नहीं करता है


12

यहां सभी उत्तरों को जोड़ने के लिए, यह मेरे लिए xml में काम नहीं करता था, चाहे मैं कोई भी आवेदन करने की कोशिश करूं, AppTheme में, शैलियों में संदर्भित। मैं वर्तमान में समर्थन पुस्तकालय 27.1.1 का उपयोग कर रहा हूं

यह केवल कार्यक्रमबद्ध रूप से काम करता था।

Typeface typeface = ResourcesCompat.getFont(this, R.font.my_custom_font);
collapsingToolbarLayout.setCollapsedTitleTypeface(typeface);
collapsingToolbarLayout.setExpandedTitleTypeface(typeface);

पहले Collapsing टूलबार शीर्षक सेट करना सुनिश्चित करें । सेट setCollapsedTitleTypeFace शीर्षक सेट करने के बाद मेरे लिए काम किया।
प्रदीप तिलला

हाँ, यह मेरे लिए काम करता है और मुझे 'फ़ॉन्ट' फ़ोल्डर का उपयोग करने के लिए काम करना चाहिए।
विपिन नेगी

10

ऐसा लगता है कि मेरे पास समाधान है:

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) {
    }
}

10

कोड यहाँ है

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

वहाँ कुछ भी करने के लिए शीर्षक पतन मार्जिन सेट है?
मि।

4

फ़ॉन्ट आकार या माता-पिता बदलें।

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

1

Android 8.0 (एपीआई स्तर 26) ने XML में एक नई सुविधा, फ़ॉन्ट्स पेश किया है

अब आप फोंट को संसाधन https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html के रूप में परिभाषित कर सकते हैं

  • अपने फोंट को res-> font->फ़ोल्डर में रखें
  • Font.xml को परिभाषित करें
   <?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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.