Android में एक पेंट फ्लैग निकालें


83

मेरा कोड इस तरह दिखता है:

    TextView task_text = (TextView) view.findViewById(R.id.task_text);
    task_text.setPaintFlags( task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

यह पाठ पर प्रकट होने के लिए प्रभाव के माध्यम से हड़ताल का कारण बनता है। हालाँकि, मैं जानना चाहता हूँ कि एक बार सेट किए गए झंडे को कैसे हटाया जाए, और यह कैसे पता लगाया जाए कि ध्वज सेट है।

मैं समझता हूं कि यह एक बिटवाइज़ ऑपरेशन है, लेकिन मैंने ~ और - ऑपरेटर्स दोनों की कोशिश की है, न ही काम।

जवाबों:


184

झंडा हटाने के लिए, यह काम करना चाहिए:

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

जिसका मतलब है पूरी तरह से तैयार निशानी नहीं लगाई, के अलावा Paint.STRIKE_THRU_TEXT_FLAG

यह जांचने के लिए कि कोई झंडा सेट है (संपादित करें: एक पल के लिए मैं भूल गया कि यह जावा है ...):

if ((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0)

3
एक और आसान उपाय बस पेंट :) पर उपलब्ध विभिन्न तरीकों का उपयोग करना है
रोमेन गाइ

@ Dr.aNdRO मैंने कोशिश की और यह मेरे लिए काम नहीं करता है। क्या मुझे कुछ और करने की जरूरत है?
मोनिका

@ मोनिका मुझे इसके लिए आपका कोड देखना होगा। मैंने दोनों तरीकों की कोशिश की है और वे शांत काम कर रहे हैं। क्या आप एक नया धागा शुरू कर सकते हैं?
डॉ। एनडीआरओ

1
@ Dr.aNdRO - 0 पर सेट करना सभी झंडे को हटा देगा, न कि केवल एक विशिष्ट ध्वज को हटा देगा, कृपया अपनी टिप्पणी को हटाने या सवाल का सही उत्तर देने के लिए अपडेट करने पर विचार करें।
माइकल पीटरसन

1
6 साल बाद और मैं एक उत्पादन ऐप में आपके जाल के लिए गिर गया। @ Dr.aNdRO। कृपया अपनी टिप्पणी प्राप्त करें। यह बहुत बुरा है। आपका संदेश कहता है to remove a, जबकि यह सभी झंडे हटा देगा।
Zun

26

यह भी काम करता है:

task_text.setPaintFlags(0);

मुझे लगता है कि यह एक अजीब मामला है जहां सही का उपयोग नहीं करना अधिक संक्षिप्त है, क्योंकि यहां स्थितियों की जांच करने का कोई कारण नहीं है, आप सिर्फ 2 मामले चाहते हैं, पेंट सेट करें या इसे हटाने के लिए, महान समाधान।
कटिको

2
यह मत करो। यह सभी झंडे हटाता है, न कि केवल एक विशेष।
माइकल पीटरसन

21

कोटलिन में

task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()

मुझे यकीन नहीं है कि यह मेरे लिए काम क्यों नहीं करता है! tvPhone.autoLinkMask = Linkify.ALL, फिर tvPhone.text = "1-800-12345", फिरtvPhone.paintFlags = tvPhone.paintFlags and Paint.UNDERLINE_TEXT_FLAG.inv()
डॉजकी ऑक्ट

6

का प्रयोग करें विशेष या ऑपरेटर ^के बजाय |साथ &(~)संयोजन:

// setup STRIKE_THRU_TEXT_FLAG flag if current flags not contains it
task_text.setPaintFlags(task_text.getPaintFlags() ^ Paint.STRIKE_THRU_TEXT_FLAG));

// second call will remove STRIKE_THRU_TEXT_FLAG
task_text.setPaintFlags(task_text.getPaintFlags() ^ Paint.STRIKE_THRU_TEXT_FLAG));

जांचें कि क्या झंडा वर्तमान में सेटअप है:

if((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) == Paint.STRIKE_THRU_TEXT_FLAG)

शुक्रिया @Sergey यह यहाँ का एकमात्र मजबूत जवाब है। 1) जांचें कि क्या आप जिस ध्वज को हटाना चाहते हैं वह मौजूद है। 2) यदि यह है, तो इसे XOR का उपयोग करके हटा दें। काश यूजर्स ऐसे उत्तर देना बंद कर देते, जिसमें पेंटफ्लैग को 0 पर सेट करना या XOR का उपयोग करने से पहले यह जांचना शामिल होता कि क्या झंडा हटाने के लिए मौजूद है।
माइकल पीटरसन

5

| ------------------------------------------------- - |
| <*> | एक टेक्स्ट दृश्य के साथ रेखांकित करें:
-------------------------------------------- ------ |

| * | अंडरलाइन जोड़ें:

 txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

| * | अंडरलाइन निकालें:

txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);

| * | अंडरलाइन चेक करें:

if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG)
{
    // Codo Todo
}

| * | टॉगल रेखांकित करें:

if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG)
{
    txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);
}
else
{
    txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
}

4

मेरी राय में, बस इसका डिफ़ॉल्ट ध्वज सेट करना बेहतर विकल्प है। अन्यथा, पाठ दांतेदार देखा जाएगा। TextView में डिफ़ॉल्ट ध्वज (EditText का विस्तार TextView) है

Paint.ANTI_ALIAS_FLAG

और एक नया पेंटफ्लैग सेट करें जो पहले वाले को बदल देगा। मैंने इसे सत्यापित करने के लिए एक परीक्षण किया है। तो, बस इस तरह:

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