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"/>

14voto

Akshay Mukadam Points 1677

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 un 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)

9voto

Yeldar.N Points 51

Sur Kotlin vous pouvez créer une propriété d'extension :

inline var TextView.strike: Boolean
    set(visible) {
        paintFlags = if (visible) paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
        else paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
    }
    get() = paintFlags and Paint.STRIKE_THRU_TEXT_FLAG == Paint.STRIKE_THRU_TEXT_FLAG

Et utiliser :

textView.strike = true

8voto

Hanisha Points 119

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>

8voto

Daniel Wilson Points 629

Cela s'inscrit parfaitement dans le cadre du databinding :

@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}"/>

3voto

Milos Simic Simo Points 101

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

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

salutations

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