2010-02-19 30 views
12

Giả sử tôi có một kích thước cụ thể là TextView (không thực sự quan trọng ... fill_parent, 20dip, bất kỳ thứ gì). Có thể cho biết văn bản thu nhỏ/tăng kích thước để phù hợp với không gian có sẵn mà không làm nhiều toán học không?Mở rộng văn bản Định cỡ trong TextView

+0

hãy xem câu trả lời ở đây, hoạt động khá tốt: [nhập liên kết mô tả ở đây] [1] [1]: http://stackoverflow.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds – AllDayAmazing

Trả lời

18

Vâng, nó đơn giản hơn "rất nhiều toán học phức tạp", nhưng có một giải pháp hack tôi sử dụng cho điều này có thể thực hiện được nếu chiều rộng của văn bản không quá xa so với chiều rộng của chế độ xem văn bản.

Nếu chiều rộng của văn bản có thể khác với chiều rộng của TextView, tốt hơn là tìm kiếm nhị phân thay vì tìm kiếm tuyến tính để tìm kích thước phông chữ phù hợp.

Không nói đây là giải pháp lý tưởng, nhưng đó là giải pháp lý tưởng nếu bạn không thường xuyên điều chỉnh việc nhắn tin của mình. Nếu bạn cần phải thường xuyên điều chỉnh văn bản của bạn, nó có thể là tốt hơn để làm một số toán học phức tạp.

+0

+1 Câu trả lời rất hay. Phải là IMO được chấp nhận. –

0

U có thể tính toán giá trị kích thước phông chữ ý tưởng cho một TextView. Đó là kích thước phông chữ sẽ lấp đầy nó mà không quá lớn. Công thức là:

fontSize = (TextView Height) * (width DPI/height DPI)/(Screen Width * Screen Height); 

Chiều rộng và chiều cao DPI có thể được mua lại bởi Trọng phương pháp onConfigurationChanged trong hoạt động của bạn, và sử dụng newConfig.screenWidthDp và newConfig.screenHeightDp.

Kích thước màn hình bằng pixel có thể được mua bằng cách sử dụng chức năng helper sau

// Get Screen Size 
static public Point getScreenSize(Activity aActivity) 
{ 
    Display display = aActivity.getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    return size; 
} 

tôi chỉ tính toán giá trị này khi cần thiết (trong onConfigurationChanged) và đẩy nó vào một số lớp helper tĩnh. Sau đó, khi một TextView cần xác định kích thước phông chữ nào sẽ sử dụng, nó sẽ kéo nó ra khỏi lớp này.

Nó hoạt động, nhưng có thể không phải là giải pháp đơn giản nhất.

+0

Vô ích. Không tính đến độ dài của các ký tự. – AndroidDev

2

Tôi đã thử hầu như tất cả những điều trên và không thành công nhất kể cả phần trên cùng. Đơn giản nhất và hiệu quả nhất tôi tìm thấy là từ emmby nhưng thấy rằng bạn phải thiết lập văn bản ban đầu. Đây là một sự cải tiến về mình mà bạn không cần phải xác định bất kỳ textsize tại tất cả:

final String text = "HELP"; 

    TextView tvFlash = (TextView) findViewById(R.id.tvFlash); 

    DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 

    tvFlash.setText(text); 
    tvFlash.setTextSize(TypedValue.COMPLEX_UNIT_PX, 1); 

    int size = 1; 

    do 
    { 
    float textWidth = tvFlash.getPaint().measureText(text); 

    if (textWidth < width) 
     tvFlash.setTextSize(++size); 
    else 
    { 
     tvFlash.setTextSize(--size); 
     break; 
    } 
    }while(true); 
Các vấn đề liên quan