অ্যান্ড্রয়েডে একটি পেইন্ট ফ্ল্যাগ সরান


83

আমার কোডটি এর মতো দেখাচ্ছে:

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

এটি পাঠ্যের উপর প্রভাবের মাধ্যমে একটি ধর্মঘট সৃষ্টি করে। যাইহোক, আমি একবার সেট হয়ে গেলে পতাকাটি কীভাবে সরিয়ে ফেলতে হয় এবং পতাকাটি কীভাবে সেট করা হয় তা কীভাবে সনাক্ত করতে হয় তা জানতে চাই।

আমি বুঝতে পারি এটি কিছুটা অপারেশন, তবে আমি উভয় এবং অপারেটর উভয়ই চেষ্টা করেছি neither

উত্তর:


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)

4
আর একটি সহজ সমাধান হ'ল পেইন্টে প্রদত্ত বিভিন্ন পদ্ধতি ব্যবহার করা :)
রোমেন গাই

@ Dr.aNdRO আমি চেষ্টা করেছি এবং এটি আমার পক্ষে কার্যকর হয় না। আমার আরও কিছু করার দরকার আছে?
মনিকা

@ মনিকা এই জন্য আপনার কোড দেখতে হবে। আমি উভয় পদ্ধতি চেষ্টা করেছি এবং তারা দুর্দান্ত কাজ করছে। আপনি একটি নতুন থ্রেড শুরু করতে পারেন?
ডাঃ এএনড্রো

4
@ Dr.aNdRO - 0 এ সেট করা সমস্ত পতাকা সরিয়ে ফেলবে, কেবল একটি নির্দিষ্ট পতাকা সরিয়ে দেবে না, দয়া করে আপনার মন্তব্য সরিয়ে নেওয়া বা প্রশ্নের সঠিক উত্তর দেওয়ার জন্য আপডেট করার কথা বিবেচনা করুন।
মাইকেল পিটারসন

4
6 বছর পরে এবং আমি একটি প্রযোজনা অ্যাপ্লিকেশনে আপনার ফাঁদে পড়েছি। @ Dr.aNdRO। আপনার মন্তব্য মুছে দিন দয়া করে। এটি খুব খারাপ বিজ্ঞাপন। আপনার বার্তাটি বলে to remove a, যেখানে এটি সমস্ত পতাকা মুছে ফেলবে।
জুন

26

এটিও কাজ করে:

task_text.setPaintFlags(0);

আমি মনে করি এটি একটি অদ্ভুত ঘটনা যেখানে সঠিক ব্যবহার না করা আরও ক্রেট, কারণ এখানে শর্তগুলির জন্য যাচাই করার কোনও কারণ নেই, আপনি কেবল 2 টি মামলা চান, পেইন্ট.ফ্লেগ সেট করুন বা এটি সরিয়ে দিতে দুর্দান্ত সমাধান solution
cutiko

4
এটি করবেন না। এটি কেবলমাত্র একটি নির্দিষ্ট নয়, সমস্ত পতাকা সরিয়ে দেয়।
মাইকেল পিটারসন

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)

আপনাকে ধন্যবাদ সার্জি এই এখানে একমাত্র দৃ answer় উত্তর। 1) আপনি যে পতাকাটি সরাতে চান তা উপস্থিত আছে কিনা তা পরীক্ষা করুন। 2) যদি এটি হয় তবে এটি একটি এক্সওআর ব্যবহার করে অপসারণ করুন। আমি আশা করি ব্যবহারকারীরা উত্তরগুলি আপলোড করা বন্ধ করে দেবে যার মধ্যে পেইন্টফ্ল্যাগগুলি 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

আমার মতে, কেবলমাত্র এটির ডিফল্ট পতাকা সেট করা ভাল পছন্দ। অন্যথায়, টেক্সটটি ঝাঁকুনির মতো দেখাবে। টেক্সটভিউয়ের ডিফল্ট পতাকাটি (এডিট টেক্সট টেক্সটভিউ প্রসারিত করে)

Paint.ANTI_ALIAS_FLAG

এবং সেট করুন একটি নতুন পেইন্টফ্ল্যাগ আগেরটি প্রতিস্থাপন করবে। আমি এটি যাচাই করার জন্য একটি পরীক্ষা করেছি। সুতরাং, ঠিক এই মত:

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.