[android] TextView مع textSize مختلفة


Answers

أعرف أن الوقت قد حان للإجابة ولكن الناس لا يزال لديهم نفس السؤال. حتى أنني كافحت كثيراً في هذا الأمر. افترض أن لديك هذين السلسلتين داخل ملف strings.xml الخاص بك

 <string name="my_text">You will need a to complete this assembly</string>
 <string name="text_sub1">screwdriver, hammer, and measuring tape</string>

تحتاج الآن إلى تحديد نمطين لهما داخل style.xml الخاص بك بنصوص مختلفة

<style name="style0">
    <item name="android:textSize">19sp</item>
    <item name="android:textColor">@color/standout_text</item>
    <item name="android:textStyle">bold</item>
</style>
<style name="style1">
    <item name="android:textSize">23sp</item>
    <item name="android:textColor">@color/standout_light_text</item>
    <item name="android:textStyle">italic</item>
</style>

الآن من ملف جافا الخاص بك تحتاج إلى استخدام spannable لتحميل هذين النمطين والسلاسل على textView واحد

SpannableString formattedSpan = formatStyles(getString(R.string.my_text), getString(R.string.text_sub0), R.style.style0, getString(R.string.main_text_sub1), R.style.style1);
textView.setText(formattedSpan, TextView.BufferType.SPANNABLE);

في ما يلي طريقة formatStyles التي ستُرجع السلسلة المنسقة بعد تطبيق النمط

private SpannableString formatStyles(String value, String sub0, int style0, String sub1, int style1)
{ 
    String tag0 = "{0}";
    int startLocation0 = value.indexOf(tag0);
    value = value.replace(tag0, sub0);

    String tag1 = "{1}";
    int startLocation1 = value.indexOf(tag1);
    if (sub1 != null && !sub1.equals(""))
    { 
        value = value.replace(tag1, sub1);
    } 
    SpannableString styledText = new SpannableString(value);
    styledText.setSpan(new TextAppearanceSpan(getActivity(), style0), startLocation0, startLocation0 + sub0.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    if (sub1 != null && !sub1.equals(""))
    { 
        styledText.setSpan(new TextAppearanceSpan(getActivity(), style1), startLocation1, startLocation1 + sub1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    } 

    return styledText;
}
Question

هل هذا ممكن لتعيين textSize مختلفة في TextView واحد؟ أعلم أنه يمكنني تغيير نمط النص باستخدام:

TextView textView = (TextView) findViewById(R.id.textView);
Spannable span = new SpannableString(textView.getText());
span.setSpan(arg0, 1, 10, arg3);
textView.setText(span)

أعرف نطاق بداية ... نهاية النص أريد تغيير الحجم. ولكن ما الذي يمكنني استخدامه كـ arg0 و arg3 ؟




Links