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"/>
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));
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"
/>
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);
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)
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.
Si vous utilisez Kotlin:
your_text_view.apply {
paintFlags = paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
text = "Striked thru text"
}
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>
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é
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}"/>