2016-06-07 122 views
-3

我在线性布局(lay)内创建各种textviews。我希望当textview伸出屏幕时,那个文本视图会自动跳到下一行,而不是跳出屏幕。我是一个Android的初学者,并没有得到如何实现它。如何在android中动态创建textviews?

这里是我的代码:

for (int i = 0; i < string.size(); i++) { 
     final TextView txt = new TextView(con); 
     txt.setText(string.get(i)); 
     lay.addView(txt); 
     } 
+0

LinearLayout.LayoutParams LP =新LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ); tv.setLayoutParams(lp); –

+0

对不起@Jitendraramoliya它不工作在我的情况。 – Shubh

+0

什么是您在textView中设置的文字? –

回答

0

尝试这个

TextView txt = new TextView(context); 
txt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
+0

对不起@mdDroid它不工作在我的情况 – Shubh

0
private void populateViews(LinearLayout linearLayout, ArrayList<TextView> views, View extraView) 
{ 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    float mWidth = displaymetrics.widthPixels; 
    extraView.measure(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

    linearLayout.removeAllViews(); 
    int maxWidth = (int) mWidth - extraView.getMeasuredWidth() - 10; 

    linearLayout.setOrientation(LinearLayout.VERTICAL); 

    LinearLayout.LayoutParams params; 
    LinearLayout newLL = new LinearLayout(mContext); 
    newLL.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
    newLL.setGravity(Gravity.LEFT); 
    newLL.setOrientation(LinearLayout.HORIZONTAL); 

    int widthSoFar = 0; 

    for (int i = 0; i < views.size(); i++) 
    { 
     LinearLayout LL = new LinearLayout(mContext); 
     LL.setOrientation(LinearLayout.HORIZONTAL); 
     LL.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); 
     LL.setLayoutParams(new ListView.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 

     views.get(i).measure(0, 0); 
     params = new LinearLayout.LayoutParams(views.get(i).getMeasuredWidth(), LinearLayout.LayoutParams.WRAP_CONTENT); 
     params.setMargins(10, 2, 10, 2); 

     LL.addView(views.get(i), params); 
     LL.measure(0, 0); 
     widthSoFar += views.get(i).getMeasuredWidth(); 
     if (widthSoFar >= maxWidth) 
     { 
      linearLayout.addView(newLL); 

      newLL = new LinearLayout(mContext); 
      newLL.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
      newLL.setOrientation(LinearLayout.HORIZONTAL); 
      newLL.setGravity(Gravity.LEFT); 
      params = new LinearLayout.LayoutParams(LL.getMeasuredWidth(), LL.getMeasuredHeight()); 
      newLL.addView(LL, params); 
      widthSoFar = LL.getMeasuredWidth(); 
     } 
     else 
     { 
      newLL.addView(LL); 
     } 
    } 
    linearLayout.addView(newLL); 
} 

这种方法应该能够帮助你。我早就把这个方法做了很久,所以经过一些修改,你应该可以使用它。第一个参数是LinearLayout,它将成为基本的垂直线性布局,它将充当视图的主要容器。第二个参数是您必须添加的实际视图。在我的情况下,第三个参数是一个像占位符一样使用的图像。

0

你也可以这样添加。

 for (int i = 0; i < string.size(); i++) { 
      LayoutInflater inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View view = (View) inflater.inflate(
        R.layout.Layout_Design, null); 
      TextView txt = (TextView) view.findViewById(R.id.some_text); 
      txt.setText("for runtime change"); 
      layout.addView(view); 
      // layout is linear layout in my case. 
     } 

Layout_Design:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="80dp" 
    android:layout_height="80dp" > 

    <RelativeLayout 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:paddingBottom="5dp" 
     android:paddingLeft="5dp" 
     android:paddingRight="0dp" 
     android:paddingTop="5dp" > 

     <TextView 
      android:id="@+id/some_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="SOme Text" /> 
    </RelativeLayout> 

</FrameLayout>