Dynamically add textViews to a linearLayout

后端 未结 6 1330
孤独总比滥情好
孤独总比滥情好 2020-11-29 00:23

I read this somewhere here and I totally lost it, but could use some assistance.

My app is pulling the column names from sqlite into an array. I want to create a tex

相关标签:
6条回答
  • 2020-11-29 01:03

    Using ArrayList may help you add any number of TextViews dynamically. You may even want to delete a specific TextView from the parent linear layout. This is a memory efficient way. Following is a snippet.

    ArrayList<TextView> mTextViewList = new ArrayList<>(); //empty list of TextViews
    
    if(condition){ 
        /* can repeat several times*/
    
        //Create a temporary instance which will be added to the list
        final TextView mTextView = new TextView(this);
    
        //Add the instance to the ArrayList
        mTextViewList.add(mTextView);
    
        //Add view to the Parent layout in which you want to add your views
        mLinearLayout.addView(mTextView);
    }
    
    //Change the text of 6th(index:5) TextView which was added
    mTextViewList.get(5).setText("My Text");
    
    //Remove 2nd(index:1) TextView from the parent LinearLayout
    mLinearLayout.removeView(mTextViewList.get(1));
    
    0 讨论(0)
  • 2020-11-29 01:04

    You can add TextViews at runtime by following code below:

    LinearLayout lLayout = (LinearLayout) findViewById(R.id.linearlayout2); // Root ViewGroup in which you want to add textviews
    for (int i = 0; i < 5; i++) {
        TextView tv = new TextView(this); // Prepare textview object programmatically
        tv.setText("Dynamic TextView" + i);
        tv.setId(i + 5);
        lLayout.addView(tv); // Add to your ViewGroup using this method
    }
    
    0 讨论(0)
  • 2020-11-29 01:06

    For me this is a solution.

    // Set Variables

    TextView t;
    ArrayList<TextView> textViewArrayList;
    LayoutInflater layoutInflater;
    LinearLayout ll_itensobrigatorios
    

    // Tell in your onCreate

    layoutInflater = getLayoutInflater();
    createViewItem(new String[]{"Fabio", "Santos", "Programador", "Natal"});
    

    // This create view in layout

        private void createViewItem(String[] nomes) {
                textViewArrayList = new ArrayList<>();
    
                for(int i = 0; i < nomes.length; i++) {
                    View vll = layoutInflater.inflate(R.layout.nomes_tec_item, ll_itensobrigatorios, false);
                    t = (TextView) vll.findViewById(R.id.txt_tec_item);
                    textViewArrayList.add(t);
                    ll_itensobrigatorios.addView(vll);
                }
    
                for(int i = 0; i < textViewArrayList.size(); i++) {
                    textViewArrayList.get(i).setText((i + 1) + " - " + nomes[i]);
                }
    }
    
    0 讨论(0)
  • 2020-11-29 01:09

    So lets say you have created a linearlayout inside a .xml file like this:

    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </LinearLayout>
    

    now the code to add 5 textviews dynamically

      LinearLayout linearLayout= (LinearLayout)findViewById(R.id.linear);      //find the linear layout
        linearLayout.removeAllViews();                              //add this too
        for(int i=0; i<5;i++){          //looping to create 5 textviews
    
            TextView textView= new TextView(this);              //dynamically create textview
            textView.setLayoutParams(new LinearLayout.LayoutParams(             //select linearlayoutparam- set the width & height
                    ViewGroup.LayoutParams.MATCH_PARENT, 48));
            textView.setGravity(Gravity.CENTER_VERTICAL);                       //set the gravity too
            textView.setText("Textview: "+i);                                    //adding text
            linearLayout.addView(textView);                                     //inflating :)
        }
    
    0 讨论(0)
  • 2020-11-29 01:13

    I think this will be useful:

    int j = 0;
    
    context.getSystemService(Context.WINDOW_SERVICE);
    WindowManager manager = (WindowManager) context
                            .getSystemService(Context.WINDOW_SERVICE);
    Display display = manager.getDefaultDisplay();
    
    for (int i = 0; i < tabsize; i++) {
        Tab tab = tabSet.get(i);
        if (i == selectedTabId)
            tab.setSelected(true);
        View view = tab.getView();
    
        TableRow.LayoutParams pCol = new TableRow.LayoutParams();
        pCol.width = display.getWidth() / tabSet.size();
    
        rowBottom.addView(view, pCol);
    }
    
    0 讨论(0)
  • 2020-11-29 01:15

    Something like the following should be what you need:

    final int N = 10; // total number of textviews to add
    
    final TextView[] myTextViews = new TextView[N]; // create an empty array;
    
    for (int i = 0; i < N; i++) {
        // create a new textview
        final TextView rowTextView = new TextView(this);
    
        // set some properties of rowTextView or something
        rowTextView.setText("This is row #" + i);
    
        // add the textview to the linearlayout
        myLinearLayout.addView(rowTextView);
    
        // save a reference to the textview for later
        myTextViews[i] = rowTextView;
    }
    
    0 讨论(0)
提交回复
热议问题