TextView - thiết lập kích thước văn bản theo chương trình dường như không hoạt động


140

Tôi đang sử dụng Eclipse Indigo, thử nghiệm trên 2 trình giả lập (2.2 và 3.0).

đoạn mã dưới đây cho thấy những gì tôi đang kiểm tra, tuy nhiên, việc đặt kích thước văn bản sẽ không hiển thị gì trên màn hình khi cố gắng chạy trình giả lập. (nếu tôi nhận xét kích thước văn bản, văn bản hiển thị với màu đỏ). Tôi nghĩ rằng bằng cách nào đó nhật thực không xây dựng lại mã nhưng tôi đã thêm dòng mã để thêm nền màu xanh và nó đã hoạt động. Tôi đã thử đặt kích thước văn bản sau khi đặt văn bản mà vẫn không thành công. mã dưới đây. Cảm ơn bạn đã giúp đỡ! (từ chối trách nhiệm) - tôi đang cố gắng tránh xa xml. Là tôi đã biết java tôi không muốn phụ thuộc vào điều đó.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

Câu trả lời:


19

Kích thước văn bản 2 sẽ thực tế vô hình. Hãy thử nó với ít nhất 14. BTW, sử dụng xml có rất nhiều lợi thế và sẽ giúp cuộc sống của bạn dễ dàng hơn một khi bạn cần làm bất cứ điều gì phức tạp hơn 'Xin chào thế giới'.


Tôi sẽ thử nó với 14. Như tôi đã nói trong bài đầu tiên - ngay cả khi 2 quá nhỏ, điều đó không nên làm cho màn hình của tôi trống phải không? Tôi đoán rằng tôi đã đọc nó như một tỷ lệ vượt quá những gì văn bản đã có thay vì chỉ đơn giản là đặt kích thước. - tôi sẽ xem nhưng dù sao tôi cũng sẽ hỏi - kích thước mặc định là gì? dù sao cũng cảm ơn.
cspam

btw - vâng tôi nhận ra xml có thể có lợi thế của nó nhưng tôi không có kinh nghiệm với nó. Vâng tôi biết nó có thể dễ học. Vì tôi đã quen thuộc với java, tôi chỉ nghĩ rằng nó thực sự hữu ích khi làm quen với càng nhiều lớp càng tốt. Có vẻ như việc sử dụng loại XML ẩn giấu rất nhiều điều đó từ bạn.
cspam

Nó không che giấu nó - đó là cùng một lớp với cùng tham số. Mất một thời gian để có thể dịch giữa hai thứ, nhưng nó thực sự khá hiệu quả. Như một phần thưởng, nếu bạn xác định các khung nhìn trong XML, hệ thống sẽ xử lý các kích thước, mật độ và hướng màn hình khác nhau, mà không cần thay đổi mã của bạn, chỉ cần các tệp bố cục.
Nikolay Elenkov

bạn có thể thay đổi bố cục và định hướng trong thời gian chạy dựa trên bất kỳ số lượng các yếu tố?
cspam

Đó là một câu hỏi rất rộng, nhưng, tóm lại, vâng. Ngay cả khi bạn xác định UI của mình trong XML, bạn vẫn có thể thêm / xóa các khung nhìn trong thời gian chạy. Bạn cũng có thể ghi đè hành vi mặc định và tự xử lý các thay đổi hướng.
Nikolay Elenkov

533

phương thức TextView.setTextSize(int unit , float size);có hai tham số.

Thử cái này :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

tham khảo nàynày .

CẬP NHẬT: Bây giờ setTextSize(float size)sẽ tự động đặt kích thước văn bản theo scaled pixelđơn vị "". không cần đề cập đến COMPLEX_UNITinks theo cách thủ công. Tham khảo tài liệu .


36
Đây là câu trả lời chính xác. Cụ thể hơn: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
Brill Pappin

2
Cảm ơn rât nhiều!
DmitryKanunnikoff

72

Điều này đã khắc phục vấn đề cho tôi. Tôi có kích thước phông chữ thống nhất trên tất cả các thiết bị.

 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.font));

Là số thống nhất R.dimen.font hoặc bạn có các kích cỡ khác nhau cho các thiết bị khác nhau?
The_Martian

Trong trường hợp của tôi, tôi đã khai báo phông chữ trong các tệp dimen.xml trong các thư mục này: giá trị, giá trị-sw600dp, giá trị-sw720dp với các giá trị cụ thể.
Vikas

Thật kỳ lạ khi TextView biến mất sau khi textView.setTextSize (R.dimen.text_size_max) được gọi, nhưng sử dụng phương thức của bạn, nó hoạt động.
li2

Làm việc cho tôi. Cảm ơn bạn!
apurv thakkar

24

Hiện tại, setTextSize(float size)phương thức sẽ hoạt động tốt vì vậy chúng tôi không cần sử dụng phương pháp khác để thay đổi kích thước văn bản

mã nguồn android.widget.TextView.java

/**
 * Set the default text size to the given value, interpreted as "scaled
 * pixel" units.  This size is adjusted based on the current density and
 * user font size preference.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

Ví dụ sử dụng

textView.setTextSize(20); // set your text size = 20sp


12

Vui lòng xem liên kết này để biết thêm thông tin về cách đặt kích thước văn bản trong mã. Về cơ bản nó nói:

công khai void setTextSize (đơn vị int, kích thước float)

Vì: API Cấp 1 Đặt kích thước văn bản mặc định thành một đơn vị và giá trị nhất định. Xem TypedValue để biết các đơn vị kích thước có thể. Các thuộc tính XML có liên quan

android: textSize Tham số

đơn vị Đơn vị kích thước mong muốn.
kích thước Kích thước mong muốn trong các đơn vị nhất định.


1
Tôi chỉ kiểm tra hai lần trong Eclipse trong mã của mình và theo intellisense tôi thực sự có 2 tùy chọn để setTextSize, setTextSize (kích thước float), setTextSize (int unit, float size). Các tài liệu mà bạn liên kết xác nhận điều này.
cspam

Phải - bạn đã thử chưa? Ngoài ra Nikolay nói 2 sẽ là CÁCH để xem nhỏ, hãy thử tăng dần.
Jack

đúng nhưng vấn đề là, khi tôi cố gắng làm theo cách tôi có bây giờ, văn bản thậm chí không hiển thị. Nó chỉ là một màn hình trống. Ngay cả khi 2 không đáng chú ý tại sao màn hình trống?
cspam

Nó không trống. Nếu bạn trông thật gần, bạn có thể thấy các pixel nhỏ màu đỏ :). Tăng kích thước dần dần để xem.
Nikolay Elenkov

Và nhân tiện, setTextSize (float) tương đương với setTextSize (COMPLEX_UNITinks, float).
Nikolay Elenkov

10

Trong trường hợp của tôi đã sử dụng phương pháp này :

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

Ở đây Đặt TextSize TextSize theo lập trình :

textView.setTextSize(pxFromDp(18, YourActivity.this));

Hãy tiếp tục tận hưởng :)


Xin chào @Dhruv Raval, tôi đang chọn để có thể điều chỉnh kích thước phông chữ trong dự án của mình, trong trường hợp giá trị 18 này hợp lệ với bất kỳ mật độ màn hình nào, hay tôi nên tạo thứ nguyên cho mỗi màn hình?
Armando Marques Sobrinho
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.