क्या ऐप विजेट में पाठ के माध्यम से हड़ताल करने का एक आसान तरीका है?


138

मैं सोच रहा था कि क्या एंड्रॉइड में ऐप विजेट के भीतर टेक्स्ट को स्ट्राइक करने का एक आसान तरीका है। एक सामान्य गतिविधि में, टेक्स्टव्यू झंडे का उपयोग करना बहुत आसान है:

textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

लेकिन जब से एक ऐप विजेट में, मैं केवल रिमोटव्यू का उपयोग कर सकता हूं ... मुझे नहीं पता कि क्या यह संभव है

किसी को इस बारे में कुछ पता है?

धन्यवाद!


मेरा जवाब यहाँ देखें! stackoverflow.com/a/35351523/250260
जोर्जेस

अगर आप xml-onlyमेरे जैसा समाधान चाहते हैं: stackoverflow.com/a/49062515/3579786
जिह्वा

जवाबों:


68

आप इसका उपयोग कर सकते हैं:

remoteviews.setInt(R.id.YourTextView, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);

बेशक आप android.graphics.Paint क्लास से अन्य झंडे भी जोड़ सकते हैं।


8
पता नहीं कैसे यह अधिक वोट नहीं मिला है, यह पूरी तरह से सवाल का जवाब देता है। धन्यवाद।
जेम्स क्रॉस

पहले यह स्पष्ट नहीं है कि रिमोटव्यू क्या है, साथ ही सभी एंड्रॉइड संस्करणों के लिए काम नहीं करता है।
अक्षत ने

यह वह उत्तर है जिसकी हम तलाश कर रहे हैं, androidTextViews पर ऐप-विजेट्स के साथ काम करना केवल removeViews के माध्यम से सुलभ है। इस बिंदु पर सीधे TextView तक पहुँचना संभव नहीं है।
endevour

188

यह एक textview में प्रोग्रामेटिक रूप से करने के लिए, अन्य दृश्यों में अनुपलब्ध >>

TextView tv = (TextView) findViewById(R.id.mytext);
tv.setText("This is strike-thru");
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

13
यह ऐप-विजेट्स के लिए संभव नहीं है। वे केवल RemoteViews के साथ काम करते हैं और पेंट झंडे को पढ़ने के लिए कोई विधि नहीं है।
Ridcully

78

इसे दूसरे तरीके से प्रोग्राम करने के लिए जो पेंट की तुलना में हैक की तरह थोड़ा कम दिखता है:

करने के बजाय:

tv.setText(s);

करना:

private static final StrikethroughSpan STRIKE_THROUGH_SPAN = new StrikethroughSpan();
...
tv.setText(s, TextView.BufferType.SPANNABLE);
Spannable spannable = (Spannable) tv.getText();
spannable.setSpan(STRIKE_THROUGH_SPAN, 0, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

धन्यवाद एक आकर्षण की तरह काम करता है विशेष रूप से जब आपको स्ट्राइकथ्रू लाइन के लिए टेक्स्ट व्यू के कुछ हिस्से की आवश्यकता होती है
दिलजीत

स्पैनबल के साथ +1 समाधान ने काम किया, बहुत बहुत धन्यवाद। आपने मेरा दिन बचाया। धन्यवाद आदमी;)
साइमन डोरियाकॉक

यह इस सवाल का जवाब नहीं देता क्योंकि यह लागू नहीं होता हैRemoteView
एलेक्स .12

@ एलेक्स.मैं थोड़ा आश्चर्यचकित हूं क्योंकि यह उदाहरणों (जो दूरस्थ दृश्य हैं) में उदाहरण के लिए काम करता है। मुझे मानना ​​होगा कि मैंने AppWidgets के साथ परीक्षण नहीं किया है।
BoD

1
यह ऐप विजेट्स के साथ काम करता है (किसी भी ढांचे की अवधि जो पार्सलेबलस्पैन को लागू करती है) को काम करना चाहिए
कार्स्टन

58

2015 अपडेट: फोल्क्स, यह एंड्रॉइड के बहुत पुराने संस्करणों के लिए है। आधुनिक समाधान के लिए अन्य उत्तर देखें!


संपूर्ण पाठ दृश्य के माध्यम से हड़ताल करने के लिए, आप स्ट्राइकथ्रू प्रभाव को अनुकरण करने के लिए एक विशिष्ट पृष्ठभूमि छवि का उपयोग कर सकते हैं:

android:background="@drawable/bg_strikethrough"

जहां bg_strikethroughड्रॉबल एक 9-पैच है जो बीच के माध्यम से एक ठोस रेखा रखता है, दोनों तरफ बढ़ रहा है, हालांकि आपको लगता है कि बहुत अधिक पैडिंग उचित है। मैंने इस तरह से एक का उपयोग किया है:

वैकल्पिक शब्द

(स्पष्टता के लिए बढ़े हुए .. 1300%!)

वैकल्पिक शब्द

यह मेरा एचडीपीआई संस्करण है, इसलिए इसे (पहले वाले http://i.stack.imgur.com/nt6BK.png ) के रूप में सहेजें res/drawable-hdpi/bg_strikethrough.9.pngऔर कॉन्फ़िगरेशन इस प्रकार काम करेगा:

वैकल्पिक शब्द


और क्या होगा यदि TextView पाठ की तुलना में लंबा है और केवल पाठ के माध्यम से मारा जाना चाहिए?
21 मई

केवल काले और एक पंक्ति के पाठ के लिए ... @ruhalde ने मेरे लिए काम किया।
अहमद_खान_89

27

ऐसा करने के लिए आप इसका उपयोग कर सकते हैं

 title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

और हटाने के लिए आप इसका उपयोग कर सकते हैं

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

1
मैं स्ट्राइक कलर कैसे जोड़ सकता हूं
हर्षा

@ यह केवल पाठ के रंग का उपयोग करने की अनुमति देता है। यदि आप एक अलग स्ट्राइकथ्रू रंग चाहते हैं, तो आपको अन्य कार्यान्वयन विधि की कोशिश करनी होगी।
माइकल

19

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

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

@ स्किज़ो मुझे खुशी है कि इसने आपकी मदद की
अक्षय मुकदम

13

यहाँ आप सभी कोटलिन लोगों के लिए एक विस्तार है

fun TextView.showStrikeThrough(show: Boolean) {
    paintFlags =
            if (show) paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
            else paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
}

प्रयोग

textView.showStrikeThrough(true)

सीमा

स्ट्राइकथ्रू केवल पाठ के समान रंग हो सकता है

(यानी लाल पाठ और नीली स्ट्राइकथ्रू संभव नहीं है)


9

Multiline TextView के लिए आपको android.text.style.CharacterStyle का उपयोग करना चाहिए:

SpannableString spannable = new SpannableString(text);
spannable.setSpan(new StrikethroughSpan(), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
remoteViews.setTextViewText(R.id.itemText, spannable);

8

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

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

और फिर बस:

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

4
@war_Hero मेरे लिए काम करता है, हालाँकि Android Studio के रेंडरर में रेंडर नहीं होता है। वास्तव में इसे देखने के लिए इसका निर्माण किया था।
माइक फोक

8

नीचे पंक्ति जोड़ें: -

TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

"टीवी" के बजाय अपने संदर्भ का उपयोग करें


1
यह प्रश्न का संदर्भ नहीं देता, वह एक AppWidget में एक RemoteViews ऑब्जेक्ट के बारे में पूछ रहा है।
मैथ्यू


2

लॉलीपॉप और इसके बाद के संस्करण के लिए। एक बनाने योग्य

<?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="@color/onePlusRed" />
        </shape>
    </item>
</selector>

और इसे अग्रभूमि के रूप में उपयोग करें।
android:foreground="@drawable/strike_through"


0

आप इसमें जोड़ें:

TextView variableTv = (TextView) findViewById(R.id.yourText);

आप चर में सेट / जोड़ें:

variableTv.setText("It's Text use Style Strike");

और फिर .setPaintFlags को वैरिएबल में जोड़ें:

variableTv.setPaintFlags(variableTv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

0

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

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

चियर्स


0

Android संसाधनों में बहुत अच्छा HTML मार्कअप समर्थन है
। नीचे दिए गए HTML तत्व समर्थित हैं:

Bold: <b>, <em>
Italic: <i>, <cite>, <dfn>
25% larger text: <big>
20% smaller text: <small>
Setting font properties: <font face=”font_family color=”hex_color”>. Examples of possible font families include monospace, serif, and sans_serif.
Setting a monospace font family: <tt>
Strikethrough: <s>, <strike>, <del>
Underline: <u>
Superscript: <sup>
Subscript: <sub>
Bullet points: <ul>, <li>
Line breaks: <br>
Division: <div>
CSS style: <span style=”color|background_color|text-decoration”>
Paragraphs: <p dir=”rtl | ltr style=”…”>

ध्यान दें कि यह एंड्रॉयड स्टूडियो लेआउट पूर्वावलोकन में प्रदान नहीं किया गया है। अंतिम बार Android Studio 3.3.1 पर परीक्षण किया गया

उदाहरण के लिए, स्ट्राइकथ्रू इस तरह दिखेगा:

<string name="cost"><strike>$10</strike> $5 a month</string>

-1

मैंने इसे एक नियमित (स्थानीय) पर किया है TextView, और इसे दूरस्थ विविधता पर काम करना चाहिए क्योंकि डॉक्स विधि को दोनों के बीच समकक्ष के रूप में सूचीबद्ध करता है:

remote_text_view.setText(Html.fromHtml("This is <del>crossed off</del>."));


यह काम नहीं करता है :( मैं यह कर रहा हूं:। RemoteView.setTextViewText (R.id.text, Html.fromHtml ( "<डेल>" + मूल्य + "</ डेल>"));
एंटोनियो

ऐसा हो सकता है कि <del>इसके द्वारा समर्थित नहीं है Html.fromHtml()। क्या आपने कोशिश की <strike>या <s>?
ब्लरफ़्ल ऑक्ट

धन्यवाद ब्लरफ्ल, लेकिन यह भी काम नहीं करता है। ऐसा लगता है कि केवल कुछ HTML टैग्स को Html.fromHtml () द्वारा सुपरस्पोर्ट किया जाता है।
एंटोनियो

ओह। क्षमा करें, मैं मदद नहीं कर सका।
Blrfl

मैं ऑफ़र के लिए खरीदारी की तरह हड़ताल के साथ मूल्य कैसे प्राप्त कर सकता हूं
हर्ष

-1

मुझे पता है, मैं एक पुराने प्रश्न का उत्तर दे रहा हूं, यह किसी और के लिए उपयोगी हो सकता है, पाठ के एक विशेष भाग को प्रोग्रामेटिक रूप से स्ट्राइक करने के लिए।

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("Text need to be set here", TextView.BufferType.SPANNABLE);
Spannable spannable = (Spannable) textView.getText();
spannable.setSpan(new StrikethroughSpan(), 5, 8, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

तो, इस उदाहरण कोड में, 5 की स्थिति शुरू हो रही है और 8 पाठ की स्थिति समाप्त हो रही है, इसे बाहर निकालने की आवश्यकता है, इसलिए इस कोड को चलाने के बाद हमें स्ट्राइक आउट के साथ पाठ की "आवश्यकता" मिल सकती है। आशा है कि यह किसी और के लिए उपयोगी होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.