2014-09-14 3 views
0

J'ai une disposition d'activité simple, qui a une imageview et quelques zones de texte. J'ai défini toutes les polices sur Helvetica Light et j'ai également spécifié la couleur de chaque boîte. Dans l'EDI, je vois les couleurs/polices comme prévu pour ces éléments, mais quand je construis et lance l'application sur mon téléphone Android, aucun style n'est appliqué ... Toutes les couleurs sont le noir par défaut et la police est aussi la police android par défaut.Style de police écrasé - Android

Ai-je des propriétés manquantes? S'il vous plaît aider! Merci!

ActivityScreen.xml

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

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="150dp" 
     android:layout_height="50dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="62dp" 
     android:scaleType="fitXY" 
     android:src="@drawable/whitelogoshort" 
     tools:ignore="ContentDescription" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:fontFamily="Helvetica Light" 
     android:text="Hello" 
     android:textColorLink="@color/grey" 
     android:textSize="23sp" 
     tools:ignore="HardcodedText" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="88dp" 
     android:fontFamily="Helvetica Light" 
     android:text="Swipe to continue" 
     android:textColorHint="@color/lightgrey" 
     android:textColorLink="@color/lightgrey" 
     tools:ignore="HardcodedText" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/imageView1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="14dp" 
     android:fontFamily="Helvetica Light" 
     android:text="Hello again" 
     android:textColorLink="@color/grey" 
     android:textSize="18sp" 
     tools:ignore="HardcodedText" /> 

</RelativeLayout> 

La classe regarde derrière comme:

public class WelcomeScreen extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activityscreen); 
    } 
} 

Le thème est défini dans le fichier manifest.xml comme:

android:theme="@android:style/Theme.Light.NoTitleBar" 

dans le cadre du étiquette d'application.

Pourquoi mes styles de polices ne sont-ils pas appliqués lorsque je lance l'application?

Merci!

Répondre

0

Vous ne pouvez pas utiliser fontFamily avec un nom de police. Vous devez changer la police par programmation avec la méthode setTypeface.

+0

Merci, j'utilisais mal FontFamily, il semble qu'il n'y ait que 12 cas possibles pour le style de police, et tout le reste doit être réglé La méthode setTypeface Quant à la couleur étant plus claire que spécifique, c'était en raison du thème que j'utilisais. –

0

L'attribut "fontFamily" est uniquement utilisé au niveau API 16 et supérieur, quelle est la version Android de l'appareil que vous testez?

Pour définir la couleur de texte que vous devez utiliser android:textColor ="#somecolor"

+0

le périphérique est Api 19. et cela ne l'a pas résolu :( –

1

simplement appeler cette fonction sur votre mise en page de racine pour appliquer les polices de onCreate(). Il trouve récursivement chaque instance d'un textview et modifie la police. Je suppose que votre fichier de police est situé dans le dossier des actifs dans un sous-dossier appelé "police". Le groupe de sauts vous permet simplement d'ignorer tout identifiant de groupe que vous ne voulez pas, donc si vous aviez une linearlayout que vous vouliez passer, passez dans la liste de tableaux R.id.mylinearlayout ... mais dans votre cas, vous voulez faire la mise en page entière donc juste passer en null pour skipgroups.

public void applyFonts(final ViewGroup root, final String fontName, 
     final ArrayList<Integer> skipGroups, final Context context) { 

    if (skipGroups != null && skipGroups.contains(root.getId())) { 
     return; 
    } 

    final int childCount = root.getChildCount(); 

    for (int i = 0; i != childCount; ++i) { 
     final View child = root.getChildAt(i); 
     if (child instanceof TextView) { 
     Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/"+fontName); 
      ((TextView) child).setTypeface(font); 

     } 
     if (child instanceof ViewGroup) { 
      applyFonts((ViewGroup) child, fontName,skipGroups, context); 
     } 

    } 
+0

Cela ne fonctionne que pour TextView qui sont présents dans la mise en page pour le moment.Si vous avez un ListView, cela ne fonctionnera pas si vous l'appelez dans l'onCreate Etant donné qu'il traverse toute la hiérarchie, ce n'est vraiment pas bon pour les performances –

Questions connexes