রানটাইমের সময়ে অ্যান্ড্রয়েডে বোল্ড টেক্সটের অংশটি কীভাবে তৈরি করবেন?


100

একজন ListViewআমার আবেদন মত অনেক স্ট্রিং উপাদানগুলি নেই name, experience, date of joining, ইত্যাদি আমি শুধু করতে চাই nameসাহসী। সমস্ত স্ট্রিং উপাদান একক হবে TextView

আমার এক্সএমএল:

<ImageView
    android:id="@+id/logo"
    android:layout_width="55dp"
    android:layout_height="55dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_marginTop="15dp" >
</ImageView>

<TextView
    android:id="@+id/label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/logo"
    android:padding="5dp"
    android:textSize="12dp" >
</TextView>

তালিকা কোড আইটেমের পাঠ্যদর্শনটি সেট করার জন্য আমার কোড:

holder.text.setText(name + "\n" + expirience + " " + dateOfJoininf);

উত্তর:


232

বলুন আপনার একটি TextViewফোন আছে etx। তারপরে আপনি নিম্নলিখিত কোডটি ব্যবহার করবেন:

final SpannableStringBuilder sb = new SpannableStringBuilder("HELLOO");

final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); // Span to make text bold
final StyleSpan iss = new StyleSpan(android.graphics.Typeface.ITALIC); //Span to make text italic
sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make first 4 characters Bold 
sb.setSpan(iss, 4, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make last 2 characters Italic

etx.setText(sb);


4
জামারিনের জন্য, এগুলি ব্যবহার করুনvar bss = new StyleSpan(Android.Graphics.TypefaceStyle.Bold);
এলিজাবেথ

জামারিনের জন্য,etx.TextFormatted = sb;
দারিয়াস

28

ইমরান রানার উত্তরের ভিত্তিতে, একাধিক ভাষার (যেখানে সূচকগুলি পরিবর্তনশীল) সমর্থন করার জন্য StyleSpanআপনাকে বেশ কয়েকটি ভাষায় TextViewএস প্রয়োগ করতে হবে তবে এখানে একটি সাধারণ, পুনরায় ব্যবহারযোগ্য পদ্ধতি :

void setTextWithSpan(TextView textView, String text, String spanText, StyleSpan style) {
    SpannableStringBuilder sb = new SpannableStringBuilder(text);
    int start = text.indexOf(spanText);
    int end = start + spanText.length();
    sb.setSpan(style, start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    textView.setText(sb);
}

এটি একটি Activityমত এটি ব্যবহার করুন :

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    StyleSpan boldStyle = new StyleSpan(Typeface.BOLD);
    setTextWithSpan((TextView) findViewById(R.id.welcome_text),
        getString(R.string.welcome_text),
        getString(R.string.welcome_text_bold),
        boldStyle);

    // ...
}

strings.xml

<string name="welcome_text">Welcome to CompanyName</string>
<string name="welcome_text_bold">CompanyName</string>

ফলাফল:

কোম্পানীনেমে আপনাকে স্বাগতম


12

এখানে প্রদত্ত উত্তরগুলি সঠিক, তবে লুপে বলা যাবে না কারণ StyleSpanঅবজেক্টটি একটি একক সুস্পষ্ট স্প্যান (একাধিক স্প্যানগুলিতে প্রয়োগ করা যায় এমন স্টাইল নয়)। setSpanএকই গা bold়ের সাথে একাধিকবার কল করা একটি বোল্ড স্প্যানStyleSpan তৈরি করতে পারে এবং কেবল প্যারেন্ট স্প্যানে এটিকে ঘুরিয়ে দেয়।

আমার ক্ষেত্রে (অনুসন্ধানের ফলাফলগুলি প্রদর্শন করা), আমাকে সমস্ত অনুসন্ধানের কীওয়ার্ডের সমস্ত দৃষ্টান্ত সাহসী প্রদর্শিত হওয়া দরকার। এটি আমিই করেছি:

private static SpannableStringBuilder emboldenKeywords(final String text,
                                                       final String[] searchKeywords) {
    // searching in the lower case text to make sure we catch all cases
    final String loweredMasterText = text.toLowerCase(Locale.ENGLISH);
    final SpannableStringBuilder span = new SpannableStringBuilder(text);

    // for each keyword
    for (final String keyword : searchKeywords) {
        // lower the keyword to catch both lower and upper case chars
        final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH);

        // start at the beginning of the master text
        int offset = 0;
        int start;
        final int len = keyword.length(); // let's calculate this outside the 'while'

        while ((start = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) {
            // make it bold
            span.setSpan(new StyleSpan(Typeface.BOLD), start, start+len, SPAN_INCLUSIVE_INCLUSIVE);
            // move your offset pointer 
            offset = start + len;
        }
    }

    // put it in your TextView and smoke it!
    return span;
}

মনে রাখবেন যে উপরের কোডটি ডাবল-বোল্ডিং এড়াতে যথেষ্ট স্মার্ট নয় যদি একটি কীওয়ার্ড অন্যটির একটি স্ট্রিং থাকে। উদাহরণস্বরূপ, আপনি " ফিস্টি সিতে ফিশ" এর ভিতরে "ফিশ ফাই" অনুসন্ধান করলে এটি "ফিশ" একবার সাহসী করবে এবং তারপরে "ফাই" অংশটি তৈরি করবে। ভাল জিনিসটি হ'ল অদক্ষ এবং কিছুটা অনাকাঙ্ক্ষিত হওয়ার পরেও এটির দৃষ্টিভঙ্গি দেখা দেবে না কারণ আপনার প্রদর্শিত ফলাফলটি এখনও এর মতো দেখাবে

ফাই স্টাইল সমুদ্রের ফিস এস


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

8

আপনি কোটলিন এবং এর buildSpannedStringথেকে এক্সটেনশন ফাংশন ব্যবহার করে এটি করতে পারেনcore-ktx

 holder.textView.text = buildSpannedString {
        bold { append("$name\n") }
        append("$experience $dateOfJoining")
 }

5

আপনি যদি পাঠ্য অংশটি বোল্ড করতে চান তার আগে আপনি যদি ঠিকঠাক দৈর্ঘ্যটি জানেন না, বা এমনকি আপনি পাঠ্যের দৈর্ঘ্যটি বোল্ড হওয়ার জন্য জানেন না তবে আপনি সহজেই নীচের মতো এইচটিএমএল ট্যাগ ব্যবহার করতে পারেন:

yourTextView.setText(Html.fromHtml("text before " + "<font><b>" + "text to be Bold" + "</b></font>" + " text after"));

0

সমর্থন মামলায় এবং ডায়াক্রিটিক্সের সংবেদনশীলতা সম্পর্কে ফ্রাইডারের উত্তর বাড়ানো।

public static String stripDiacritics(String s) {
        s = Normalizer.normalize(s, Normalizer.Form.NFD);
        s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
        return s;
}

public static void setTextWithSpan(TextView textView, String text, String spanText, StyleSpan style, boolean caseDiacriticsInsensitive) {
        SpannableStringBuilder sb = new SpannableStringBuilder(text);
        int start;
        if (caseDiacriticsInsensitive) {
            start = stripDiacritics(text).toLowerCase(Locale.US).indexOf(stripDiacritics(spanText).toLowerCase(Locale.US));
        } else {
            start = text.indexOf(spanText);
        }
        int end = start + spanText.length();
        if (start > -1)
            sb.setSpan(style, start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        textView.setText(sb);
    }

0

আপনি যদি @ স্রিংস / আপনার_ স্ট্রিং টীকাগুলি ব্যবহার করছেন তবে স্ট্রিং.এক্সএমএল ফাইল অ্যাক্সেস করুন এবং <b></b>আপনি যে পাঠ্যটি চান তার অংশে ট্যাগটি ব্যবহার করুন ।

উদাহরণ:

    <string><b>Bold Text</b><i>italic</i>Normal Text</string>

-1

আমি সিডিএটিএ সহ স্ট্রিং.এক্সএমএল ফাইল ব্যবহার করার পরামর্শ দিচ্ছি

<string name="mystring"><![CDATA[ <b>Hello</b> <i>World</i> ]]></string>

তারপরে জাভা ফাইলটিতে:

TextView myTextView = (TextView) this.findViewById(R.id.myTextView);
myTextView.setText(Html.fromHtml( getResources().getString(R.string.mystring) ));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.