টেক্সটভিউ বোল্ডে কীভাবে একটি নির্দিষ্ট পাঠ্য বানাবেন


251

টেক্সটভিউতে কোনও নির্দিষ্ট পাঠ্য কীভাবে বোল্ড হয়ে যায় তা আমি জানি না।

এটি এর মত

txtResult.setText(id+" "+name);

আমি আউটপুটটি এর মতো হতে চাই:

1111 নীল

idএবং nameভেরিয়েবলগুলি যে আমি ডাটাবেস থেকে মানটি পুনরুদ্ধার করেছি এবং আমি এটি idবোল্ড করতে চাই তবে কেবল idতাই nameপ্রভাবিত হবে না এটি কীভাবে করবেন তা আমার কোনও ধারণা নেই।



উত্তর:


379

এইচটিএমএল-এ কেবল আপনার স্ট্রিং তৈরি করুন এবং এটি সেট করুন:

String sourceString = "<b>" + id + "</b> " + name; 
mytextview.setText(Html.fromHtml(sourceString));

5
যেহেতু এইচটিএমএল (সোর্সস্ট্রিং) এপিআই 24 এ অবমূল্যায়ন করা হয়েছে, আপনাকে পরবর্তী কোড ব্যবহার করতে হবে: বিস্তৃত সময়কাল স্প্যানড; if (android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.N) {সময়কালীন স্প্যানড = Html.fromHtml (পিরিয়ড ফর্ম্যাট, Html.FROM_HTML_MODE_LEGACY); } অন্য {সময়সীমার স্প্যানড = এইচটিএমএল.ফর্মএইচটিএমএল (সময়কালীন ফর্ম্যাট); }
ম্লাদেন রাকনজাক

2
আপনি যদি আপনার অ্যাপ্লিকেশন স্থানীয় করে থাকেন তবে এটিই একমাত্র বিকল্প।
howettl

এটি একটি ভাল সমাধান তবে আমি জানতে পেরেছিলাম যে <ও> @ wtsang02 সমাধানটি সবচেয়ে অনুকূল
ওমর বোশরা

হিসাবে বর্ণনা এটা সঙ্গে কাজ করে না <যদি আপনি String.format ব্যবহার, যদি না আপনার কাছে বন্ধনী অব্যাহতি এখানে
ইউসুফ এক্স

5
Html.fromHtml()এখন
কোথাও কোথাও

384

আপনি এইচটিএমএল.ফর্মএইচটিএমএল () ব্যবহার করতে গিয়ে আপনি আরও বেশি দেশীয় পদ্ধতির ব্যবহার করতে পারেন যা স্প্যানিয়েবল স্ট্রিংবিল্ডার , তবে এই পোস্টটি সহায়ক হতে পারে।

SpannableStringBuilder str = new SpannableStringBuilder("Your awesome text");
str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), INT_START, INT_END, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView tv=new TextView(context);
tv.setText(str);

যদি এই উত্তরটি কার্যকর না হয় তবে আপনার পাঠ্যকে স্প্যানিয়েবল স্ট্রিংয়ের সাথে যুক্ত করার চেষ্টা করুন যেমন: mSpannable.append (yourremainingtext);
গৌতম কুমার

10
গুগল থেকে আগত জ্ঞানহীন লোকদের জন্য: INT_START / INT_END হ'ল এমন অবস্থান যেখানে সাহসের শুরু এবং শেষ হওয়া উচিত।
স্পটলাইট

2
সোর্স স্ট্রিং এ পরিবর্তন না করে কেবল যদি আপনার কিছু মার্কআপ প্রয়োগ করতে হয় তবে আপনি আরও ভালভাবে স্প্যানিয়েবল স্ট্রিং ক্লাস ব্যবহার করতে পারেন
বাকস্ট্যাব

26
আপনার কপিটি স্থানীয়করণের প্রয়োজন হলে এটি সম্পূর্ণরূপে ভেঙে যাবে। INT_START এবং INT_END বিভিন্ন লোকালাইজেশনে আলাদা অবস্থান করবে।
howettl

4
সন্দেহ হলে কোড কী করছে তা বোঝার চেষ্টা করুন। ইন্ট স্টার্টটি এমন একটি সংখ্যা যা আপনি সংজ্ঞায়িত করেন যা স্প্যানের সূচনা সূচক। প্রারম্ভের জন্য 0 টি চেষ্টা করুন, স্ট্রিং () আকারের () শেষের জন্য।
wtsang02

84

প্রথম: রাঘব সুদের উত্তর থেকে ধীর পারফরম্যান্স কোডটি ব্যবহার করার বিষয়ে আপনাকে চিন্তা করার দরকার নেই ।

দ্বিতীয়: আপনার কোটলিন ব্যবহার করার সময় ডাব্লু 3 শাশকের উত্তর দ্বারা সরবরাহিত কোনও এক্সটেনশন ফাংশন লিখতে হবে না ।

ফিনলেলি: আপনাকে যা করতে হবে তা হ'ল গুগল থেকে কোটলিন অ্যান্ড্রয়েড-কেটিএক্স লাইব্রেরি ব্যবহার করা ( আরও তথ্য এবং এটি কীভাবে আপনার প্রকল্পে অন্তর্ভুক্ত করা যায় তা জানতে এখানে উল্লেখ করুন ):

// Suppose id = 1111 and name = neil (just what you want). 
val s = SpannableStringBuilder()
          .bold { append(id) } 
          .append(name)
txtResult.setText(s) 

উত্পাদন: 1111 নীল


হালনাগাদ:

কারণ আমি মনে করি এটি অন্য কাউকে যেমন সহায়তা করতে পারে তেমনি আপনি আরও কতটা ব্যবহারের ক্ষেত্রে এখানে কতটা যেতে পারেন তা প্রদর্শন করতে সহায়তা করতে পারে।

  • যখন আপনাকে নীল এবং ইটালিকের কিছু অংশ সহ একটি পাঠ্য প্রদর্শন করতে হবে:

    val myCustomizedString = SpannableStringBuilder()
        .color(blueColor, { append("A blue text ") })
        .append("showing that ")
        .italic{ append("it is painless") }
  • যখন আপনার গা bold় এবং তির্যক উভয় ক্ষেত্রে একটি পাঠ্য প্রদর্শন করা দরকার:

        bold { italic { append("Bold and italic") } }

সংক্ষেপে, bold, append, colorএবং italicএক্সটেনশানটিকে ফাংশন হয় SpannableStringBuilder। আপনি অফিসিয়াল ডকুমেন্টেশনে আরও একটি এক্সটেনশন ফাংশন দেখতে পাবেন , যেখান থেকে আপনি অন্যান্য সম্ভাবনার জন্য চিন্তা করতে পারেন।


এটি দুর্দান্ত এবং সমস্ত তবে আমি মনে করি স্ট্রিং সম্পর্কিত প্রতিটি উত্তরের অনুবাদ বিবেচনা করা উচিত। বাক্যগুলিতে শব্দগুলিকে কিছু ভাষায় অর্ডার এবং সম্পূর্ণ আলাদাভাবে কাঠামোগত করা যায় তাই এর মতো যুক্ত করা নির্দিষ্ট পরিস্থিতিতে সর্বদা প্রযোজ্য নয়। এক্সএমএলে পরিমাণের স্ট্রিংয়ের মতো স্টাফের জন্যও আদর্শ নয়।
এডওয়ার্ড ভ্যান রাক

1
@ কুলমাইন্ড এটি আপনাকে অ্যান্ড্রয়েড কেটিএক্স ব্যবহার করতে অক্ষম করে না। আপনি কীভাবে বাগ রিপোর্ট করতে পারেন, কোনও বৈশিষ্ট্যের পরামর্শ দিতে বা সেই লাইব্রেরিতে অবদান রাখতে কীভাবে github.com/android/android-ktx থেকে তথ্য পেতে পারেন। সুতরাং, এটি এখনও একটি বৈধ রেফারেন্স। আমি লাইব্রেরি এবং আপনার প্রকল্পে এটি কীভাবে ব্যবহার করব সে সম্পর্কে আরও তথ্য অন্তর্ভুক্ত করার জন্য আমি আমার উত্তর আপডেট করেছি।
ফিলিপ ব্রিটো

1
এই আধুনিক সমাধান এবং সংস্থান জন্য এই লোক একটি পদক দিন !! ধন্যবাদ !!!
এসজেডি

37

আমি ভেবেছিলাম যে নির্বাচিত উত্তরটি সন্তোষজনক ফলাফল দেয় না। আমি আমার নিজস্ব ফাংশন লিখেছি যা 2 টি স্ট্রিং লাগে; পূর্ণ পাঠ্য এবং পাঠ্যের অংশটি আপনি সাহসী করতে চান।

এটি 'টেক্সট' সাহসী হয়ে 'টেক্সটটোবল্ড' দিয়ে একটি স্প্যানিয়েবল স্ট্রিংবিল্ডারকে ফিরিয়ে দেয়।

আমি ট্যাগগুলিকে মোড়ানো না করে একটি স্ট্রিংয়ের গা bold় করার ক্ষমতা খুঁজে পাই।

    /**
     * Makes a substring of a string bold.
     * @param text          Full text
     * @param textToBold    Text you want to make bold
     * @return              String with bold substring
     */

    public static SpannableStringBuilder makeSectionOfTextBold(String text, String textToBold){

        SpannableStringBuilder builder=new SpannableStringBuilder();

        if(textToBold.length() > 0 && !textToBold.trim().equals("")){

            //for counting start/end indexes
            String testText = text.toLowerCase(Locale.US);
            String testTextToBold = textToBold.toLowerCase(Locale.US);
            int startingIndex = testText.indexOf(testTextToBold);
            int endingIndex = startingIndex + testTextToBold.length();
            //for counting start/end indexes

            if(startingIndex < 0 || endingIndex <0){
                return builder.append(text);
            }
            else if(startingIndex >= 0 && endingIndex >=0){

                builder.append(text);
                builder.setSpan(new StyleSpan(Typeface.BOLD), startingIndex, endingIndex, 0);
            }
        }else{
            return builder.append(text);
        }

        return builder;
  }

আপনি কীভাবে কোডটিতে এটি ব্যবহার করবেন তার একটি উদাহরণ সরবরাহ করতে পারেন?
মাইক্রো

2
@ মাইক্রোআর আপনাকে দুটি স্ট্রিং পাস করতে হবে, দ্বিতীয় স্ট্রিংটিতে প্রথমটির মধ্যে থাকা পাঠ্যের একটি অংশ হওয়া দরকার। যেমন MakeSicationOfTextBold ("এটি কিছু দুর্দান্ত পাঠ্য" "," দুর্দান্ত ")।
লিওন

1
আপনার যদি আপনার পাঠ্য বিবৃতিটি যদি (টেক্সটবোল্ড! = নাল &&! টেক্সটবোল্ড.আইএসপিটি ()) দিয়ে পরিবর্তন করা উচিত
আরদা কারা

2
এই ফাংশনটি আশা করে না যে একাধিকবার স্ট্রাস্টিং পুরো পাঠ্যে আসতে পারে। উদাহরণস্বরূপ "আমার ব্যবহারকারীর নাম নাম" এ এটি দ্বিতীয় "নাম" সাহসী করতে পারে না।
জাদামেক

1
তারপরে এই পদ্ধতির নামটি অবশ্যই মেকআলবোল্ড (পাঠ্য, পাঠ্য টোবোল্ড) করা উচিত।
wtsang02

29

যেমন wtsang02 বলেছেন, এইচটিএমএল ব্যবহার করা একটি ব্যয়বহুল ওভারহেড। কেবল দেশীয় সমাধানটি ব্যবহার করুন। যদি আপনার স্ট্রিংটি সংশোধন করতে না হয় তবে কেবল স্প্যানিয়েবল স্ট্রিং ব্যবহার করুন, স্প্যানিয়েবল স্ট্রিংবিল্ডার নয়।

String boldText = "id";
String normalText = "name";
SpannableString str = new SpannableString(boldText + normalText);
str.setSpan(new StyleSpan(Typeface.BOLD), 0, boldText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(str);

23

আপনি যদি এক্সএমএল থেকে স্ট্রিংটি ব্যবহার করতে চান তবে আপনি এই জাতীয় কিছু করতে পারেন:

স্ট্রিং.এক্সএমএল ("সিডিএটিএ" অংশটি গুরুত্বপূর্ণ, অন্যথায় এটি কাজ করবে না)

<string name="test">
     <![CDATA[
 <b>bold!</b> normal
    ]]>
</string>

বিন্যাস ফাইল

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_gravity="center" />

</FrameLayout>

কোড

textView.text = HtmlCompat.fromHtml(getString(R.string.test), HtmlCompat.FROM_HTML_MODE_LEGACY)

এটি আমার পক্ষে কাজ করে <string name="test"><b>text bold</b> other text</string>। আমি লিখলে কাজ হয় না<![CDATA[
সারা

@ সারা এখন আবার পরীক্ষিত হয়েছে, পিক্সেল 2 এ কিউ জন্য কাজ করে। এখানে, আমি কীভাবে কোটলিনের সাথে এটি কাজ করে তা আপডেট করেছি। অনুগ্রহপূর্বক আবার চেষ্টা করুন.
অ্যান্ড্রয়েড বিকাশকারী

আপনি যদি কাস্টম ফন্ট ব্যবহার করেন তবে এটি গ্রহণযোগ্য উত্তর। নির্মাতাকে কুডুস।
রঘুল সুগাথন

13

এটি সাধারণ উদাহরণস্বরূপ যেমন নির্দিষ্ট পাঠ্যটি বন্ধ করে দেয় <b>"your text here:"</b>

<string name="headquarters">"<b>"Headquarters:"</b>" Mooresville, North Carolina, U.S.</string>

ফলাফল: সদর দফতর: মুরসভিল, নর্থ ক্যারোলিনা, মার্কিন যুক্তরাষ্ট্র


XML থেকে স্ট্রিং ব্যবহার করা হলে এটি কাজ করে। যদি এই স্ট্রিংটিকে প্রোগ্রামগতভাবে বলা হয়, এইচটিএমএল এনকোডিংটি দূরে সরে যায়।
স্টারওয়েভ

11

আপনি যদি কোটলিন ব্যবহার করছেন তবে এটি ব্যবহার করে করা আরও সহজ হয়ে যায় core-ktx, কারণ এটি করার জন্য এটি একটি ডোমেন-নির্দিষ্ট-ভাষা (ডিএসএল) সরবরাহ করে :

val string: SpannedString = buildSpannedString {
    bold {
        append("foo")
    }
    append("bar")     
}

এর দ্বারা সরবরাহিত আরও বিকল্পগুলি হ'ল:

append("Hello There")
bold {
    append("bold")
    italic {
        append("bold and italic")
        underline {
            append("then some text with underline")
        }
    }
}

শেষ পর্যন্ত, আপনি কেবল এটি করতে পারেন:

textView.text = string

10

যদি আপনি একাধিক পাঠ্যকে গা .় করতে চান তবে এখানে আরও ভাল সমাধান। আমি আইটনের কোড উন্নত করেছি। ধন্যবাদ আইটান

public static SpannableStringBuilder makeSectionOfTextBold(String text, String... textToBold) {
    SpannableStringBuilder builder = new SpannableStringBuilder(text);

    for (String textItem :
            textToBold) {
        if (textItem.length() > 0 && !textItem.trim().equals("")) {
            //for counting start/end indexes
            String testText = text.toLowerCase(Locale.US);
            String testTextToBold = textItem.toLowerCase(Locale.US);
            int startingIndex = testText.indexOf(testTextToBold);
            int endingIndex = startingIndex + testTextToBold.length();

            if (startingIndex >= 0 && endingIndex >= 0) {
                builder.setSpan(new StyleSpan(Typeface.BOLD), startingIndex, endingIndex, 0);
            }
        }
    }

    return builder;
}

8

@ Mladj0ni এর উত্তরের ভিত্তিতে, আমি কাজ করার জন্য নীচের কোডটি পেয়েছি। সমস্যাটি হ'ল আপনি যদি স্ট্রিং.ফর্ম্যাট ব্যবহার করেন তবে এটি এইচটিএমএল মার্কআপটি সরিয়ে দেয়, সুতরাং আপনার স্ট্রিং.এক্সএমএলে বন্ধনী চিহ্নগুলি থেকে বাঁচতে হবে:

strings.xml:

<string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>

code.java:

String unspanned = String.format(Locale.US, "%s%s", getResources().getString(R.string. welcome_messages), 99);

Spanned spanned;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
    spanned = Html.fromHtml(unspanned, Html.FROM_HTML_MODE_LEGACY);
} else {
    spanned = Html.fromHtml(unspanned);
}

textView.setText(spanned);

এটি স্প্যানিয়েবল স্ট্রিংবিল্ডারের চেয়ে সহজ। কর্মক্ষমতা হিসাবে, যদি আপনি কেবল একটি স্ট্রিং প্রদর্শন করছেন, তবে ব্যবহারকারী এটি অতিরিক্ত পরিমাণে মিলিসেকেন্ড পার্স করতে পারছেন না।

ডকুমেন্টেশন এখানে দেখুন


& Lt; b> ... & lt </ b> এর জন্য ধন্যবাদ
19

3
public static Spanned getBoldString(String textNotBoldFirst, String textToBold, String textNotBoldLast) {
    String resultant = null;

    resultant = textNotBoldFirst + " " + "<b>" + textToBold + "</b>" + " " + textNotBoldLast;

    return Html.fromHtml(resultant);

}

এটা চেষ্টা কর. এটি অবশ্যই সাহায্য করতে পারে


3

তালিকায় / পুনর্ব্যবহারকারীদের মতো চরের সন্ধানের জন্য স্ট্রিংয়ের প্রথম চরটি তৈরি করুন

r a vi এবং ajay

পূর্বে যেমন হাইলাইট কিন্তু আমি নীচের মত হতে চাই

রবি একটি এনডি অজয় বা রবি এবং একটি জয়

এর জন্য আমি শব্দের দৈর্ঘ্যটি 1 এর সমান হলে অনুসন্ধান করেছি, আমি মূল স্ট্রিংকে শব্দের মধ্যে বিভক্ত করেছিলাম এবং শব্দের শুরু করার অবস্থানটি গণনা করে আমি অক্ষরের সাথে শুরু করে শব্দটি অনুসন্ধান করেছিলাম।

 public static SpannableString colorString(int color, String text, String... wordsToColor) {
    SpannableString coloredString = new SpannableString(text);

    for (String word : wordsToColor) {

        Log.e("tokentoken", "-wrd len-" + word.length());
        if (word.length() !=1) {
            int startColorIndex = text.toLowerCase().indexOf(word.toLowerCase());
            int endColorIndex = startColorIndex + word.length();
            try {
                coloredString.setSpan(new ForegroundColorSpan(color), startColorIndex, endColorIndex,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

            } catch (Exception e) {
                e.getMessage();
            }
        } else {
            int start = 0;

            for (String token : text.split("[\u00A0 \n]")) {
                if (token.length() > 0) {
                    start = text.indexOf(token, start);
                   // Log.e("tokentoken", "-token-" + token + "   --start--" + start);
                    char x = token.toLowerCase().charAt(0);
                    char w = word.toLowerCase().charAt(0);
                   // Log.e("tokentoken", "-w-" + w + "   --x--" + x);

                    if (x == w) {
                        // int startColorIndex = text.toLowerCase().indexOf(word.toLowerCase());
                        int endColorIndex = start + word.length();
                        try {
                            coloredString.setSpan(new ForegroundColorSpan(color), start, endColorIndex,
                                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

                        } catch (Exception e) {
                            e.getMessage();
                        }
                    }
                }
            }

        }

    }

    return coloredString;
}

3

আমি এখানে একটি আরও আপ-টু ডেট সমাধান সরবরাহ করতে এসেছি, কারণ আমি বিদ্যমান উত্তরগুলি নিয়ে সন্তুষ্ট নই। আমার এমন কিছু দরকার ছিল যা অনুবাদিত পাঠ্যগুলির জন্য কাজ করে এবং এর ব্যবহারের পারফরম্যান্স হিট না Html.fromHtml()। আপনি যদি কোটলিন ব্যবহার করছেন তবে এখানে একটি এক্সটেনশন ফাংশন যা সহজেই আপনার পাঠ্যের একাধিক অংশকে সাহসী করে দেবে । এটি ঠিক মার্কডাউনের মতো কাজ করে এবং প্রয়োজনে অন্যান্য মার্কডাউন ট্যাগগুলিকে সমর্থন করার জন্য বাড়ানো যেতে পারে।

val yourString = "**This** is your **string**.".makePartialTextsBold()
val anotherString = getString(R.string.something).makePartialTextsBold()

/**
 * This function requires that the parts of the string that need
 * to be bolded are wrapped in ** and ** tags
 */
fun String.makePartialTextsBold(): SpannableStringBuilder {
    var copy = this
    return SpannableStringBuilder().apply {
        var setSpan = true
        var next: String
        do {
            setSpan = !setSpan
            next = if (length == 0) copy.substringBefore("**", "") else copy.substringBefore("**")
            val start = length
            append(next)
            if (setSpan) {
                setSpan(StyleSpan(Typeface.BOLD), start, length,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            }
            copy = copy.removePrefix(next).removePrefix("**")
        } while (copy.isNotEmpty())
    }
}

3

আপনি এই কোডটি আপনার পাঠ্যের অংশটি সাহসী করতে সেট করতে পারেন। গা the় এইচটিএমএল ট্যাগগুলির মধ্যে যা কিছু আছে তার জন্য এটি এটিকে সাহসী করে তুলবে।

String myText = "make this <b>bold</b> and <b>this</b> too";
textView.setText(makeSpannable(myText, "<b>(.+?)</b>", "<b>", "</b>"));

public SpannableStringBuilder makeSpannable(String text, String regex, String startTag, String endTag) {

            StringBuffer sb = new StringBuffer();
            SpannableStringBuilder spannable = new SpannableStringBuilder();

            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(text);
            while (matcher.find()) {
                sb.setLength(0);
                String group = matcher.group();
                String spanText = group.substring(startTag.length(), group.length() - endTag.length());
                matcher.appendReplacement(sb, spanText);

                spannable.append(sb.toString());
                int start = spannable.length() - spanText.length();

                spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), start, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
            sb.setLength(0);
            matcher.appendTail(sb);
            spannable.append(sb.toString());
            return spannable;
        }

3

wtsang02 উত্তর এটি সম্পর্কে সর্বাধিক ভাল উপায়, যেহেতু, Html.fromHtml ("") এখন অবচয় করা হয়েছে। এখানে আমি কেবল এটি সামান্য কিছুটা বাড়িয়ে তুলছি যাঁর পক্ষে প্রথম শব্দটি গতিময় করার ক্ষেত্রে সমস্যা হচ্ছে, বাক্যটির আকার যাই হোক না কেন।

প্রথমে প্রথম শব্দটি পেতে একটি পদ্ধতি তৈরি করতে দিন:

 private String getFirstWord(String input){

    for(int i = 0; i < input.length(); i++){

        if(input.charAt(i) == ' '){

            return input.substring(0, i);
        }
    }

    return input;
}

এখন বলা যাক আপনার এর মতো দীর্ঘ স্ট্রিং রয়েছে:

String sentence = "friendsAwesomeName@gmail.com want's to be your friend!"

এবং আপনি চান যে আপনার বাক্যটি আপনার অবিস্মরণীয় নাম_গেইমেল.কমের মতো হওয়া উচিত আপনার বন্ধু হতে চান! আপনাকে যা করতে হবে তা হ'ল ফার্স্ট ওয়ার্ডটি পেতে এবং লম্বাটি পেতে প্রথম ওয়ার্ডকে সাহসী করে তুলুন, এরকম কিছু:

String myFirstWord = getFirstWord(sentence);
int start = 0; // bold will start at index 0
int end = myFirstWord.length(); // and will finish at whatever the length of your first word

এখন কেবল wtsang02 এর পদক্ষেপগুলি অনুসরণ করুন :

SpannableStringBuilder fancySentence = new SpannableStringBuilder(sentence);
fancySentence.setSpan(new android.text.style.StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(fancySentence);

এবং এটাই! এখন আপনার দীর্ঘ / সংক্ষিপ্ত বাক্য থেকে যে কোনও আকারের শব্দের বোল্ড করতে সক্ষম হওয়া উচিত। আশা করি এটি কাউকে সাহায্য করবে, শুভ কোডিং :)


3

এটি এর জন্য আমি ব্যবহার করা কোটলিন এক্সটেনশন ফাংশন

/**
 * Sets the specified Typeface Style on the first instance of the specified substring(s)
 * @param one or more [Pair] of [String] and [Typeface] style (e.g. BOLD, ITALIC, etc.)
 */
fun TextView.setSubstringTypeface(vararg textsToStyle: Pair<String, Int>) {
    val spannableString = SpannableString(this.text)
    for (textToStyle in textsToStyle) {
        val startIndex = this.text.toString().indexOf(textToStyle.first)
        val endIndex = startIndex + textToStyle.first.length

        if (startIndex >= 0) {
            spannableString.setSpan(
                StyleSpan(textToStyle.second),
                startIndex,
                endIndex,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            )
        }
    }
    this.setText(spannableString, TextView.BufferType.SPANNABLE)
}

ব্যবহার:

text_view.text="something bold"
text_view.setSubstringTypeface(
    Pair(
        "something bold",
        Typeface.BOLD
    )
)

text_view.text="something bold something italic"
text_view.setSubstringTypeface(
    Pair(
        "something bold ",
        Typeface.BOLD
    ),
    Pair(
        "something italic",
        Typeface.ITALIC
    )
)

2

আপনি বিল্ডারে পৃথকভাবে দুটি স্ট্রিং যুক্ত করতে পারেন, তার মধ্যে একটি স্প্যানড স্ট্রিং, অন্যটি নিয়মিত একটি T এইভাবে আপনাকে সূচিগুলি গণনা করতে হবে না।

val instructionPress = resources?.getString(R.string.settings_press)

val okText = resources?.getString(R.string.ok)
val spannableString = SpannableString(okText)

val spannableBuilder = SpannableStringBuilder()
spannableBuilder.append(instructionPress)
spannableBuilder.append(spannableString, StyleSpan(Typeface.BOLD), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

instructionText.setText(spannableBuilder,TextView.BufferType.SPANNABLE)

2

যদি গা bold় পাঠ্যের অবস্থান স্থির থাকে (উদা: টেক্সটভিউয়ের শুরুতে হয়), তবে একই ব্যাকগ্রাউন্ড সহ দুটি পৃথক পাঠ্যদর্শন ব্যবহার করুন। তারপরে আপনি অন্য পাঠ্যদর্শনটির পাঠ্য স্টাইলকে সাহসী হিসাবে তৈরি করতে পারেন।

এটি একটি একক পাঠ্য ভিউয়ের তুলনায় দ্বিগুণ মেমরির প্রয়োজন হবে তবে গতি বৃদ্ধি পাবে।


1

আমি এর জন্য একটি স্থির পদ্ধতি তৈরি করেছি টেক্সটভিউ এবং সম্পাদনা পাঠের জন্য পাঠ্য বোল্ডের অংশ নির্ধারণের

public static void boldPartOfText(View mView, String contentData, int startIndex, int endIndex){
        if(!contentData.isEmpty() && contentData.length() > endIndex) {
            final SpannableStringBuilder sb = new SpannableStringBuilder(contentData);

            final StyleSpan bss = new StyleSpan(Typeface.BOLD); // Span to make text bold
            final StyleSpan iss = new StyleSpan(Typeface.NORMAL); //Span to make text normal
            sb.setSpan(iss, 0, startIndex, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
            sb.setSpan(bss, startIndex, endIndex, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make first 4 characters Bold
            sb.setSpan(iss,endIndex, contentData.length()-1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

            if(mView instanceof TextView)
               ((TextView) mView).setText(sb);
            else if(mView instanceof EditText)
               ((EditText) mView).setText(sb);

        }
    }

আরও একটি কাস্টমাইজড কোড

  /*typeFaceStyle can be passed as 

    Typeface.NORMAL = 0;
    Typeface.BOLD = 1;
    Typeface.ITALIC = 2;
    Typeface.BOLD_ITALIC = 3;*/

    public static void boldPartOfText(View mView, String contentData, int startIndex, int endIndex,int typeFaceStyle){
        if(!contentData.isEmpty() && contentData.length() > endIndex) {
            final SpannableStringBuilder sb = new SpannableStringBuilder(contentData);

            final StyleSpan bss = new StyleSpan(typeFaceStyle); // Span to make text bold
            final StyleSpan iss = new StyleSpan(Typeface.NORMAL); //Span to make text italic
            sb.setSpan(iss, 0, startIndex, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
            sb.setSpan(bss, startIndex, endIndex, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make first 4 characters Bold
            sb.setSpan(iss,endIndex,contentData.length()-1,Spanned.SPAN_INCLUSIVE_INCLUSIVE);

            if(mView instanceof TextView)
                ((TextView) mView).setText(sb);
            else if(mView instanceof EditText)
                ((EditText) mView).setText(sb);
        }
    }

1

যদি কেউ ডেটা বাইন্ডিং ব্যবহার করে। আমরা এই জাতীয় বাঁধাই সংজ্ঞা দিতে পারি def

@BindingAdapter("html")
fun setHtml(view: TextView, html: String) {
    view.setText(HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY))
}

তারপরে আমরা এটি একটি টেক্সটভিউতে ব্যবহার করতে পারি

app:html="@{@string/bold_text}"

বোল্ড_টেক্সট যেখানে

<string name="bold_text"><![CDATA[Part of text is <b>bold</b>]]></string>

আপনি "সেটএইচটিএমএল" ফাংশনটি কোথায় লিখবেন?
অ্যান্ড্রয়েড বিকাশকারী


ওহ এটা আমার জন্য খুব অদ্ভুত। ধন্যবাদ. আপনি কি এই বিষয়টির নতুনদের জন্য একটি দুর্দান্ত টিউটোরিয়াল / নমুনার সম্পর্কে জানেন?
অ্যান্ড্রয়েড বিকাশকারী

আমি টিউটোরিয়াল জানি না। স্রেফ গুগল "অ্যান্ড্রয়েড বাইন্ডিংএডাপ্টার"
লগক্যাট

1

আপনি একাধিক ভাষায় স্থানীয়করণ পরিচালনা করতে চান এমন একটি উপায় খুঁজে পেয়েছে, এটি করা বিরক্তিকর তবে এটি কাজ করে, ধরা যাক আমরা এটি চাই:

ইংরেজীতে:

কোনও পেমেন্ট নিবন্ধিত নেই

স্প্যানিশ:

কোন খড় প্যাগোস নিবন্ধন নেই

আপনাকে 3 টি স্ট্রিং তৈরি করতে হবে

ইংরেজি:

<string name="start_string">There are no</string>
<string name="middle_string">payments</string>
<string name="end_string">registered.</string>
<string name="string_format" translatable="false">%1$s %2$s %3$s</string>

স্পেনীয়:

<string name="start_string">No hay</string>
<string name="middle_string">pagos</string>
<string name="end_string">registrados</string>

এখন আপনি এটি করতে পারেন:

val startSpanPosition = getString(R.string.start_string).length
val endSpanPosition = startSpanPosition + getString(R.string.middle_string).length
val mySpannableString = SpannableStringBuilder(String.format(getString(R.string.string_format),
        getString(R.string.start_string), getString(R.string.middle_string))), getString(R.string.end_string)))

mySpannableString.setSpan(StyleSpan(Typeface.BOLD), spanStartPosition, endSpanPosition, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

1

আপনার স্ট্রিং সংস্থান

<resources>
   <string name="your_string_resource_name">This is normal text<![CDATA[<b> but this is bold </b>]]> and <![CDATA[<u> but this is underline text</u>]]></string>
</resources> 

আপনার জাভা ক্লাস

yourtextView.setText(getString(R.string.your_string_resource_name));

0

কেস চেক সহ গতিশীল স্ট্রিংয়ের মানগুলির জন্য আমার সম্পূর্ণ সমাধান এখানে।

/**
 * Makes a portion of String formatted in BOLD.
 *
 * @param completeString       String from which a portion needs to be extracted and formatted.<br> eg. I am BOLD.
 * @param targetStringToFormat Target String value to format. <br>eg. BOLD
 * @param matchCase Match by target character case or not. If true, BOLD != bold
 * @return A string with a portion formatted in BOLD. <br> I am <b>BOLD</b>.
 */
public static SpannableStringBuilder formatAStringPortionInBold(String completeString, String targetStringToFormat, boolean matchCase) {
    //Null complete string return empty
    if (TextUtils.isEmpty(completeString)) {
        return new SpannableStringBuilder("");
    }

    SpannableStringBuilder str = new SpannableStringBuilder(completeString);
    int start_index = 0;

    //if matchCase is true, match exact string
    if (matchCase) {
        if (TextUtils.isEmpty(targetStringToFormat) || !completeString.contains(targetStringToFormat)) {
            return str;
        }

        start_index = str.toString().indexOf(targetStringToFormat);
    } else {
        //else find in lower cases
        if (TextUtils.isEmpty(targetStringToFormat) || !completeString.toLowerCase().contains(targetStringToFormat.toLowerCase())) {
            return str;
        }

        start_index = str.toString().toLowerCase().indexOf(targetStringToFormat.toLowerCase());
    }

    int end_index = start_index + targetStringToFormat.length();
    str.setSpan(new StyleSpan(BOLD), start_index, end_index, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return str;
}

যেমন। সম্পূর্ণ স্ট্রিং = "আমি সাহসী"

সিএসই যদি আমি*targetStringToFormat* = "bold" এবং*matchCase* = true

"আমি সাহসী" (সাহসী! = বোল্ড থেকে) প্রত্যাবর্তন করে

CASE II যদি *targetStringToFormat* = "bold"এবং*matchCase* = false

"আমি সাহসী " প্রত্যাবর্তন

আবেদন করতে:

myTextView.setText(formatAStringPortionInBold("I am BOLD", "bold", false))

আশা করি এইটি কাজ করবে!

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