115

Tôi có một textViewbên trong với một số (biến) và a string, làm thế nào tôi có thể cho kích thước số một lớn hơn string? mật mã:

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

Tôi muốn ls.numproducts có kích thước khác với phần còn lại của văn bản. Làm thế nào để làm gì?

|
  • Vì tôi không đủ uy tín để nhận xét về câu trả lời của Raghunandan, hãy để tôi chia sẻ một câu hỏi như một câu trả lời riêng cho bất kỳ ai gặp phải câu hỏi này bây giờ rằng thiết kế vật liệu đã bị loại bỏ: Có vẻ như Spannables không hoạt động với textAllCaps=truethiết lập trên View you đang áp dụng Spannable cho. (xem tại đây: stackoverflow.com/questions/29007746/ trên )

    – Ngô Bích Như 07:41:01 26/01/2017
308

Sử dụng một 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); 

Chụp nhanh

Bạn có thể phân tách chuỗi bằng cách sử dụng khoảng trắng và thêm span vào chuỗi bạn yêu cầu.

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

Bây giờ áp dụng spancho stringvà thêm tương tự textview.

|
99

Chỉ trong trường hợp bạn đang tự hỏi làm thế nào bạn có thể đặt nhiều kích thước khác nhau trong cùng một chế độ xem văn bản, nhưng sử dụng kích thước tuyệt đối và không phải là kích thước tương đối, bạn có thể đạt được điều đó bằng cách sử dụng AbsoluteSizeSpanthay vì a RelativeSizeSpan.

Chỉ cần lấy kích thước tính bằng pixel của kích thước văn bản mong muốn

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

và sau đó tạo một cái mới AbsoluteSpandựa trên văn bản

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

Bạn có thể hoàn thành việc này bằng chuỗi html và đặt html thành Textview bằng cách sử dụng
txtView.setText(Html.fromHtml("Your html string here"));

Ví dụ :

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

    cỡ chữ không hoạt động

    – Hoàng Hồng Phúc 20:13:41 03/10/2013
  • 1

    Đóng góp tốt đẹp! Nhưng từ giờ trở đi (API> = N) không được chấp nhận. Để làm việc này, hãy làm điều này để cho phép chế độ tương thích: if (android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.N) {txtView.setText (Html.fromHtml ("chuỗi html của bạn")) , Html.FROM cưới_MODE_LEGACY)); } other {txtView.setText (Html.fromHtml ("chuỗi html của bạn")); }

    – Đỗ Minh Quang 04:24:48 01/07/2016
2

Phương pháp 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);
}

sử dụng

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

Phương pháp 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);
}

sử dụng

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

|
1

Cách tốt nhất để làm điều đó là Html không có chuỗi con văn bản của bạn và hoàn toàn tự động Ví dụ:

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

    }

và bạn có thể sử dụng màu do vv ... nếu mặt khác:

size.setText(Html.fromHtml(getTextSize(ls.numProducts,100) + " " + mContext.getString(R.string.products));  
|
1
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));

---------------- Kết quả ---------------

Kết quả :

12345. 24

|
1

Tôi đã viết hàm riêng của mình trong đó có 2 chuỗi và 1 int (kích thước văn bản)

Toàn văn và một phần của văn bản bạn muốn thay đổi kích thước của nó.

Nó trả về một SpannableStringBuilder mà bạn có thể sử dụng nó trong chế độ xem văn bản.

  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

Hãy thử spannableStringbuilder . Sử dụng điều này, chúng ta có thể tạo chuỗi với nhiều kích thước phông chữ.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.