एक स्ट्राइकथ्रू पाठ बनाना?


128

क्या मैं एंड्रॉइड में एक स्ट्राइकथ्रू पाठ बना सकता हूं, मेरा मतलब है TextViewकि टैग में एक विशेष मूल्य जोड़ना जो इसे संभव बना सकता है?

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


यहाँ पर देखें stackoverflow.com/a/45186622/835883
j2emanue

जवाबों:


311

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

पेंटिंग टेक्स्ट के लिए, बोल्ड, इटैलिक्स और हां स्ट्राइकथ्रू जैसी चीजें करने के लिए कई बिट फ्लैग हैं। तो स्ट्राइकथ्रू को सक्षम करने के लिए, आपको इस झंडे से मेल खाती बिट को फ्लिप करना होगा। ऐसा करने का सबसे आसान तरीका यह है कि बिटवाइज़-या वर्तमान झंडे और एक निरंतरता का उपयोग करें जो केवल स्ट्राइकथ्रू ध्वज सक्षम के साथ झंडे के सेट से मेल खाती है।

И Г И О И О द्वारा टिप्पणी से संपादित करें :

इस ध्वज को निकालने के इच्छुक किसी भी व्यक्ति के लिए यह है:

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

2
यह वास्तव में काम करता है, लेकिन क्या मैं इसकी उचितताओं को बदल सकता हूं, जिसका मतलब है कि इसका आकार, इसका रंग कुछ ऐसा है
nawfal cuteberg

122
इस ध्वज को निकालने के इच्छुक किसी भी व्यक्ति के लिए यह है:someTextView.setPaintFlags(someTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
І Г И

1
@ SymbolГИΕИО ~ प्रतीक का क्या अर्थ है?
मैथ्यू कास्टेट्स

2
@ बॉबीजैकसन, यह एक गैर-बिटवाइज़ पूरक ऑपरेटर है।
13 Г И О И О

3
@ AllГИΕИО यह सभी बिट्स का सम्मान करता है। तो मान लें कि हड़ताल_श्रु 00100 है, तो ~ 11011 करता है। यदि आप और मौजूदा झंडे के साथ यह करते हैं, तो यह सभी मूल झंडे रखेगा लेकिन हड़ताल_ को थोड़ा परेशान करें
लड़का

32

यदि आप तार का उपयोग कर रहे हैं तो यह वास्तव में आसान है:

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

और फिर बस:

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

यह यूआई संपादक में एक स्ट्राइकथ्रू के रूप में नहीं दिखा, लेकिन यह डिवाइस पर पाठ को हड़ताल करता है
yarell


इस उत्तर में 3 साल हैं। मुझे यकीन नहीं है कि जब तक कि एपीआई या संस्करण उपयोगी नहीं हैं, तब तक व्याख्या करने वाले उत्तरों को संपादित करना आवश्यक है। यदि स्टैकओवरफ्लो में कोई नियम है जो कम से कम इसे पुनः प्राप्त करता है, तो मैं इसे समस्याओं के बिना करूंगा।
इग्नासियो अलोरे

3
यह हर एपीआई स्तर पर काम करता है जिसे मैंने परीक्षण किया है (15, 25 और 27 को परीक्षण किया गया है)
रैंडी

कुछ डिवाइस इस तरह की चीजों या अंडरलाइन का सम्मान नहीं करते हैं
जेम्स रिओर्डन

26

यदि आप कोटलिन का उपयोग कर रहे हैं:

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

5
: और इसे पूर्ववतpaintFlags = paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
रिवर्स

25

आप में तीन तरीकों से ऐसा कर सकते हैं, या तो सेटिंग अग्रभूमि द्वारा TextViewया स्थापित करने PaintFlagया के रूप में एक स्ट्रिंग की घोषणा <strike>your_string</strike>में strings.xml। उदाहरण के लिए,

पेंटफ्लैग के माध्यम से

यह सबसे आसान तरीका है जिसे आपको अपने टेक्स्ट व्यू पर स्ट्राइकथ्रू फ्लैग सेट करना होगा,

yourTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);

यह आपके TextView के माध्यम से हड़ताल करेगा।

अग्रभूमि के माध्यम से drawable (केवल एपीआई 23+ के लिए काम करता है)

यदि आपका minSdkVersion एपीआई संस्करण 23 + है, तो आप अपने टेक्स्ट व्यू के माध्यम से एक अग्रभूमि को सेट करके हड़ताल कर सकते हैं,

<?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>

अब, आपको बस अपने TextView के रूप में drawable से ऊपर सेट करना है foreground। उदाहरण के लिए,

<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 --!>

Strings.xml के माध्यम से

इस पद्धति में, आपको अपनी स्ट्रिंग strings.xmlको स्ट्राइक के रूप में घोषित करना होगा ,

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

ध्यान दें

लेकिन मैं आपको फोरग्राउंड ड्रॉबल सेट करके अपने TextView के माध्यम से हड़ताल करने की सलाह देता हूं। क्योंकि ड्रा करने योग्य के माध्यम से आप आसानी से अपनी स्ट्राइक-थ्रू लाइन का रंग सेट कर सकते हैं (जैसे मैं ऊपर उदाहरण में लाल रंग के रूप में सेट करता हूँ) या आकार या किसी भी शैली की संपत्ति। जबकि अन्य दो विधियों में डिफ़ॉल्ट पाठ रंग स्ट्राइकथ्रू रंग है।


19

इसे इस्तेमाल करे :

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

14

मैं सिर्फ अपने जवाब की नकल कर रहा हूं । आशा है कि यह किसी के लिए मदद करेगा यदि आपके पास एक भी शब्द है तो हम ड्रॉबल का उपयोग कर सकते हैं। निम्नलिखित उदाहरण है:

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

यदि आपके पास कई लाइनें हैं, तो आप निम्नलिखित कोड का उपयोग कर सकते हैं:

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

8

बस इस का उपयोग करें और आप कर रहे हैं। गतिविधि के लिए:

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

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

लेकिन यह XMLसमाधान बहुत अधिक जटिल नहीं है, मेरा मतलब है कि प्रत्येक टेक्स्टव्यू के लिए आपको एक अतिरिक्त रिश्तेदार लेआउट और एक दृश्य जोड़ना होगा।
आदित्य एस।

अभी के लिए, मेरे पास केवल यही समाधान है, अगर मुझे दूसरा समाधान मिलता है। मुझे आपके साथ साझा करना चाहिए।
हनीशा

6

यह डेटाबाइंडिंग में अच्छी तरह से फिट बैठता है:

@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()
    }
}

फिर अपने 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

मैंने ऊपर कुछ विकल्पों की कोशिश की लेकिन, यह मेरे लिए सबसे अच्छा काम करता है:

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

चियर्स


स्ट्राइकथ्रू के लिए HTML प्रस्तुति इनलाइन तत्व <हड़ताल> या <s> है, हालांकि यह तत्व 1999 एचटीएमएल 4.01 मानक में चित्रित किया गया था, और <डेल> टैग द्वारा प्रतिस्थापित किया गया, एक अर्थ संबंधी तत्व जो हटाए गए पाठ का प्रतिनिधित्व करता है, जो (आमतौर पर एजेंट) वेब ब्राउज़र) अक्सर एक स्ट्राइकथ्रू के रूप में प्रस्तुत करते हैं। [३] [४] en.wikipedia.org/wiki/Stricethrough हालांकि <del> नहीं <हड़ताल> मेरे लिए काम करता है
lxknvlk

0

आपके अवलोकन योग्य मॉडल में

fun getStrikeContent(): String {
    return "Hello"
}


 companion object {
    @BindingAdapter("strike")
    @JvmStatic
    fun loadOldPrice(view: TextView, value: String) {
        view.text = value
        view.paintFlags = STRIKE_THRU_TEXT_FLAG
    }
}

तो अपने xml में

     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         app:strike="@{itemViewModel.strikeContent}" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.