2011-06-22 41 views
32

Tôi đang gặp khó khăn khi đặt lại thuộc tính maxLines của một TextView theo chương trình.Làm thế nào để vô hiệu hóa các TextView maxLines lập trình?

Chỉ cần thử đặt thành 0 và không hoạt động. -1 treo ứng dụng. Tôi có thể sử dụng giải pháp đơn giản hơn và đặt maxLines thành 5000 nhưng tôi không muốn làm điều đó.

Bất kỳ ý tưởng nào về cách thực hiện điều đó?

CẬP NHẬT

Vâng, tôi đã tìm thấy một vấn đề .. Tôi đã thiết lập Ellipsize cũng ... Tôi chỉ sẽ sử dụng workaround sau:

TextView questionDetail = (TextView) mQuestionDetailHeader.findViewById(R.id.desc); 

questionDetail.setText(mCurrentQuestion.getQuestion()); 
questionDetail.setMaxLines(Integer.MAX_VALUE); //As in the android sourcecode 
questionDetail.setEllipsize(null); 
+0

Bản sao có thể có của [cách đặt lại đường dẫn tối đa của chế độ xem văn bản Android?] (Http://stackoverflow.com/questions/5413394/how-to-reset-android-textview-maxlines) – blahdiblah

Trả lời

0

-1 không được làm hỏng ứng dụng của bạn. Điều này thực sự những gì được sử dụng bên trong TextView theo mặc định:

case com.android.internal.R.styleable.TextView_maxLines: 
      setMaxLines(a.getInt(attr, -1)); 
      break; 

Đoạn mã này cho thấy, rằng khi android:maxLines không được xác định, sau đó mã sử dụng -1 để thiết lập giá trị thông qua setMaxLines() chức năng.


Tôi cũng đã làm đơn đăng ký để xác minh kết luận của mình. Và nó hoạt động tốt mà không bị rơi:

public class HelloWorld extends Activity 
{   

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {  
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity); 

     TextView text = (TextView)findViewById(R.id.text); 
     text.setMaxLines(-1);  
    } 
} 
+0

Nhưng tôi đang có ngoại lệ : E/AndroidRuntime (10296): java.lang.ArrayIndexOutOfBoundsException E/AndroidRuntime (10296): tại android.text.StaticLayout.getLineTop (StaticLayout.java:1240) E/AndroidRuntime (10296): tại android.widget.TextView .getDesiredHeight (TextView.java WEBC472) E/AndroidRuntime (10296): tại android.widget.TextView.getDesiredHeight (TextView.javaanswer443) E/AndroidRuntime (10296): tại android.widget.TextView.onMeasure (TextView. java: 5412) – Valdemar

+4

Chỉ cần nhìn thấy trong sourceCode void riêng applySingleLine (boolean singleLine, boolean applyTransformation) { mSingleLine = singleLine; \t if (singleLine) { \t \t ...} } else { setMaxLines (Integer.MAX_VALUE); setHorizontallyScrolling (false); nếu (applyTransformation) { setTransformationMethod (null); } } } \t Trên thực tế, maxLines là Integer.MAX_VALUE. (setMaxLines (Integer.MAX_VALUE);) – Valdemar

+0

nhận được forece gần nếu tôi sử dụng -1 trong setMaxLines() –

-1

Đối với thiết lập Maxlines cho một mTextView.setMaxLines sử dụng văn bản (0) hoặc bạn phải đo theo chương trình-đồng minh của văn bản chiều cao và nhân với số dòng tối đa Các kết quả nên thiết lập như là chiều cao của TextView

+0

Quá phức tạp. Ngoài ra, thiết lập setMaxLines (0) là làm cho văn bản của tôi biến mất ... – Valdemar

-2

nếu bạn muốn có chỉ là một dòng duy nhất, thì tại sao bạn không sử dụng:

txtView.setSingleLine(true); 
+0

Không phải những gì tôi muốn ... Tôi cần thêm dòng ... :( – Valdemar

+0

sau đó tôi nghĩ rằng bạn có thể sử dụng setMaxLines(). –

41

như vẫn chưa có một câu trả lời đã được phê duyệt - sự thích hợp cách thiết lập lại thuộc tính maxlines của TextView là:

textView.setMaxLines(Integer.MAX_VALUE);

Theo Valdemar 's bình luận và stackoverflow answer này. Sử dụng -1 sẽ gây ra một số ArrayIndexOutOfBoundsException.

Hãy nhớ chỉ ENDMARQEE setEllipsize() thiết lập này sẽ được tôn trọng cho Maxlines> = 2 theo documentation:

Nếu setMaxLines (int) đã được sử dụng để thiết lập hai hay nhiều dòng, END và MARQUEE * chỉ được hỗ trợ (các loại hình elip khác sẽ không làm bất kỳ thứ gì).

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