2013-10-09 15 views
5

Chciałbym powiedzieć, że mam dziwny problem z ustawianiem czcionki widoku tekstowego. Jeśli zmienię styl czcionki urządzenia z ustawienia-> wyświetlacz, zmieni się również styl czcionki widoku tekstu. Jak mogę temu zapobiec?Jak zapobiec zmianie czcionki TextView, gdy zmieniamy styl czcionki urządzenia w urządzeniach Samsung

Oto mój widok tekstowy w moim układzie xml.

<TextView 
     android:id="@+id/textView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:background="@drawable/title_bar_bg" 
     android:fontFamily="sans-serif" 
     android:typeface="sans" 
     android:gravity="center" 
     android:text="@string/people_finder" 
     android:textColor="@color/WHITE" 
     android:textSize="18sp" 
     android:textStyle="bold"> 

    </TextView> 

android: fontFamily = "bezszeryfową" android: krój = "sans"

także jest działa dobrze w niektórych urządzeń, takich jak Samsung Galaxy Grand, Samsung Note 2. Ale nie praca w Samsung Note 8, Samsung Note 10.1 itd.

Czy jest jakikolwiek inny sposób na zrobienie tego?

Dzięki

Odpowiedz

5

fontFamily i typeface atrybuty związane z android rodzimych czcionek. Jeśli chcesz, aby czcionka TextViews była zawsze taka sama, niezależnie od ustawień czcionki urządzenia, musisz programowo ustawić niestandardową wartość Typeface.

Typeface tf = Typeface.createFromAsset(context.getAssets(), "fontName.ttf")); 
TextView textView = (TextView) findViewById(R.id.textView1); 
textView.setTypeface(tf); 

Na marginesie, Calligraphy projekt umożliwia ustawienie niestandardowej czcionki faktycznie bezpośrednio z xml układu.

+1

Dzięki za odpowiedź. Działa, ale czy mógłbyś dać mi znać, dlaczego nie możemy ustawiać natywnych czcionek na siłę? Tak jakbyśmy używali szeryfów na monospace. to działa także, jak textview.setTypeface (Typeface.MONOSPACE, Typeface.BOLD); – Himanshu

+0

Cieszę się, że działało :) Myślę, że to tylko decyzja projektowa, ale tak, coś podobnego dzieje się w iOS; Zastanawiam się również, dlaczego nie ma prostego sposobu na ustawienie niestandardowych czcionek z układów XML. – ssantos

0
public class CustomTextView extends TextView { 

    Context context; 

    public CustomTextView (Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     this.context = context; 
    } 

    public CustomTextView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context = context; 
    } 

    public CustomTextView (Context context) { 
     super(context); 
     this.context = context; 
    } 

    public void setTypeface(Typeface tf, int style) { 
     if (style == Typeface.NORMAL) { 
      super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/HelveticaNeue.ttf")/* 
                              * , 
                              * - 
                              * 1 
                              */); 
     } else if (style == Typeface.ITALIC) { 
      super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/HelveticaNeueItalic.ttf")/* 
                               * , 
                               * - 
                               * 1 
                               */); 
     } else if (style == Typeface.BOLD) { 
      super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/HelveticaNeueBold.ttf")/* 
                               * , 
                               * - 
                               * 1 
                               */); 
     } 
    } 

} 

i dodać go w ur xml jak tego

<xxx.xxxx.utils.CustomTextView 
     android:id="@+id/login_username_tv" 
     android:layout_height="wrap_content" 
     android:layout_width="0dp" 
     android:layout_weight="0.3" 
     android:text="Email" 
     android:padding="5dp" 
     android:textColor="#333333" 
     android:textSize="12dp"/>