2013-01-21 19 views
11

Chcę ustawić czcionkę dla kart "Wideo" i "Grafika" w ActionBarSherlock. Użyłem do tego poniższego kodu. Jego pokazując dokładnie w ICS, ale nie w niższej wersji urządzenia, ale wykazały dokładne wyjście w drugiej części tej aplikacji przez ustawienie typu twarz jak ...Niestandardowa czcionka dla kart ActionBarSherlock

a.settypeface("ab.tttf"); 
a.settext("VIDEO"); 

Ale jak mam ustawić w TypeFaceActionBar w tym kodzie:

mTabsAdapter.addTab(bar.newTab().setText("IMAGE"), AFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText("VIDEO"), BFragment.class, null); 
+0

Witam naprawdę lubię wiedzieć o Twoim rozwiązaniu. Niezależnie od tego, czy otrzymasz rozwiązanie, czy nie? –

+0

sprawdź moją odpowiedź. Udało się to dla mnie. –

Odpowiedz

2

Aby rozwiązać ten problem można utworzyć klasę specjalna Actionbar. Po prostu stwórz klasę myBar extends Sherlockactionbar i ustaw typ zbioru. Jeśli teraz utworzysz ten pasek w swoim widoku, będzie on miał krój czcionki, jak chcesz. Na przykład tutaj jest przycisk z nową czcionką.

public class ChangedButton extends Button{ 

    public ChangedButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/viking2.TTF"); 
     this.setTypeface(font); 
    } 
} 

pozdrowienia

2

Spróbuj tego:

String s = "VIDEO"; 
SpannableString mSS = new SpannableString(s); 
mSS.setSpan(new StyleSpan(Typeface.BOLD), 0, s.length(), 0); 
mTabsAdapter.addTab(bar.newTab().setText(mSS), 
       BFragment.class, null); 
+0

@ Archie.bgpc ale chcę dodać czcionkę Roboto do zakładki nawigacji w pasku akcji sherlock ..... wszelkie sugestie – user1526671

+0

Możesz ustawić niestandardowy krój pisma w spanieleString obiektu również. Sprawdź to [SO] (http://stackoverflow.com/questions/8607707/how-to-set-a-ustom-font-in-the-actionbar-title) post –

9

Ok. Znalazłem to sobie gdzieś na SO.

Najpierw upewnij plik xml Mając to na niej: tab_title.xml

<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/action_custom_title" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="My Custom title" 
android:textColor="#fff" 
android:textSize="18sp" 
android:paddingTop="5dp" /> 

Następnie w klasie, gdzie w instancji Twój ActionBar wykorzystać ten kod, aby ustawić tekst na każdej z kart. (W tym przykładzie użyto ActionBarSherlock.)

ActionBar bar = getSupportActionBar(); 
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

String[] tabNames = {"Tab 1","Tab 2","Tab 3"}; 

for(int i = 0; i<bar.getTabCount(); i++){ 
    LayoutInflater inflater = LayoutInflater.from(this); 
    View customView = inflater.inflate(R.layout.tab_title, null); 

    TextView titleTV = (TextView) customView.findViewById(R.id.action_custom_title); 
    titleTV.setText(tabNames[i]); 
    //Here you can also add any other styling you want. 

    bar.getTabAt(i).setCustomView(customView); 
} 
1

Wygląda na to, że nie otrzymujesz żadnych wskazówek. Nie jestem pewien wyniku mojej odpowiedzi, ale tak, możesz zdecydować, aby zrobić to tak, jak chcesz.

Pozwól mi spróbować pomóc. Myślę, że musisz nieco zagrać z wbudowanymi domyślnymi zasobami android SDK.

Musisz utworzyć niestandardowy styl:

<style name="MyActionBarTabText" parent="Widget.ActionBar.TabText"> 
    <item name="android:textAppearance">@style/TextAppearance.Holo.Medium</item> 
    <item name="android:textColor">?android:attr/textColorPrimary</item> 
    <item name="android:textSize">12sp</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textAllCaps">true</item> 
    <item name="android:ellipsize">marquee</item> 
    <item name="android:maxLines">2</item> 
</style> 

<style name="Widget.ActionBar.TabText" parent="Widget"> 
    <item name="android:textAppearance">@style/TextAppearance.Widget.TextView.PopupMenu</item> 
    <item name="android:textColor">?android:attr/textColorPrimaryInverse</item> 
    <item name="android:textSize">18sp</item> 
    <item name="android:fontFamily">HERE YOU CAN GIVE YOUR FONT</item> 
</style> 

Można również odnieść this SO.

Teraz zastosuj ten motyw do swojej aktywności, a otrzymasz czcionkę TabText, jak chcesz.

Komentarze do mnie, jeśli masz jakieś pytanie.

Ciesz kodowanie ... :)

W EXTRA

Innym rozwiązaniem mogłoby być zmodyfikowanie obrazu kartę zawierać tekst, z GIMP lub Photoshop coś, a potem po prostu ustawić te obrazy w karty, zamiast obrazów i tekstu. Jest to trochę niezręczny sposób, ale zadziała.

Mam nadzieję, że to pomoże!

+0

To nie jest dobre rozwiązanie. Co się stanie, jeśli tekst zakładki zostanie wygenerowany programowo? – giorgiline

2

Najpierw utwórz niestandardowy TypefaceSpan następujące klasy w swojej project.Bit zmienił wersję Custom TypefaceSpan w celu umożliwienia korzystania z obu .otf i .ttf czcionek.

import java.util.StringTokenizer; 

import android.content.Context; 
import android.graphics.Typeface; 
import android.support.v4.util.LruCache; 
import android.text.TextPaint; 
import android.text.style.MetricAffectingSpan; 

public class TypefaceSpan extends MetricAffectingSpan{ 

    /*Cache to save loaded fonts*/ 
    private static LruCache<String, Typeface> typeFaceCache= new LruCache<String, Typeface>(12); 
    private Typeface mTypeface; 
    public TypefaceSpan(Context context,String typeFaceName) 
    { 
     StringTokenizer tokens=new StringTokenizer(typeFaceName,"."); 
     String fontName=tokens.nextToken(); 
     mTypeface=typeFaceCache.get(fontName); 

     if(mTypeface==null) 
     { 
      mTypeface=Constants.getFont(context, typeFaceName); 
      //cache the loaded font 
      typeFaceCache.put(fontName, mTypeface); 
     } 
    } 
    @Override 
    public void updateMeasureState(TextPaint p) { 
     p.setTypeface(mTypeface); 
    } 

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

} 

Teraz stosuje się kod jak poniżej: (użyłem tego na jednym z moich Bangla aplikacje z powodzeniem)

 SpannableString mstKnwTitle=new SpannableString(getString(R.string.e_mustknow_tab)); 
     SpannableString cntctsTitle=new SpannableString(getString(R.string.e_number_tab)); 


     TypefaceSpan span=new TypefaceSpan(this, "solaimanlipi.ttf"); 

     mstKnwTitle.setSpan(span, 0, mstKnwTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
     cntctsTitle.setSpan(span, 0, mstKnwTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

     Tab tab= actionBar.newTab(); 
     tab.setText(mstKnwTitle); 
     tab.setTabListener(tabListener); 

     actionBar.addTab(tab); 


     tab= actionBar.newTab(); 
     tab.setText(cntctsTitle); 
     tab.setTabListener(tabListener); 

     actionBar.addTab(tab); 

pierwotnej inspiracji moją odpowiedź brzmiała: Styling the Android Action Bar title using a custom typeface

0

Można to zrobić z tym :

// Set a custom font on all of our ActionBar Tabs 
private boolean setCustomFontToActionBarTab(Object root) { 

    // Found the container, that holds the Tabs. This is the ScrollContainerView to be specific, 
    // but checking against that class is not possible, since it's part of the hidden API. 
    // We will check, if root is an instance of HorizontalScrollView instead, 
    // since ScrollContainerView extends HorizontalScrollView. 
    if (root instanceof HorizontalScrollView) { 
     // The Tabs are all wraped in a LinearLayout 
     root = ((ViewGroup) root).getChildAt(0); 
     if (root instanceof LinearLayout) { 
      // Found the Tabs. Now we can set a custom Font to all of them. 
      for (int i = 0; i < ((ViewGroup) root).getChildCount(); i++) { 
       LinearLayout child = ((LinearLayout)((ViewGroup) root).getChildAt(i)); 
       TextView actionBarTitle = (TextView) child.getChildAt(0); 
       Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "font/font.ttf"); 
       actionBarTitle.setTypeface(tf) 
      } 
      return true; 
     } 

    } 
    // Search ActionBar and the Tabs. Exclude the content of the app from this search. 
    else if (root instanceof ViewGroup) { 
     ViewGroup group = (ViewGroup) root; 
     if (group.getId() != android.R.id.content) { 
      // Found a container that isn't the container holding our screen layout. 
      // The Tabs have to be in here. 
      for (int i = 0; i < group.getChildCount(); i++) { 
       if (setCustomFontToActionBarTab(group.getChildAt(i))) { 
        // Found and done searching the View tree 
        return true; 
       } 
      } 
     } 
    } 
    // Found nothing 
    return false; 
} 

nazwać to z tym:

ViewParent root = findViewById(android.R.id.content).getParent(); 
setCustomFontToActionBarTab(root); 
Powiązane problemy