2013-04-15 20 views
5

Tôi đang cố gắng thêm văn bản vào chế độ xem văn bản mà tôi đã đặt chiều rộng là Wrap_content. Tôi đang cố gắng để có được chiều rộng của textview này. Nhưng nó hiển thị 0 trong tất cả các trường hợp. Làm thế nào tôi có thể nhận được chiều rộng của textview sau khi thiết lập các văn bản vào nó.Trong Android cách lấy chiều rộng của Textview được đặt thành Wrap_Content

mã là như sau:

 LinearLayout ll= new LinearLayout(this); 
     ll.setOrientation(LinearLayout.VERTICAL); 
     TextView tv = new TextView(this); 
     tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
     ll.addView(tv); 
     tv.setText("Hello 1234567890-0987654321qwertyuio787888888888888888888888888888888888888888888888888"); 
     System.out.println("The width is == "+tv.getWidth());// result is 0 
     this.setContentView(ll); 

Xin gợi ý. Cảm ơn trước.

Trả lời

1

Khi nào bạn gọi điện thoại này? Nó đã được rút ra màn hình chưa?

Có vẻ như bạn đang gọi số getWidth() quá sớm.

Bạn cũng có thể chụp look at this question.

2

Bạn không thể lấy chiều rộng của Chế độ xem có kích thước động trước khi bố cục được tạo hoàn toàn. Điều đó có nghĩa là không có cách nào bạn có thể nhận được nó trong onCreate(). Một cách là tạo một lớp kế thừa từ TextView và ghi đè onSizeChanged().

6

Chế độ xem có chiều rộng/chiều cao động chỉ nhận được kích thước chính xác sau khi quá trình bố cục hoàn tất (http://developer.android.com/reference/android/view/View.html#Layout).
Bạn có thể thêm OnLayoutChangeListener để TextView của bạn và làm cho nó là kích thước có:

tv.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, 
             int oldLeft, int oldTop, int oldRight, int oldBottom) { 
         final int width = right - left; 
         System.out.println("The width is == " + width);     
    }); 
+0

tương đương với API 8 trở lên là gì? –

+0

Bạn có thể phân lớp TextView và ghi đè onLayout(). Gọi super.onLayout() từ nó và lưu chiều rộng của TextView. Điều đó sẽ làm việc cho bất kỳ cấp API nào. – Const

+0

Lớp yêu cầu cấp API 11 (phút hiện tại là 8): android.view.View.OnLayoutChangeListener –

-1

Bạn nên sử dụng này:

textView.getMeasuredWidth();

0

này làm việc cho tôi:

RelativeLayout.LayoutParams mTextViewLayoutParams = (RelativeLayout.LayoutParams) mTextView.getLayoutParams(); 
mTextView.setText(R.string.text); 
mTextView.measure(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
int width = mShareTip.getMeasuredWidth(); 
//use the width to do what you want 
mShareTip.setLayoutParams(mShareTipLayoutParams); 
0

bạn có thể thử này:

textView.measure(0,0); 
int width = textView.getMeasuredWidth(); 
0

chào sử dụng phương pháp này:

textview.post(new Runnable() { 
    @Override 
    public void run() { 
     int width = textview.getWidth(); 
     int height = textview.getHeight(); 
     textview.setText(String.valueOf(width +","+ height)); 
    } 

});

nguồn: https://gist.github.com/omorandi/59e8b06a6e81d4b8364f

+0

Cảm ơn bạn đã trích đoạn mã này, đoạn mã này có thể cung cấp một số trợ giúp tức thì, có giới hạn. [Giải thích đúng sẽ cải thiện đáng kể giá trị lâu dài của nó] (// meta.stackexchange.com/q/114762/206345) bằng cách hiển thị _why_ đây là giải pháp tốt cho vấn đề và sẽ hữu ích hơn cho người đọc trong tương lai các câu hỏi tương tự khác. Vui lòng [sửa] câu trả lời của bạn để thêm một số giải thích, bao gồm các giả định bạn đã thực hiện. – Mogsdad

Các vấn đề liên quan