ActionBar Başlığında Özel Yazı Tipi Nasıl Ayarlanır?


257

Varlıklar klasörümdeki yazı tipiyle bir ActionBar başlık metninde (yalnızca sekme metninde değil) nasıl özel bir yazı tipi ayarlayabilirim? Android: Logo seçeneğini kullanmak istemiyorum.

Yanıtlar:


211

Bunun tamamen desteklenmediğini kabul ediyorum, ama işte yaptığım şey. İşlem çubuğunuz için özel bir görünüm kullanabilirsiniz (simgeniz ve eylem öğeleriniz arasında görüntülenir). Özel bir görünüm kullanıyorum ve yerel başlığı devre dışı bıraktım. Tüm aktivitelerim onCreate'de bu kodu içeren tek bir aktiviteden miras alır:

this.getActionBar().setDisplayShowCustomEnabled(true);
this.getActionBar().setDisplayShowTitleEnabled(false);

LayoutInflater inflator = LayoutInflater.from(this);
View v = inflator.inflate(R.layout.titleview, null);

//if you need to customize anything else about the text, do it here.
//I'm using a custom TextView with a custom font in my layout xml so all I need to do is set title
((TextView)v.findViewById(R.id.title)).setText(this.getTitle());

//assign the view to the actionbar
this.getActionBar().setCustomView(v);

Ve benim düzeni xml (yukarıdaki kodda R.layout.titleview) şöyle görünüyor:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent" >

<com.your.package.CustomTextView
        android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:textSize="20dp"
            android:maxLines="1"
            android:ellipsize="end"
            android:text="" />
</RelativeLayout>

1
Bu başlık için iyi çalışır, ancak bir başlık ve sekmeler istiyorsanız, özel görünümü başlık gibi bırakılmayan sekmelerin sağına yerleştirir. Asıl unvanı değiştirmeyi çok isterim.
draksia

2
Harika bir çözüm. XML'de yazı tipinin belirtilmesine izin veren özel bir metin görüntüleme sınıfına ihtiyacınız varsa, lütfen benimkini deneyin! github.com/tom-dignan/nifty - bu çok kolay.
Thomas Dignan

Bu kod onCreate () içinde olmalı mı? Dinamik olarak faaliyetimin dışında ayarlamam gerekiyor ...
IgorGanapolsky

yazı tipini dinamik olarak değiştirmeniz mi gerekiyor? ya da yazı tipi zaten özelleştirildikten sonra başlığı değiştirmek mi istiyorsunuz?
Sam Dozor

2
Bu işe yarıyor, ama çok çalışmanın yolu. Artı: simge tıklatıldığında vurgulanması gibi standart başlığın bazı özelliklerini kaybedersiniz ... Özel başlıklar, yalnızca yazı tiplerini değiştirmek için standart başlık düzenini yeniden oluşturmak amacıyla kullanılmaz ...
Zordid

422

Bunu özel bir TypefaceSpansınıf kullanarak yapabilirsiniz . customViewYukarıda belirtilen yaklaşımdan üstündür çünkü eylem görünümlerini genişletmek gibi diğer Eylem Çubuğu öğelerini kullanırken kırılmaz.

Böyle bir sınıfın kullanımı şöyle görünecektir:

SpannableString s = new SpannableString("My Title");
s.setSpan(new TypefaceSpan(this, "MyTypeface.otf"), 0, s.length(),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

// Update the action bar title with the TypefaceSpan instance
ActionBar actionBar = getActionBar();
actionBar.setTitle(s);

Özel TypefaceSpansınıf, Etkinlik bağlamınıza ve assets/fontsdizininizdeki bir yazı tipinin adına geçirilir . Dosyayı yükler ve Typefacebellekte yeni bir örneği önbelleğe alır . Tam olarak uygulanması TypefaceSpanşaşırtıcı derecede basittir:

/**
 * Style a {@link Spannable} with a custom {@link Typeface}.
 * 
 * @author Tristan Waddington
 */
public class TypefaceSpan extends MetricAffectingSpan {
      /** An <code>LruCache</code> for previously loaded typefaces. */
    private static LruCache<String, Typeface> sTypefaceCache =
            new LruCache<String, Typeface>(12);

    private Typeface mTypeface;

    /**
     * Load the {@link Typeface} and apply to a {@link Spannable}.
     */
    public TypefaceSpan(Context context, String typefaceName) {
        mTypeface = sTypefaceCache.get(typefaceName);

        if (mTypeface == null) {
            mTypeface = Typeface.createFromAsset(context.getApplicationContext()
                    .getAssets(), String.format("fonts/%s", typefaceName));

            // Cache the loaded Typeface
            sTypefaceCache.put(typefaceName, mTypeface);
        }
    }

    @Override
    public void updateMeasureState(TextPaint p) {
        p.setTypeface(mTypeface);

        // Note: This flag is required for proper typeface rendering
        p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        tp.setTypeface(mTypeface);

        // Note: This flag is required for proper typeface rendering
        tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }
}

Yukarıdaki sınıfı projenize kopyalayın ve yukarıda onCreategösterildiği gibi etkinliğinizin yöntemine uygulayın.


20
Güzel cevap. Ne görmek iyi sen de yazı biçimi eleman önbellek için bir yol göstermiştir.
Anand Sainath

6
Bu mükemmel. Bir gotcha - textAllCapsöznitelik temeldeki TextView'da (örneğin bir tema aracılığıyla) true değerine ayarlanırsa, özel yazı tipi görünmez. Bu tekniği işlem çubuğu sekme öğelerine uyguladığımda bu benim için bir sorundu.
James

4
Sınıfın bu uygulamasının, yazı tipi dosyalarınızı yerleştirdiğinizi varsaydığını unutmayın assets/fonts/. Sadece bir alt klasörde varlıklar altında değil Ttf / .OTF dosyaları atmak varsa, bunları uygun aşağıdaki kod satırını değiştirmek gerekir: String.format("fonts/%s", typefaceName). Anlamaya çalışırken iyi 10 dakika kaybettim. Eğer yapmazsanız, alacaksınızjava.lang.RuntimeException: Unable to start activity ComponentInfo{com.your.pckage}: java.lang.RuntimeException: native typeface cannot be made
Dzhuneyt

1
Uygulamayı başlattığınızda, varsayılan başlık stili görünür ve yaklaşık 1 saniye sonra özel stil görünür. Bad UI ...
Olumlu oy

2
Bu harika bir cevap ve bana bir ton yardımcı oldu. Ekleyeceğim bir gelişme, önbellek mekanizmasını TypefaceSpan dışında kendi sınıfına taşımak olacaktır. Açıklık olmadan bir Yazı Tipi kullandığım diğer durumlarla karşılaştım ve bu da bu durumlarda önbellekten yararlanmamı sağladı.
Justin

150
int titleId = getResources().getIdentifier("action_bar_title", "id",
            "android");
    TextView yourTextView = (TextView) findViewById(titleId);
    yourTextView.setTextColor(getResources().getColor(R.color.black));
    yourTextView.setTypeface(face);

2
Bu sorunun tercih edilen cevabı olmalıdır. "Action_bar_subtitle" ile de harika çalışıyor! Teşekkürler!
Zordid

20
daha yeni bir sürümdeki android geliştiricileri kaynak kimliğini "action_bar_title" den başka bir isme değiştirirse, bunun hiçbiri işe yaramaz. bu yüzden oy çok fazla değil.
Diogo Bento

6
Api> 3.0 üzerinde çalışıyor ancak appcompat için 2.x içinde değil
Aman Singhal

1
Bu yazı tipini ve her şeyi değiştirir. Ama bir sonraki Aktiviteye geçip geri bastığımda yazı tipi geri döndürülüyor. ActionBar özellikleri ile ilgili bir şey var sanırım.
Pranav Mahajan

11
@Digit: "Holo Tema" için harika çalıştı, ancak "Material Theme" (android L) için işe yaramadı. TitleId bulundu, ancak textview null .. bunu düzeltmek için herhangi bir fikir? Teşekkürler!
Michael

34

Gönderen Android Destek Kitaplığı V26 Android Studio + 3.0 itibaren bu süreç bir fiske kadar kolay hale geldi !!

Araç Çubuğu Başlığının yazı tipini değiştirmek için şu adımları izleyin:

  1. Okuma İndirilebilir Fontlar & listesinde (herhangi bir yazı tipi seçin benim öneri ) ya da Özel bir yazı tipini yüklemek res > fontuyarınca XML Fontlar'dan
  2. In res > values > stylesaşağıdakileri yapıştırın ( burada hayal gücünüzü kullanın! )

    <style name="TitleBarTextAppearance" parent="android:TextAppearance">
        <item name="android:fontFamily">@font/your_desired_font</item>
        <item name="android:textSize">23sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">@android:color/white</item>
    </style>
    
  3. Araç Çubuğu özelliklerinize app:titleTextAppearance="@style/TextAppearance.TabsFont"aşağıda gösterildiği gibi yeni bir satır ekleyin

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:titleTextAppearance="@style/TitleBarTextAppearance"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>
    
  4. Özel Actionbar Başlık yazı tipi stilinin tadını çıkarın!


2
Bu araç çubukları için mükemmeldir. Bunu uygulama genelinde yapmanın herhangi bir yolu, örneğin yeni bir etkinlikte varsayılan uygulama çubuğuna sahip olduğunuzda olduğu gibi?
Ürdün H

14

Kaligrafi kütüphane let ayrıca işlem çubuğuna geçerli olacak uygulama tema üzerinden bir özel yazı tipi ayarlayabilirsiniz var.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item>
</style>

<style name="AppTheme.Widget"/>

<style name="AppTheme.Widget.TextView" parent="android:Widget.Holo.Light.TextView">
   <item name="fontPath">fonts/Roboto-ThinItalic.ttf</item>
</style>

Kaligrafiyi etkinleştirmek için tek yapmanız gereken onu Etkinlik içeriğinize eklemek:

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(new CalligraphyContextWrapper(newBase));
}

Varsayılan özel öznitelik şöyledir fontPath, ancak uygulama sınıfınızda başlatarak yol için kendi özel özniteliğinizi sağlayabilirsiniz CalligraphyConfig.Builder. Kullanımı android:fontFamilyönerilmez.


Bu çözüm için Min API 16
Sami Eltamawy

MinSdk 7 projenin derleme dosyasına göre, ama bunu bir minSdk 18 projesinde kullanıyorum ve daha fazla kontrol yapmadım. Kullanılan rahatsız edici yöntem nedir?
thoutbeckers

Min API 7, Sadece örnek API16. appcompat-v7 + 'yı destekler
Chris.Jenkins

11

Bu çirkin bir hack ama bunu böyle yapabilirsiniz (action_bar_title gizlendiğinden):

    try {
        Integer titleId = (Integer) Class.forName("com.android.internal.R$id")
                .getField("action_bar_title").get(null);
        TextView title = (TextView) getWindow().findViewById(titleId);
        // check for null and manipulate the title as see fit
    } catch (Exception e) {
        Log.e(TAG, "Failed to obtain action bar title reference");
    }

Bu kod, GINGERBREAD sonrası cihazlar içindir, ancak Sherlock eylem çubuğu ile çalışmak için kolayca genişletilebilir

PS @pjv yorumuna dayanarak işlem çubuğu başlık kimliğini bulmanın daha iyi bir yolu var

final int titleId = 
    Resources.getSystem().getIdentifier("action_bar_title", "id", "android");

4
Dtmilano'nun yanıtını stackoverflow.com/questions/10779037/… 'de tercih ediyorum . Benzer ama biraz daha gelecekteki kanıt.
pjv

1
@pjv - kabul etti. Daha az "hacky" gibi görünüyor. Cevabımı değiştirdim
Bostone

1
Yani soru özel yazı tipiyle ilgili. Bu , varsayılan eylem çubuğunun metin görünümünün nasıl alınacağını yanıtlar .
AlikElzin-kilaka

@kilaka - fikir, metin görünümü ayarını alırsanız özel yazı tipinin önemsiz olacağıydı. Bu eski bir yazı olsa da, bence twaddington cevabı çok tercih
ediliyor

8

Aşağıdaki kod tüm sürümler için çalışacaktır. Bunu zencefilli bir cihazda ve JellyBean cihazında kontrol ettim

 private void actionBarIdForAll()
    {
        int titleId = 0;

        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
        {
            titleId = getResources().getIdentifier("action_bar_title", "id", "android");
        }
        else
        {
          // This is the id is from your app's generated R class when ActionBarActivity is used for SupportActionBar

            titleId = R.id.action_bar_title;
        }

        if(titleId>0)
        {
            // Do whatever you want ? It will work for all the versions.

            // 1. Customize your fonts
            // 2. Infact, customize your whole title TextView

            TextView titleView = (TextView)findViewById(titleId);
            titleView.setText("RedoApp");
            titleView.setTextColor(Color.CYAN);
        }
    }

Bu benim için hem ActionBar hem de AppCompat ActionBar'da çalışıyor. Ancak ikincisi sadece onCreate () 'den sonra başlık görünümünü bulmaya çalışırsam çalışır, bu yüzden örneğin onPostCreate ()' e yerleştirmek hile yapar.
Harri

8

destek kütüphanesinde yeni araç çubuğu kullanın eylem çubuğunuzu kendiniz gibi tasarlayın veya aşağıdaki kodu kullanın

Textview'i şişirmek iyi bir seçenek değil Spannable String builder'ı deneyin

Typeface font2 = Typeface.createFromAsset(getAssets(), "fonts/<your font in assets folder>");   
SpannableStringBuilder SS = new SpannableStringBuilder("MY Actionbar Tittle");
SS.setSpan (new CustomTypefaceSpan("", font2), 0, SS.length(),Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
actionBar.setTitle(ss);

sınıfın altına kopyala

public class CustomTypefaceSpan extends TypefaceSpan{

    private final Typeface newType;

    public CustomTypefaceSpan(String family, Typeface type) {
        super(family);
        newType = type;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        applyCustomTypeFace(ds, newType);
    }

    @Override
    public void updateMeasureState(TextPaint paint) {
        applyCustomTypeFace(paint, newType);
    }

    private static void applyCustomTypeFace(Paint paint, Typeface tf) {
        int oldStyle;
        Typeface old = paint.getTypeface();
        if (old == null) {
            oldStyle = 0;
        } else {
            oldStyle = old.getStyle();
        }

        int fake = oldStyle & ~tf.getStyle();
        if ((fake & Typeface.BOLD) != 0) {
            paint.setFakeBoldText(true);
        }

        if ((fake & Typeface.ITALIC) != 0) {
            paint.setTextSkewX(-0.25f);
        }

        paint.setTypeface(tf);
    }

}

7
    ActionBar actionBar = getSupportActionBar();
    TextView tv = new TextView(getApplicationContext());
    Typeface typeface = ResourcesCompat.getFont(this, R.font.monotype_corsiva);
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.MATCH_PARENT, // Width of TextView
            RelativeLayout.LayoutParams.WRAP_CONTENT); // Height of TextView
    tv.setLayoutParams(lp);
    tv.setText("Your Text"); // ActionBar title text
    tv.setTextSize(25);
    tv.setTextColor(Color.WHITE);
    tv.setTypeface(typeface, typeface.ITALIC);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(tv);

Harika Bu mükemmel çalışıyor Nasıl bu app bar merkezine alabilirim?
Prasath

Sadece yerine .. bir cazibe gibi çalışma typeface.ITALICile Typeface.ITALIChiçbir statik üye uyarı olması
Zain

3

Tüm Etkinliğin tüm TextView'lerine yazı tipi ayarlamak istiyorsanız, bunun gibi bir şey kullanabilirsiniz:

public static void setTypefaceToAll(Activity activity)
{
    View view = activity.findViewById(android.R.id.content).getRootView();
    setTypefaceToAll(view);
}

public static void setTypefaceToAll(View view)
{
    if (view instanceof ViewGroup)
    {
        ViewGroup g = (ViewGroup) view;
        int count = g.getChildCount();
        for (int i = 0; i < count; i++)
            setTypefaceToAll(g.getChildAt(i));
    }
    else if (view instanceof TextView)
    {
        TextView tv = (TextView) view;
        setTypeface(tv);
    }
}

public static void setTypeface(TextView tv)
{
    TypefaceCache.setFont(tv, TypefaceCache.FONT_KOODAK);
}

Ve TypefaceCache:

import java.util.TreeMap;

import android.graphics.Typeface;
import android.widget.TextView;

public class TypefaceCache {

    //Font names from asset:
    public static final String FONT_ROBOTO_REGULAR = "fonts/Roboto-Regular.ttf";
    public static final String FONT_KOODAK = "fonts/Koodak.ttf";

    private static TreeMap<String, Typeface> fontCache = new TreeMap<String, Typeface>();

    public static Typeface getFont(String fontName) {
        Typeface tf = fontCache.get(fontName);
        if(tf == null) {
            try {
                tf = Typeface.createFromAsset(MyApplication.getAppContext().getAssets(), fontName);
            }
            catch (Exception e) {
                return null;
            }
            fontCache.put(fontName, tf);
        }
        return tf;
    }

    public static void setFont(TextView tv, String fontName)
    {
        tv.setTypeface(getFont(fontName));
    }
}

3

Ben sadece onCreate () işlevi içinde aşağıdakileri yaptım:

TypefaceSpan typefaceSpan = new TypefaceSpan("font_to_be_used");
SpannableString str = new SpannableString("toolbar_text");
str.setSpan(typefaceSpan,0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
getSupportActionBar().setTitle(str);

Destek Kitaplıkları kullanıyorum, eğer onları kullanmıyorsanız, sanırım getSupportActionBar () yerine getActionBar () 'a geçmelisiniz.

Android Studio 3'te bu talimatları izleyerek özel yazı tipleri ekleyebilirsiniz https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html ve ardından yeni eklenen yazı tipinizi " "font_to_be_used


1

@ Sam_D'nin cevabına eklemek için, bunu yapmak için bunu yapmak zorunda kaldım:

this.setTitle("my title!");
((TextView)v.findViewById(R.id.title)).setText(this.getTitle());
TextView title = ((TextView)v.findViewById(R.id.title));
title.setEllipsize(TextUtils.TruncateAt.MARQUEE);
title.setMarqueeRepeatLimit(1);
// in order to start strolling, it has to be focusable and focused
title.setFocusable(true);
title.setSingleLine(true);
title.setFocusableInTouchMode(true);
title.requestFocus();

Overkill gibi görünüyor - v.findViewById (R.id.title)) iki kez atıfta bulunuyor - ama bunu yapmama izin vermenin tek yolu bu.


1

Doğru cevabı güncellemek için.

ilk olarak: özel görünümü kullandığımız için başlığı false olarak ayarlayın

    actionBar.setDisplayShowTitleEnabled(false);

ikinci olarak: titleview.xml oluşturun

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="@android:color/transparent" >

    <TextView
       android:id="@+id/title"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="10dp"
       android:textSize="20dp"
       android:maxLines="1"
       android:ellipsize="end"
       android:text="" />

</RelativeLayout>

Son olarak:

//font file must be in the phone db so you have to create download file code
//check the code on the bottom part of the download file code.

   TypeFace font = Typeface.createFromFile("/storage/emulated/0/Android/data/"   
    + BuildConfig.APPLICATION_ID + "/files/" + "font name" + ".ttf");

    if(font != null) {
        LayoutInflater inflator = LayoutInflater.from(this);
        View v = inflator.inflate(R.layout.titleview, null);
        TextView titleTv = ((TextView) v.findViewById(R.id.title));
        titleTv.setText(title);
        titleTv.setTypeface(font);
        actionBar.setCustomView(v);
    } else {
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle("  " + title); // Need to add a title
    }

YAZI TİPİ DOSYASI İNDİRİN: çünkü dosyayı bulvar içine depoladığım için indirmek için linkim var.

/**downloadFile*/
public void downloadFile(){
    String DownloadUrl = //url here
    File file = new File("/storage/emulated/0/Android/data/" + BuildConfig.APPLICATION_ID + "/files/");
    File[] list = file.listFiles();
    if(list == null || list.length <= 0) {
        BroadcastReceiver onComplete = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                try{
                    showContentFragment(false);
                } catch (Exception e){
                }
            }
        };

        registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(DownloadUrl));
        request.setVisibleInDownloadsUi(false);
        request.setDestinationInExternalFilesDir(this, null, ModelManager.getInstance().getCurrentApp().getRegular_font_name() + ".ttf");
        DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
        manager.enqueue(request);
    } else {
        for (File files : list) {
            if (!files.getName().equals("font_name" + ".ttf")) {
                BroadcastReceiver onComplete = new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        try{
                            showContentFragment(false);
                        } catch (Exception e){
                        }
                    }
                };

                registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
                DownloadManager.Request request = new DownloadManager.Request(Uri.parse(DownloadUrl));
                request.setVisibleInDownloadsUi(false);
                request.setDestinationInExternalFilesDir(this, null, "font_name" + ".ttf");
                DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                manager.enqueue(request);
            } else {
                showContentFragment(false);
                break;
            }
        }
    }
}

1

Özel bir metin görüntüleme gerekmez!

İlk olarak, java kodunuzdaki toobar'daki başlığı devre dışı bırakın: getSupportActionBar (). SetDisplayShowTitleEnabled (false);

Ardından, araç çubuğunun içine bir TextView ekleyin:

<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:textSize="18sp"
        android:fontFamily="@font/roboto" />

    </android.support.v7.widget.Toolbar>

Bu son navigasyon UI jetpack kütüphaneleri ile çalışmayacak
Ali Asheer

1

Bunu kullanmayı deneyin

TextView headerText= new TextView(getApplicationContext());
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
headerText.setLayoutParams(lp);
headerText.setText("Welcome!");
headerText.setTextSize(20);
headerText.setTextColor(Color.parseColor("#FFFFFF"));
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/wesfy_regular.ttf");
headerText.setTypeface(tf);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(headerText);

0

Bunu başarmak için yansımalar kullanmalıyız

final int titleId = activity.getResources().getIdentifier("action_bar_title", "id", "android");

    final TextView title;
    if (activity.findViewById(titleId) != null) {
        title = (TextView) activity.findViewById(titleId);
        title.setTextColor(Color.BLACK);
        title.setTextColor(configs().getColor(ColorKey.GENERAL_TEXT));
        title.setTypeface(configs().getTypeface());
    } else {
        try {
            Field f = bar.getClass().getDeclaredField("mTitleTextView");
            f.setAccessible(true);
            title = (TextView) f.get(bar);
            title.setTextColor(Color.BLACK);
            title.setTypeface(configs().getTypeface());
        } catch (NoSuchFieldException e) {
        } catch (IllegalAccessException e) {
        }
    }

-1

BUNU DENE

public void findAndSetFont(){
        getActionBar().setTitle("SOME TEST TEXT");
        scanForTextViewWithText(this,"SOME TEST TEXT",new SearchTextViewInterface(){

            @Override
            public void found(TextView title) {

            } 
        });
    }

public static void scanForTextViewWithText(Activity activity,String searchText, SearchTextViewInterface searchTextViewInterface){
    if(activity == null|| searchText == null || searchTextViewInterface == null)
        return;
    View view = activity.findViewById(android.R.id.content).getRootView();
    searchForTextViewWithTitle(view, searchText, searchTextViewInterface);
}

private static void searchForTextViewWithTitle(View view, String searchText, SearchTextViewInterface searchTextViewInterface)
{
    if (view instanceof ViewGroup)
    {
        ViewGroup g = (ViewGroup) view;
        int count = g.getChildCount();
        for (int i = 0; i < count; i++)
            searchForTextViewWithTitle(g.getChildAt(i), searchText, searchTextViewInterface);
    }
    else if (view instanceof TextView)
    {
        TextView textView = (TextView) view;
        if(textView.getText().toString().equals(searchText))
            if(searchTextViewInterface!=null)
                searchTextViewInterface.found(textView);
    }
}
public interface SearchTextViewInterface {
    void found(TextView title);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.