স্ট্রাইকথ্র টেক্সট তৈরি করছেন?


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

চিত্র আঁকার জন্য, গা bold়, তির্যক এবং হ্যাঁ স্ট্রাইকথ্রুর মতো কাজ করার জন্য বেশ কয়েকটি বিট পতাকা রয়েছে। সুতরাং স্ট্রাইকথ্রু সক্ষম করতে, আপনাকে এই পতাকাটির সাথে সামঞ্জস্যপূর্ণ বিটটি ফ্লিপ করতে হবে। এটি করার সহজতম উপায় হ'ল বিটওয়াইস-বা বর্তমান পতাকাগুলিতে এবং একটি ধ্রুবক যা কেবলমাত্র স্ট্রাইকথ্রু পতাকা সক্ষম করা সহ পতাকাগুলির সেটের সাথে মিলে যায়।

থেকে সম্পাদনা মন্তব্য দ্বারা Ε Г И І И О :

এই পতাকাটি সরানোর জন্য যে কেউ চাইছেন, এইভাবে:

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

2
এটি সত্যিই কাজ করে, তবে আমি কি তার
যথাযথতাগুলি

122
এই পতাকাটি সরানোর জন্য যে কেউ চাইছেন, এইভাবে:someTextView.setPaintFlags(someTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
Ε Г И І И О

1
@ ΕГИІИО প্রতীকটির অর্থ কী?
ম্যাথিউ জাতগুলি 15

2
@ ববিজ্যাকসন, এটি অ্যানারি বিটওয়াইস পরিপূরক অপারেটর।
Г И І И

3
@। এটি সমস্ত বিটকে ফিরিয়ে দেয়। সুতরাং ধরা যাক ধর্মঘট_থ্রু 00100, তাহলে 110 11011 করে। আপনি যদি এটির সাথে এবং এটি বিদ্যমান পতাকাগুলি দিয়ে রাখেন তবে এটি সমস্ত মূল পতাকা রাখবে তবে ধর্মঘট_তৃত্রীয় বিটটি আনসেট করবে
বয়

32

আপনি যদি স্ট্রিং ব্যবহার করছেন তবে এটি সত্যিই সহজ:

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

এবং তারপরে ঠিক:

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

এটি ইউআই সম্পাদকের স্ট্রাইকথ্রু হিসাবে দেখায় নি, তবে এটি ডিভাইসে পাঠ্যটি আঘাত করে
yarell

1
এটি (এবং সম্ভবত)
এআইপি

এই উত্তর 3 বছর আছে। আমি নিশ্চিত নই যে কোন এপিআই বা সংস্করণটি কার্যকর না হওয়া অবধি ব্যাখ্যাগুলি উত্তর সম্পাদনা করা দরকার কিনা। স্ট্যাকওভারফ্লোতে যদি কোনও নিয়ম থাকে যা কমপক্ষে এটি পুনরুদ্ধার করে, আমি সমস্যা ছাড়াই এটি করব।
Ignacio Alorre

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

এটি আপনার টেক্সটভিউয়ের মাধ্যমে আঘাত হানবে।

অগ্রভূমি অঙ্কনযোগ্য (কেবলমাত্র 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>

এখন, আপনাকে কেবল আপনার টেক্সটভিউতে উপরের অঙ্কনযোগ্য সেট করতে হবে 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হিসাবে স্ট্রিং হিসাবে হিসাবে ঘোষণা করতে হবে ,

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

বিঃদ্রঃ

তবে আমি আপনাকে অগ্রণীত অঙ্কনযোগ্য সেট করে আপনার টেক্সটভিউয়ের মাধ্যমে হরতাল করার পরামর্শ দিচ্ছি। কারণ অঙ্কনীয় মাধ্যমে আপনি সহজেই আপনার স্ট্রাইক-মাধ্যমে লাইন রঙ সেট করতে পারেন (যেমন আমি উপরের উদাহরণে লাল রঙ হিসাবে সেট করেছি) বা আকার বা অন্য কোনও স্টাইলের সম্পত্তি। অন্য দুটি পদ্ধতিতে ডিফল্ট পাঠ্যের রঙ হ'ল স্ট্রাইকথ্রু রঙ।


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

এক্সএমএলের জন্য:

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

উদ্ভাবনী সমাধান
নিশান্ত শাহ

তবে এই XMLসমাধানটি খুব জটিল নয়, প্রতিটি পাঠ্যদর্শনটির জন্য আপনাকে একটি অতিরিক্ত আপেক্ষিক বিন্যাস এবং একটি ভিউ যুক্ত করতে হবে mean
আদিত্য এস

আপাতত, আমি কেবল এই সমাধানটি পাই, যদি আমি অন্য সমাধান পাই get আমি অবশ্যই আপনার সাথে শেয়ার করব।
হানিশা

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

তারপরে আপনার এক্সএমএলে:

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

চিয়ার্স


স্ট্রাইকথ্রুটির জন্য এইচটিএমএল উপস্থাপিত ইনলাইন উপাদানটি <স্ট্রাইক> বা <s> এই উপাদানটি অবশ্য 1999 টি এইচটিএমএল 4.01 স্ট্যান্ডার্ডে অবনতি হয়েছে এবং <del> ট্যাগ দ্বারা প্রতিস্থাপন করা হয়েছে, মুদ্রিত পাঠ্যের প্রতিনিধিত্বকারী একটি শব্দার্থ উপাদান, যা ব্যবহারকারী এজেন্ট (সাধারণত ওয়েব ব্রাউজারগুলি) প্রায়শই স্ট্রাইকথ্রু হিসাবে রেন্ডার করে [[3] [4] en.wikedia.org/wiki/Strikethrough যদিও <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
    }
}

তারপরে আপনার এক্সএমএলে

     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         app:strike="@{itemViewModel.strikeContent}" />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.