简体   繁体   中英

How to align the TextView and EditText into horizontal LinearLayout programmatically?

Here is what I have:

LinearLayout horizontalLL = new LinearLayout(thisActivity);
horizontalLL.setOrientation(LinearLayout.HORIZONTAL);
horizontalLL.setLayoutParams(new LinearLayoutCompat.LayoutParams(LinearLayoutCompat.LayoutParams.MATCH_PARENT, LinearLayoutCompat.LayoutParams.WRAP_CONTENT,1));

TextView captionTV = new TextView(thisActivity);
captionTV.setText(element.description);

captionTV.setLayoutParams(new LinearLayoutCompat.LayoutParams(LinearLayoutCompat.LayoutParams.WRAP_CONTENT, LinearLayoutCompat.LayoutParams.WRAP_CONTENT));
editText.setLayoutParams(new LinearLayoutCompat.LayoutParams(LinearLayoutCompat.LayoutParams.WRAP_CONTENT, LinearLayoutCompat.LayoutParams.WRAP_CONTENT,0.6f));

horizontalLL.addView(captionTV);
horizontalLL.addView(editText);

LL.addView(horizontalLL);

but the result is bad: the editText is still very short and does not fill the horizontal linear layout. I've tried to set the weight for captionTV too, but still no result.

Please do the change as below

editText.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT,0.6f));

You can use LinearLayout.LayoutParams.MATCH_PARENT or LinearLayout.LayoutParams.WRAP_CONTENT instead of 0 here.

If possible replace all LinearLayoutCompat to LinearLayout .

Try the following code, if you want that your EditText automatically cover the remaining space :

LinearLayout horizontalLL = new LinearLayout(this);
        horizontalLL.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        horizontalLL.setOrientation(LinearLayout.HORIZONTAL);


        TextView captionTV = new TextView(this);
        captionTV.setText("element.description");

        captionTV.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        editText.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT , 1));

        horizontalLL.addView(captionTV);
        horizontalLL.addView(editText);

        LL.addView(horizontalLL);

You need to use below code :

 LinearLayout ll1 = (LinearLayout)findViewById(R.id.ll1);

        android.widget.LinearLayout horizontalLL = new android.widget.LinearLayout(this);
        horizontalLL.setOrientation(android.widget.LinearLayout.HORIZONTAL);
        horizontalLL.setLayoutParams(new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, 150,1f));

        TextView captionTV = new TextView(this);
        captionTV.setText("Hello textview ");
        captionTV.setTextColor(Color.BLUE);
        captionTV.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT,0.4f));
        horizontalLL.addView(captionTV);

        EditText editText = new EditText(this);
        editText.setText("Hello edittext ");
        editText.setTextColor(Color.BLUE);
        editText.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT,0.6f));

        horizontalLL.addView(editText);
        ll1.addView(horizontalLL);

because in XML weight define like below:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="1.0">
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content" 
                android:layout_weight="0.40"
                android:text="test"/>
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.60"
                android:text="test"/>
        </LinearLayout> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM