কোনও অ্যাপ্লিকেশন উইজেটে পাঠ্যের মাধ্যমে স্ট্রাইক করার কোনও সহজ উপায় আছে?


138

আমি ভাবছিলাম যে অ্যান্ড্রয়েডে কোনও অ্যাপ্লিকেশন উইজেটের মধ্যে পাঠ্য আঘাত করার সহজ উপায় আছে কিনা। একটি সাধারণ ক্রিয়াকলাপে, পাঠ্যদর্শন পতাকা ব্যবহার করে এটি বেশ সহজ:

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

তবে যেহেতু একটি অ্যাপ্লিকেশন উইজেটে, আমি কেবল রিমোটভিউগুলি ব্যবহার করতে পারি ... এটি সম্ভব কিনা তা আমি জানি না

কেউ এই সম্পর্কে কিছু জানেন?

ধন্যবাদ!


আমার উত্তর এখানে দেখুন! stackoverflow.com/a/35351523/250260
Jorgesys

আপনি যদি চান xml-only: আমার মত সমাধান stackoverflow.com/a/49062515/3579786
Jiyeh

উত্তর:


68

আপনি এটি ব্যবহার করতে পারেন:

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

অবশ্যই আপনি অ্যান্ড্রয়েড.গ্রাফিক্স.পেন্ট শ্রেণি থেকে অন্যান্য পতাকাও যুক্ত করতে পারেন।


8
কীভাবে এটি আরও বেশি ভোট পায় তা জানেন না, এটি প্রশ্নের সঠিক উত্তর দেয়। ধন্যবাদ।
জেমস ক্রস

প্রথম এটি স্পষ্ট নয় যে রিমোটভিউগুলি কী, এছাড়াও সমস্ত অ্যান্ড্রয়েড সংস্করণে কাজ করে না।
অক্ষত তাইলেং

এটি আমরা উত্তর খুঁজছি, অ্যান্ড্রয়েডেক্সটভিউগুলিতে অ্যাপ-উইজেটগুলির সাথে কাজ করা কেবল রিমুভ ভিউগুলির মাধ্যমে অ্যাক্সেসযোগ্য। এই মুহুর্তে টেক্সটভিউতে সরাসরি অ্যাক্সেস পাওয়া সম্ভব নয়।
এন্ডেভোর

188

পাঠ্যদর্শনটিতে এটি অগ্রগামীভাবে করতে, অন্যান্য ভিউজে অদৃশ্য >>

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

13
অ্যাপ-উইজেটগুলির পক্ষে এটি সম্ভব নয়। এগুলি কেবল রিমোটভিউগুলি নিয়ে কাজ করে এবং পেইন্টের পতাকাগুলি পড়ার কোনও পদ্ধতি নেই।
রিডকুলি

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
অ্যালেক্স.এফ

@ অ্যালেক্স.এফআই কিছুটা অবাক হয়ে গেছে যেহেতু এটি বিজ্ঞপ্তিগুলিতে উদাহরণস্বরূপ কাজ করে (যা প্রত্যন্ত দৃশ্যগুলি)। আমি অবশ্যই স্বীকার করতে পারি যে আমি যদিও অ্যাপডিজিটগুলির সাথে পরীক্ষা করেছি না।
BoD

1
এটা তোলে অ্যাপ উইজেট (যে কোন ফ্রেমওয়ার্ক বিঘত যে কার্যকরী ParcelableSpan কাজ করা উচিত) সঙ্গে কাজ করে
কার্স্টেন

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এবং কনফিগারেশনটি যেমন কাজ করবে:

বিকল্প পাঠ


এবং যদি টেক্সটভিউ পাঠ্যের চেয়ে দীর্ঘ হয় এবং কেবল পাঠ্যটি আঘাত করা যায় তবে কী করবেন?
maysi

শুধুমাত্র কালো এবং এক লাইনের পাঠ্যের জন্য ... @ruhalde আমার পক্ষে কাজ করেছিল।
আহেমেড_খান_89

27

এটি করার জন্য আপনি এটি ব্যবহার করতে পারেন

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

এবং অপসারণের জন্য আপনি এটি ব্যবহার করতে পারেন

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

1
আমি কীভাবে ধর্মঘটের রঙ যুক্ত করতে পারি
হর্ষ

@ হর্শা মনে হয় এটি আপনাকে কেবল পাঠ্যের রঙ ব্যবহার করার অনুমতি দেবে। আপনি যদি ভিন্ন স্ট্রাইকথ্রু রঙ চান তবে আপনাকে অন্যান্য প্রয়োগের পদ্ধতি চেষ্টা করতে হবে।
মাইকেল 17

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

মাল্টলাইন টেক্সটভিউয়ের জন্য আপনার এইভাবে 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
@ ওওয়ারহিরো আমার জন্য কাজ করেছেন, যদিও অ্যান্ড্রয়েড স্টুডিওর রেন্ডারারে রেন্ডার করে না। এটি দেখতে আসলে এটি তৈরি করতে হয়েছিল।
মাইক ফোক

8

নীচের লাইনটি যুক্ত করুন: -

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

"টিভি" এর পরিবর্তে আপনার রেফারেন্স ব্যবহার করুন


1
এটি প্রশ্নের উল্লেখ করে না, তিনি একটি অ্যাপডিজিটে একটি রিমোটভিউজ অবজেক্ট সম্পর্কে জিজ্ঞাসা করছেন।
ম্যাথু


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

অ্যান্ড্রয়েড সংস্থানগুলিতে বেশ ভাল এইচটিএমএল মার্কআপ সমর্থন রয়েছে
নীচের 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=”…”>

তবে মনে রাখবেন যে এটি অ্যান্ড্রয়েড স্টুডিও লেআউট পূর্বরূপে রেন্ডার করা হয়নি। সর্বশেষে অ্যান্ড্রয়েড স্টুডিও ৩.৩.১ এ পরীক্ষা করা হয়েছে

উদাহরণস্বরূপ, স্ট্রাইকথ্রু এর মতো দেখাবে:

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

-1

আমি এটি একটি নিয়মিত (স্থানীয়) TextViewকাজ করে এসেছি এবং এটি দূরবর্তী বিভিন্ন ক্ষেত্রে কাজ করা উচিত যেহেতু ডক্স পদ্ধতিটিকে দুটির সমতুল্য হিসাবে তালিকাভুক্ত করে:

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


এটি কাজ করে না :(। আমি এটি করছি: রিমোটভিউ.সেটটেক্সটভিউ টেক্সট (R.id.text, Html.fromHtml ("<del>" + মান + "</del>"));
আন্তোনিও

এটি হতে পারে যে <del>দ্বারা সমর্থিত নয় Html.fromHtml()। আপনি চেষ্টা করেছেন <strike>নাকি <s>?
blrfl

ধন্যবাদ ব্লারফ্লাল, তবে এটি কোনও কাজ করে না। দেখে মনে হচ্ছে কেবলমাত্র কয়েকটি 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 টি পাঠের সমাপ্তি অবস্থানের উপর চাপ দেওয়া দরকার, সুতরাং এই কোডটি চালানোর পরে আমরা স্ট্রাইক আউট সহ "প্রয়োজনীয়" পাঠ্যটি পেতে পারি। আশা করি এটি অন্য কারও জন্য সহায়ক হবে।

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