2011-07-05 38 views
10

Tôi đang triying để sử dụng bố cục động cho phần bình luận của dự án của tôi nhưng khi tôi giải quyết textview năng động, đầu ra chỉ xuất hiện ở đầu màn hình. Và nó đặt đầu ra so với các kết quả đầu ra khácDynamic TextView trong bố cục tương đối

RelativeLayout ll=(RelativeLayout) findViewById(R.id.rl); 
     for(int i = 0; i < 20; i++) { 
     TextView cb = new TextView(this); 
     cb.setText("YORUMLAR"+yorum[0]+i); 

     cb.setTextSize(30); 
      ll.addView(cb); 

     } 

Vậy làm cách nào tôi có thể đặt đầu ra ở dưới cùng của màn hình một cách tuyến tính.

+1

... bằng cách đặt các thuộc tính tương đối thích hợp cho textView của bạn; bây giờ, bạn chỉ cần thiết lập văn bản, không có vị trí, và mặc định nó ở trên cùng của màn hình. – Adinia

Trả lời

21

Bạn nên sử dụng LinearLayout để tự động thêm TextView sau một thiết bị khác.


Giả sử bạn không thể sống thiếu RelativeLayout, bạn sẽ cần phải tự động tạo id cho tất cả TextView bạn tạo để đưa một cái nhìn dưới khác. Dưới đây là ví dụ:

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

     RelativeLayout layout = (RelativeLayout)findViewById(R.id.layout); 

     Random rnd = new Random(); 
     int prevTextViewId = 0;  
     for(int i = 0; i < 10; i++) 
     {      
      final TextView textView = new TextView(this); 
      textView.setText("Text "+i);  
      textView.setTextColor(rnd.nextInt() | 0xff000000);    

      int curTextViewId = prevTextViewId + 1; 
      textView.setId(curTextViewId); 
      final RelativeLayout.LayoutParams params = 
       new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, 
               RelativeLayout.LayoutParams.WRAP_CONTENT); 

      params.addRule(RelativeLayout.BELOW, prevTextViewId); 
      textView.setLayoutParams(params); 

      prevTextViewId = curTextViewId; 
      layout.addView(textView, params); 
     }    
    }  
} 

enter image description here

+0

Cảm ơn một triệu! Tôi có một con trỏ có thể có giá trị null. Mọi người ghét nhìn thấy những thứ trống vì vậy tôi đã tạo ra một textview động bằng cách sử dụng "nếu không null, làm điều này" báo cáo sau đó sử dụng ví dụ của bạn để làm cho các textview ID động cho mỗi một trong đó cần phải được xem. Điều quan trọng là đặt curTextViewId = prevTextViewID + 1 trong mỗi câu lệnh if ở cuối mỗi câu lệnh, hãy chắc chắn đặt prevTextViewId = curTextViewId để câu lệnh if tiếp theo nhận được prevTextViewId mới. Cảm ơn! – Opy

2

Bạn đã cung cấp vị trí của điểm mới được bổ sung của bạn. Như @Adinia cho biết, không có vị trí, nó sẽ được căn chỉnh theo mặc định. Vì vậy, bạn có thể sử dụng đoạn mã sau để làm điều đó với RelativeLayout;

RelativeLayout containerLayout = (RelativeLayout) findViewById(R.id.container); 

for (int i = 0; i < 20; i++) { 

    TextView dynaText = new TextView(this); 

    dynaText.setText("Some text " + i); 
    dynaText.setTextSize(30); 

    // Set the location of your textView. 
    dynaText.setPadding(0, (i * 30), 0, 0); 

    containerLayout.addView(dynaText); 
} 

Nếu bạn muốn hiển thị nhiều lần xem văn bản sau cái kia, thì bạn nên đi với LinearLayout.

1

Bạn cũng có thể thêm Chế độ xem văn bản động vào bố cục tương đối. Ở đây với tôi đã đính kèm một số mã này có thể giúp bạn.

RelativeLayout ll=(RelativeLayout) findViewById(R.id.rl); 
    for(int i = 0; i < 20; i++) 
    { 
     TextView cb = new TextView(this); 
     cb.setText("YORUMLAR"+yorum[0]+i); 
     cb.setTextSize(30); 
     cb.setId(2000+i); 
     RelativeLayout.LayoutParams TextViewLayoutParams = new RelativeLayout.LayoutParams(100,100); 
     if (i != 0)DispViewLayoutParams.addRule(RelativeLayout.BELOW, 2000 - (i-1)); 
     ll.addView(cb,TextViewLayoutParams); 
    } 
Các vấn đề liên quan