2013-01-21 3 views
11

Desidero impostare il carattere per le schede "Video" e "Immagine" in ActionBarSherlock. Ho usato il seguente codice per farlo. La sua mostrando con precisione in ICS, ma non nel dispositivo versione più bassa, ma ho dimostrato di uscita precisa in altra parte di questa applicazione impostando TIPO faccia come ...Carattere personalizzato per le schede ActionBarSherlock

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

Ma come faccio a impostare un TypeFace nel ActionBar in questo codice:

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

Ciao mi piace davvero sapere la tua soluzione. Se si ottiene una soluzione o no? –

+0

controlla la mia risposta .. Ha funzionato per me. –

risposta

2

per risolvere questo si potrebbe creare una classe speciale ActionBar. Basta creare una Classe myBar extends Sherlockactionbar e inserire il settypeface. Se ora crei quella barra nella tua vista, avrà il carattere tipografico come desideri tu. Ad esempio, ecco un pulsante con un nuovo carattere tipografico.

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

riguarda

2

Prova questo:

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 ma voglio aggiungere il carattere Roboto alla scheda di navigazione nella barra di azione sherlock ..... qualsiasi suggerimento – user1526671

+0

Puoi anche impostare un carattere tipografico personalizzato nell'oggetto SpannableString. Dai un'occhiata a questo [SO] (http://stackoverflow.com/questions/8607707/how-to-set-a-custom-font-in-the-actionbar-title) post –

9

Va bene. L'ho trovato anch'io un po 'dove su SO.

Per prima cosa un file XML con questo in esso: 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" /> 

Poi nella classe in cui si a un'istanza per l'ActionBar utilizza questo codice per impostare il testo su ciascuna delle schede. (Questo esempio utilizza 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

Sembra che tu non stia ricevendo alcuna guida. Non sono sicuro del risultato della mia risposta, ma sì, si può avere l'idea di farcela come vuoi.

Lasciami provare ad aiutarti. Penso che tu debba giocare un po 'con le risorse predefinite integrate nel sdk di Android.

devi creare stile personalizzato:

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

È possibile anche fare riferimento this SO.

Ora basta applicare quel tema alla tua attività e otterrai Font del TabText come desideri.

Commentami se hai qualche domanda.

Godetevi la codifica ... :)

In EXTRA

Un'altra soluzione potrebbe essere quella di modificare l'immagine scheda includere il testo, con GIMP o Photoshop qualcosa, e poi basta impostare quelle immagini in le schede, invece di immagini e testo. È un modo un po 'scomodo di farlo, ma funzionerebbe.

Spero che questo aiuti!

+0

Questa non è una buona soluzione. Cosa succede se il testo della scheda è generato a livello di programmazione? – giorgiline

2

Innanzitutto creare a seguito personalizzato TypefaceSpan classe nel project.Bit cambiato versione di Custom TypefaceSpan per consentire di utilizzare entrambe le .otf e .ttf font.

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

} 

Ora applicare il codice come questo: (io ho usato questo su uno dei miei Bangla apps con successo)

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

ispirazione originale della mia risposta è stata: Styling the Android Action Bar title using a custom typeface

0

si può fare con questo :

// 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; 
} 

chiamata con questo:

ViewParent root = findViewById(android.R.id.content).getParent(); 
setCustomFontToActionBarTab(root);