web-dev-qa-db-fra.com

créer un texte barré?

Puis-je créer un texte barré dans Android, je veux dire ajouter une valeur spéciale dans la balise TextView 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"/>
107
nawfal cuteberg

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 existe plusieurs indicateurs de bits permettant de faire des choses comme gras, italique et oui barré. Donc, pour activer le barré, vous devez retourner le bit qui correspond à cet indicateur. La façon la plus simple de procéder consiste à utiliser un indicateur au niveau du bit ou sur les indicateurs actuels et une constante qui correspond à un ensemble d'indicateurs avec uniquement l'indicateur de substitution barré activé.

Editer à partir de Commentaire par Г И И О :

Pour ceux qui souhaitent supprimer ce drapeau, voici comment:

someTextView.setPaintFlags(someTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
279
hovanessyan

C'est vraiment facile si vous utilisez des chaînes:

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

Et puis juste:

<TextView 
        ...
         Android:text="@string/line"
 />
23
Ignacio Alorre

essaye ça :

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); 
19
ρяσѕρєя K

Je ne fais que copier mon réponse . J'espère que cela aidera quelqu'un Si vous avez un seul mot, nous pouvons utiliser drawable. Voici l'exemple:

<item Android:state_pressed="false"><shape Android:shape="line">
        <stroke Android:width="2dp" Android:color="#ffffff" />
    </shape>
</item>

si vous avez plusieurs lignes, vous pouvez utiliser le code suivant:

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

Vous pouvez le faire de trois manières: soit en définissant le premier plan dans TextView, soit en définissant PaintFlag, soit en déclarant chaine de caractères comme <strike>your_string</strike> dans strings.xml. Par exemple,

à travers PaintFlag

C’est la méthode la plus simple, il vous suffit de définir le drapeau barré sur votre TextView en tant que,

yourTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);

cela passera par votre TextView.

Au premier plan, dessinable

Vous pouvez également passer par votre TextView en définissant un avant-plan comme suit:

<?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 ci-dessus ce qui est dessinable dans votre TextView comme 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 --!>

À travers strings.xml

Dans cette méthode, vous devez déclarer votre chaîne dans strings.xml comme briser comme,

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

Note

Mais je vous recommande de passer au travers de votre TextView en mettant en avant-plan un dessin. Parce que vous pouvez dessiner facilement, vous pouvez définir votre grève par la couleur de la ligne (comme dans la couleur rouge dans l'exemple ci-dessus), la taille ou toute autre propriété de style. Alors que dans deux autres méthodes, textcolor par défaut est barré par la couleur.

12
Heisenberg

Si vous utilisez Kotlin:

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

Il suffit d'utiliser ceci et vous avez terminé. Pour l'activité:

TextView t= (TextView).findViewById(R.id.thousand));
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

Pour XML:

<RelativeLayout
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content">

            <TextView
                Android:id="@+id/text_view_original_cash_amount"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:padding="5dp"
                Android:textColor="@Android:color/darker_gray"
                Android:text="Rs. 1,999"/>

            <View
                Android:layout_width="wrap_content"
                Android:layout_height="1dp"
                Android:background="@Android:color/darker_gray"
                Android:layout_centerVertical="true"
                Android:layout_alignStart="@id/text_view_original_cash_amount"
                Android:layout_alignEnd="@id/text_view_original_cash_amount"
                Android:layout_alignLeft="@id/text_view_original_cash_amount"
                Android:layout_alignRight="@id/text_view_original_cash_amount" /> 
</RelativeLayout>
7
Hanisha

J'ai essayé quelques options ci-dessus mais, cela fonctionne mieux pour moi:

String text = "<strike><font color=\'#757575\'>Some text</font></strike>";
textview.setText(Html.fromHtml(text));

à votre santé

3
Milos Simic Simo

Cela correspond bien à la liaison de données:

@BindingAdapter("strikethrough")
@JvmStatic
fun strikethrough(view: TextView, show: Boolean) {
    view.paintFlags = if (show) {
        view.paintFlags or STRIKE_THRU_TEXT_FLAG
    } else {
        view.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
    }
}

Puis dans votre xml:

    <TextView
        Android:id="@+id/line_item_name"
        Android:textAppearance="?attr/textAppearanceBody2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Club sandwich with ranch dressing"
        app:strikethrough="@{viewModel.isItemChecked}"/>
3
Daniel Wilson