web-dev-qa-db-fra.com

Android - Paramétrer TextView en gras ne fonctionne pas

Voici le XML:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/modal_list_row"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:paddingBottom="7.5dp"
    Android:orientation="vertical" >

    <TextView
                Android:id="@+id/title_text_view"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:layout_alignParentTop="true"
                Android:layout_centerHorizontal="true"
                Android:gravity="center"
                Android:text="@string/alert_title_small"
                Android:textColor="@color/alert_dialog_text_color"
                Android:textSize="@dimen/alert_dialog_title_font_size"
                Android:textStyle="bold" />

</RelativeLayout>

Bien que la disposition graphique affiche du texte en gras, ce n'est pas le cas sur l'appareil. Est-ce une chose de périphérique ou quoi?

Mettre à jour:

Pour les personnes qui continuent à demander le code XML complet, le voici mis à jour. Une mise en page relative simple. Et voici le code Java:

this.titleTextView.setText(this.modalListState.title);

Points à considérer: Cela pourrait-il être dû aux polices de caractères de l'appareil? Quelqu'un at-il Galaxy S3 à confirmer? Serait-ce le style d'activité? Voici celui utilisé pour l'application entière:

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

<!--
    Base application theme, dependent on API level. This theme is replaced
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.

-->
<style name="AppBaseTheme" parent="Android:Theme.Light">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.

    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

<style name="TransparentActivity" >
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:colorBackgroundCacheHint">@null</item>
    <item name="Android:windowIsTranslucent">true</item>
    <item name="Android:windowAnimationStyle">@Android:style/Animation</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowFullscreen">false</item>
</style>

Le style TransparentActivity est utilisé pour l'activité concernée.

23

Eh bien, j'ai trouvé une réponse idiote à ce problème. J'utilisais une police personnalisée sur le périphérique, pas celle par défaut. Une fois que je suis passé à celui par défaut, tout a fonctionné comme prévu!

34
Abdalrahman Shatou

il existe une méthode, vous pouvez définir la police textview en appelant la méthode setTypeface ...

 textView.setTypeface(null, Typeface.BOLD_ITALIC);
 textView.setTypeface(null, Typeface.BOLD);
 textView.setTypeface(null, Typeface.ITALIC);

et aussi se référer à ce lien ...

Définir le style TextView (gras ou italique)

20
Nilesh Patel

La plupart des réponses sont correctes.

Vous pouvez aussi utiliser ce qu'on appelle: SpannableString

Vous pouvez l'utiliser de cette façon:

String bold = "yes !";
String notBold = "no ";
SpannableString text = new SpannableString ( notBold + bold );
text.setSpan ( new StyleSpan ( Typeface.BOLD ) , notBold.length () , text .length () , 0 );
myTextView.setText ( text , BufferType.SPANNABLE );

Ce qui est bien avec SpannableString est que vous pouvez appliquer plusieurs étendues, chacune sur différentes parties de la chaîne! Comme vous l'avez remarqué, j'ai appliqué le caractère gras uniquement sur une partie de la chaîne (vous spécifiez les index de début et de fin), et cela devrait ressembler à ceci:

non oui!

Dans la méthode setSpan, vous spécifiez le SPAN à appliquer, l'index de départ, l'index de fin et les indicateurs (j'utilise toujours 0), dans cet ordre spécifique.

Vous pouvez même appliquer d'autres étendues, comme changer la taille du texte (utilisez RelativeSizeSpan ), ou même colorer (utilisez ForegroundColorSpan ), et bien plus encore!

Voici un exemple de plage de couleurs que vous pouvez réaliser de la manière suivante:

text.setSpan ( new ForegroundColorSpan ( Color.RED) , 0 , notBold .length () , 0 );

Et maintenant, la première partie de la chaîne (contenant le mot no) sera affichée en rouge!

5
Leeeeeeelo

Si TextView ne passe pas en gras lorsque vous exécutez votre application sur un appareil mobile, vous devez avoir utilisé la calligraphie dans votre activité. Donc, pour changer le style en gras, tout ce que vous avez à faire est d’écrire le code suivant dans votre fichier Java.

 textView.setTypeface(textView.getTypeface(), Typeface.BOLD);

Bonne chance

3
Siddharth Bhatheja

La taille de police définie dans le fichier de dimensions n'a peut-être pas été sélectionnée lors de l'exécution. Je suppose que vous n'exécutez pas l'application dans l'émulateur.

Vérifiez les éléments suivants pour vous assurer qu'il ne s'agit pas d'un périphérique.

  • assurez-vous que la taille de la police est correctement définie pour le fichier de dimensions approprié pour les métriques du périphérique cible.
  • Certains appareils permettent de modifier la taille du texte par défaut. Vérifiez la taille de texte par défaut sous "Paramètres" dans l'appareil.
  • Tout style ou thème appliqué dans votre fichier manifeste pour l'activité dans laquelle la mise en page est affichée. Essayez de supprimer le style/thème pendant un moment.
  • essayez de coder de manière rigoureuse la taille de la police pour obtenir un numéro pair, par exemple 24sp
  • vérifiez la propriété scale de l’une des vues/mises en page parentes.
  • aucun code n'essaie de changer le style de police pendant l'exécution.
3
skpal202

Il doit y avoir une version en gras/italique/souligné (c'est-à-dire cible) de la police. Le système ne le crée pas comme par magie pour vous.

Assurez-vous ainsi que la variante cible de votre police est incluse.

1
Ujjwal Singh

Essayez d'utiliser des balises HTML  dans votre fichier strings.xml. Voici comment vous pouvez le faire, Android string.xml lisant le problème des balises html

Pour le faire par programme,

TextView t = new TextView(mContext);
t.setText(Html.fromHtml("<b>This is bold</b>"));
1
Aman Gautam

J'ai rencontré un problème similaire avec le caractère échappé <. Vous devez utiliser &lt; à la place. Par exemple:

<string name="greetings">&lt;b>From Russia with love&lt;/b></string>

C'est écrit sur le site officiel .

1
BarbosSergos

Créez un thème personnalisé pour ou tous les modèles de périphériques . Et définissez-le dans votre textview.

Je pense que le problème est que le texte sera très lent afin que vous puissiez obtenir un effet.

Si vous avez testé ce problème, changez la taille de la police jusqu'à 40 ps et exécutez Qu'est-ce qui se passe?

0
Harshid

Pourriez-vous s'il vous plaît publier tous vos codes Java et XML pour que nous puissions recueillir plus d'informations sur votre problème? 

Il est possible que le problème ne se trouve pas dans le TextView que vous nous montrez, mais jusqu’à présent, la

Android:textStyle="bold"

semble fonctionner sur votre mise en page graphique.

0
Gaurav