একই টেক্সটভিউতে স্ট্রিংয়ের বিভিন্ন ফন্টের আকার


141

আমার textViewএকটি সংখ্যার (ভেরিয়েবল) এবং ক এর সাথে একটি অভ্যন্তর রয়েছে string, আমি কীভাবে এই সংখ্যার চেয়ে এক নম্বর আকার দিতে পারি string? কোড:

TextView size = (TextView)convertView.findViewById(R.id.privarea_list_size);
if (ls.numProducts != null) {
    size.setText(ls.numProducts + " " + mContext.getString(R.string.products));
}

আমি চাই ls.nomproducts এর অন্য পাঠ্যের চেয়ে আলাদা আকার রয়েছে। কিভাবে করবেন?

উত্তর:


360

ব্যবহার করা Spannable String

 String s= "Hello Everyone";
 SpannableString ss1=  new SpannableString(s);
 ss1.setSpan(new RelativeSizeSpan(2f), 0,5, 0); // set size
 ss1.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);// set color
 TextView tv= (TextView) findViewById(R.id.textview);
 tv.setText(ss1); 

স্ন্যাপ শট

এখানে চিত্র বর্ণনা লিখুন

আপনি স্পেস ব্যবহার করে স্ট্রিং বিভক্ত করতে পারেন এবং আপনার প্রয়োজনীয় স্ট্রিংয়ের সাথে স্প্যান যোগ করতে পারেন।

 String s= "Hello Everyone";  
 String[] each = s.split(" ");

এখন আবেদন spanকরতে stringএবং একই জুড়তে textview


সেটস্প্যান () ফিরুন: java.lang.IndexOutOfBoundsException: setSpan (0 ... 5) দৈর্ঘ্য ছাড়িয়ে শেষ হয় 1. এর অর্থ কী?
অ্যাড্রিয়ানা কেরেলি

স্ট্রিংয়ের দৈর্ঘ্য পরীক্ষা করুন। ইনডেক্সআউট অফফাউন্ডস এক্সেপশন: স্প্যান শুরু এবং শেষের জন্য ভুল সূচক অবস্থান নির্দেশ করে। উপরের হ্যালো দৈর্ঘ্য 5 তাই আমি সূচক 0 থেকে 5 পর্যন্ত স্প্যান প্রয়োগ করেছি
রঘুনন্দন

গুগল গ্লাসে নিখুঁতভাবে কাজ করেছেন!
মোহাম্মদ আরমান

2
যে অক্ষরগুলি কেন্দ্রের ছোট ছোট তারা উলম্ব দিকের দিকে সরানোর কোনও উপায় আছে? মূলত সমস্ত অক্ষর আকার নির্বিশেষে উল্লম্বভাবে কেন্দ্রিক হওয়া উচিত।
500865

সেক্ষেত্রে আপনার সম্ভবত দুটি পাঠ্য দর্শন দরকার আছে অন্যথায় আপনার নিজের পাঠ্য দর্শনটি তৈরি করতে হবে
রঘুনন্দন

119

কেবলমাত্র আপনি যদি ভাবছেন যে আপনি কীভাবে একই পাঠ্যদর্শনটিতে একাধিক বিভিন্ন আকার নির্ধারণ করতে পারেন তবে একটি নিখুঁত আকার এবং আপেক্ষিকটি না ব্যবহার করে আপনি এটির AbsoluteSizeSpanপরিবর্তে এটি অর্জন করতে পারেন RelativeSizeSpan

পছন্দসই পাঠ্য আকারের পিক্সেলের মাত্রা পান get

int textSize1 = getResources().getDimensionPixelSize(R.dimen.text_size_1);
int textSize2 = getResources().getDimensionPixelSize(R.dimen.text_size_2);

এবং তারপরে AbsoluteSpanপাঠ্যের উপর ভিত্তি করে একটি নতুন তৈরি করুন

String text1 = "Hi";
String text2 = "there";

SpannableString span1 = new SpannableString(text1);
span1.setSpan(new AbsoluteSizeSpan(textSize1), 0, text1.length(), SPAN_INCLUSIVE_INCLUSIVE);

SpannableString span2 = new SpannableString(text2);
span2.setSpan(new AbsoluteSizeSpan(textSize2), 0, text2.length(), SPAN_INCLUSIVE_INCLUSIVE);

// let's put both spans together with a separator and all
CharSequence finalText = TextUtils.concat(span1, " ", span2);

AbsoluteSizeSpanউদাহরণ সহ ভাল সংযোজন
ইউজিনিক

@ অমিতগার্গ আপনি কি বিস্তারিত বর্ণনা করতে চান?
সউসা

4
আপনি AbsoluteSizeSpan(sizeInDip, true)সরাসরি
ডিপিতে

8

আপনি এইচটিএমএল স্ট্রিং ব্যবহার করে এবং টেক্সটভিউ ব্যবহার করে এইচটিএমএল সেট করতে পারেন
txtView.setText(Html.fromHtml("Your html string here"));

উদাহরণ স্বরূপ :

txtView.setText(Html.fromHtml("<html><body><font size=5 color=red>Hello </font> World </body><html>"));`

1
দুর্দান্ত অবদান! তবে এখন থেকে এইচটিএমএল (এপিআই> = এন) হ্রাস করা হয়েছে। এটি কাজ করার জন্য সামঞ্জস্যতা মোডকে অনুমতি দেওয়ার জন্য এটি করুন: যদি (android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.N) xt txtView.setText (Html.fromHtml ("আপনার এইচটিএমএল স্ট্রিং")) , এইচটিএমএল। FROM_HTML_MODE_LEGACY)); } অন্য {txtView.setText (Html.fromHtml ("আপনার এইচটিএমএল স্ট্রিং")); }
স্ট্যাটোসডটকম 4

"5" এর একক কী? এটা কি ডিপি? এটা কি এসপি? আমি কীভাবে এগুলির কোনওটিতে এটি পরিবর্তন করতে পারি?
অ্যান্ড্রয়েড বিকাশকারী

রঙ এবং পরিবার কাজ করে তবে আকার কাজ করে না।
সি-এন

5

পদ্ধতি 1

public static void increaseFontSizeForPath(Spannable spannable, String path, float increaseTime) {
    int startIndexOfPath = spannable.toString().indexOf(path);
    spannable.setSpan(new RelativeSizeSpan(increaseTime), startIndexOfPath,
            startIndexOfPath + path.length(), 0);
}

ব্যবহার

Utils.increaseFontSizeForPath(spannable, "big", 3); // make "big" text bigger 3 time than normal text

এখানে চিত্র বর্ণনা লিখুন

পদ্ধতি 2

public static void setFontSizeForPath(Spannable spannable, String path, int fontSizeInPixel) {
    int startIndexOfPath = spannable.toString().indexOf(path);
    spannable.setSpan(new AbsoluteSizeSpan(fontSizeInPixel), startIndexOfPath,
            startIndexOfPath + path.length(), 0);
}

ব্যবহার

Utils.setFontSizeForPath(spannable, "big", (int) textView.getTextSize() + 20); // make "big" text bigger 20px than normal text

এখানে চিত্র বর্ণনা লিখুন



3
private SpannableStringBuilder SpannableStringBuilder(final String text, final char afterChar, final float reduceBy) {
        RelativeSizeSpan smallSizeText = new RelativeSizeSpan(reduceBy);
        SpannableStringBuilder ssBuilder = new SpannableStringBuilder(text);
        ssBuilder.setSpan(
                smallSizeText,
                text.indexOf(afterChar),
                text.length(),
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
        );

        return ssBuilder;
    }
------------------------
TextView textView =view.findViewById(R.id.textview);
String s= "123456.24";
textView.setText(SpannableStringBuilder(s, '.', 0.7f));

---------------- ফলাফল ---------------

ফলাফল :

12345. 24


2

এটি করার সর্বোত্তম উপায় হ'ল এইচটিএমএল আপনার পাঠ্যটি সম্পূর্ণ না রেখে এবং সম্পূর্ণরূপে ডায়নামিক উদাহরণ হিসাবে:

  public static String getTextSize(String text,int size) {
         return "<span style=\"size:"+size+"\" >"+text+"</span>";

    }

এবং আপনি রঙের বৈশিষ্ট্য ইত্যাদি ব্যবহার করতে পারেন ... অন্যদিকে যদি:

size.setText(Html.fromHtml(getTextSize(ls.numProducts,100) + " " + mContext.getString(R.string.products));  

1

আমি আমার নিজস্ব ফাংশন লিখেছি যা 2 স্ট্রিং এবং 1 ইনট লাগে (পাঠ্য আকার)

সম্পূর্ণ পাঠ্য এবং পাঠ্যের অংশটি আপনি এর আকার পরিবর্তন করতে চান।

এটি একটি স্প্যানিয়েবল স্ট্রিংবিল্ডারকে রিটার্ন দেয় যা আপনি এটি পাঠ্য দৃশ্যে ব্যবহার করতে পারেন।

  public static SpannableStringBuilder setSectionOfTextSize(String text, String textToChangeSize, int size){

        SpannableStringBuilder builder=new SpannableStringBuilder();

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

            //for counting start/end indexes
            String testText = text.toLowerCase(Locale.US);
            String testTextToBold = textToChangeSize.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 AbsoluteSizeSpan(size, true), startingIndex, endingIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }else{
            return builder.append(text);
        }

        return builder;
    }

0

আপনি যদি আপনার অনুবাদকদের জন্য খুব বেশি বিভ্রান্তি এড়াতে চান তবে আমি স্ট্রিংগুলিতে কেবল একটি প্লেসোল্ডার রাখার উপায় নিয়ে এসেছি, যা কোডে পরিচালিত হবে।

সুতরাং, আপনার কাছে স্ট্রিংগুলিতে এটি রয়েছে:

    <string name="test">
        <![CDATA[
        We found %1$s items]]>
    </string>

এবং আপনি চাইছেন যে স্থানধারীর পাঠ্যের একটি আলাদা আকার এবং রঙ থাকতে পারে, আপনি এটি ব্যবহার করতে পারেন:

        val textToPutAsPlaceHolder = "123"
        val formattedStr = getString(R.string.test, "$textToPutAsPlaceHolder<bc/>")
        val placeHolderTextSize = resources.getDimensionPixelSize(R.dimen.some_text_size)
        val placeHolderTextColor = ContextCompat.getColor(this, R.color.design_default_color_primary_dark)
        val textToShow = HtmlCompat.fromHtml(formattedStr, HtmlCompat.FROM_HTML_MODE_LEGACY, null, object : Html.TagHandler {
            var start = 0
            override fun handleTag(opening: Boolean, tag: String, output: Editable, xmlReader: XMLReader) {
                when (tag) {
                    "bc" -> if (!opening) start = output.length - textToPutAsPlaceHolder.length
                    "html" -> if (!opening) {
                        output.setSpan(AbsoluteSizeSpan(placeHolderTextSize), start, start + textToPutAsPlaceHolder.length, 0)
                        output.setSpan(ForegroundColorSpan(placeHolderTextColor), start, start + textToPutAsPlaceHolder.length, 0)
                    }
                }
            }
        })
        textView.text = textToShow

এবং ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

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