111 votes

créer un texte barré dans Android ?

Puis-je créer un texte barré dans Android, c'est-à-dire ajouter une valeur spéciale dans le champ TextView tag qui peut rendre cela possible ?

<TextView
    android:id="@+id/title" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:textColor="#040404"
    android:typeface="sans" 
    android:textSize="12dip"
    android:textStyle="bold"/>

283voto

hovanessyan Points 8800

Paint.STRIKE_THRU_TEXT_FLAG

TextView someTextView = (TextView) findViewById(R.id.some_text_view);
someTextView.setText(someString);
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

Pour peindre du texte, il y a plusieurs indicateurs de bits pour faire des choses comme gras, italique, et oui barré. Donc pour activer le barré, vous devez inverser le bit qui correspond à ce drapeau. Le moyen le plus simple Le moyen le plus simple de le faire est d'utiliser un OU par bit sur les drapeaux actuels et une qui correspond à un ensemble de drapeaux avec uniquement le drapeau drapeau barré activé.

37voto

bko Points 248

Si vous utilisez Kotlin :

your_text_view.apply {
    paintFlags = paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
    text = "Striked thru text"
}

34voto

HeisenBrg Points 1141

Vous pouvez le faire de trois façons, soit en définissant le premier plan dans le fichier TextView ou le réglage PaintFlag ou en déclarant une chaîne de caractères comme <strike>your_string</strike> sur strings.xml . Par exemple,

Par le biais de PaintFlag

Il s'agit de la méthode la plus simple. Il vous suffit d'activer le drapeau "strikethrough" sur votre TextView,

yourTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);

il frappera à travers votre TextView.

Dessinable de premier plan (fonctionne uniquement pour API 23+)

Si votre minSdkVersion est la version 23 + de l'API, alors vous pouvez frapper à travers votre TextView en définissant un premier plan comme,

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape android:shape="line">
            <stroke android:width="1dp" android:color="@android:color/holo_red_dark"/>
        </shape>
    </item>
</selector>

Maintenant, il vous suffit de définir le drawable ci-dessus dans votre TextView en tant que foreground . Par exemple,

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Your Textview with StrikeThrough"
    android:foreground="@drawable/strikethrough_foreground" />  <!-- this is available above --!>

Par le biais de strings.xml

Dans cette méthode, vous devez déclarer votre chaîne de caractères dans le champ strings.xml comme la grève à travers comme,

<string name="strike_line"> <strike>This line is strike throughed</strike></string>

Note

Mais je vous recommande de frapper à travers votre TextView en définissant le premier plan drawable. En effet, grâce au drawable, vous pouvez facilement définir la couleur de votre ligne barrée (comme j'ai défini la couleur rouge dans l'exemple ci-dessus) ou la taille ou toute autre propriété de style. Alors que dans les deux autres méthodes, la couleur par défaut du texte est la couleur barrée.

25voto

nacho22 Points 114

C'est très facile si vous utilisez des chaînes de caractères :

<string name="line"> Not crossed <strike> crossed </strike> </string>

Et puis juste :

<TextView 
        ...
         android:text="@string/line"
 />

19voto

ρяσѕρєя K Points 51253

essayez ceci :

richTextView = (TextView)findViewById(R.id.rich_text);  

    // this is the text we'll be operating on  
    SpannableString text = new SpannableString("Lorem ipsum dolor sit amet");  

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

    // make "ipsum" (characters 6 to 11) one and a half time bigger than the textbox  
    text.setSpan(new RelativeSizeSpan(1.5f), 6, 11, 0);  

    // make "dolor" (characters 12 to 17) display a toast message when touched  
    final Context context = this;  
    ClickableSpan clickableSpan = new ClickableSpan() {  
        @Override  
        public void onClick(View view) {  
            Toast.makeText(context, "dolor", Toast.LENGTH_LONG).show();  
        }  
    };  
    text.setSpan(clickableSpan, 12, 17, 0);  

    // make "sit" (characters 18 to 21) struck through  
    text.setSpan(new StrikethroughSpan(), 18, 21, 0);  

    // make "amet" (characters 22 to 26) twice as big, green and a link to this site.  
    // it's important to set the color after the URLSpan or the standard  
    // link color will override it.  
    text.setSpan(new RelativeSizeSpan(2f), 22, 26, 0);  
    text.setSpan(new URLSpan("http://www.djsad.com"), 22, 26, 0);  
    text.setSpan(new ForegroundColorSpan(Color.GREEN), 22, 26, 0);  

    // make our ClickableSpans and URLSpans work  
    richTextView.setMovementMethod(LinkMovementMethod.getInstance());  

    // shove our styled text into the TextView          
    richTextView.setText(text, BufferType.SPANNABLE);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X