web-dev-qa-db-ja.com

同じTextView内の文字列の異なるフォントサイズ

内部にtextViewと数字(変数)とstringがありますが、どのようにしてstringよりも大きいサイズの数字を1つ与えることができますか?コード:

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

Ls.numproductsのサイズが残りのテキストと異なることを望みます。実行する方法?

122
Adriana Carelli

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

スナップショット

enter image description here

スペースを使用して文字列を分割し、必要な文字列にスパンを追加できます。

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

spanstringに適用し、textviewに追加します。

323
Raghunandan

同じテキストビューで複数の異なるサイズを設定する方法を疑問に思っている場合でも、相対サイズではなく絶対サイズを使用する場合は、AbsoluteSizeSpanの代わりに RelativeSizeSpan を使用してそれを実現できます。

目的のテキストサイズのピクセル単位で寸法を取得するだけです

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);
103
Joao Sousa

これを行うには、html文字列を使用して、htmlをTextviewに設定します。
txtView.setText(Html.fromHtml("Your html string here"));

例えば ​​:

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

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

enter image description here

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

enter image description here

3
Phan Van Linh

spannableStringbuilder を試してください。これを使用して、複数のフォントサイズの文字列を作成できます。

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

1
Anandharaj R

それを行う最善の方法は、テキストを部分文字列なしで完全に動的にするHtmlです。たとえば:

  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
Garci

2つの文字列と1つのint(テキストサイズ)を使用する独自の関数を作成しました

フルテキストと、サイズを変更するテキストの一部。

テキストビューで使用できるSpannableStringBuilderを返します。

  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;
    }
1
Ali Asadi