简体   繁体   中英

How to set the layout_weight of a TextView in code?

I have looked around, but most of them don't make any sense. Some have a third parameter that does not exists in the Android docs, at least anymore. Anybody have any idea how to accomplish this? I have this so far:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            convertView = inflater.inflate(R.layout.day_view_item, parent, false);
        }

        ((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
        if(count == 1) {
            LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);
            TextView create = new TextView(parent.getContext());
            create.setLayoutParams(new LayoutParams(0, 30));
            create.setBackgroundColor(Color.BLUE);
            create.setText("Test");

            layout.addView(create);
            count = count -1;
        }

        return convertView;
    }

I am trying to add it to a LinearLayout in a ListView , hence the method you see in the code. One problem is that the TextView is not showing up when I run it. So I was thinking I need the layout_weight. Though, I am confused about one thing. What values are the width and height parameters of the LayoutParams constructor (dp or px)? I will also add the xml of where I am trying to add it at incase that is helpful:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

<TextView 
    android:id="@+id/day_hour_side"
    android:layout_width="wrap_content"
    android:layout_height="62dp"
    android:text="12AM"
    android:background="#bebebe"
    android:layout_weight="0"
    android:textSize="10dp"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"/>
<LinearLayout 
    android:id="@+id/day_event_layout"
    android:layout_width="0dp"
    android:layout_height="62dp"
    android:layout_weight="1"
    android:paddingTop="1dp"
    android:paddingBottom="1dp"
    android:orientation="horizontal" ></LinearLayout>

Firstly, the LayoutParams constructors use pixels (according to the documentation).

To set the layout_weight programmatically, you need to use LinearLayout.LayoutParams . ViewGroup.LayoutParams does not have a third argument, as you pointer out, but the former does.

Try this:

create.setLayoutParams(new LinearLayout.LayoutParams(0, 30, 1.0f));

ViewGroup.LayoutParams is a set of layout parameters for any View within any kind of layout (since these layouts are all ViewGroup s). When you have a specific layout, for example a LinearLayout , you can use LinearLayout.LayoutParams to get access to things specific to that type of layout. In this case, the layout_weight is particular to LinearLayout s, therefore you must be using the LinearLayout.LayoutParams to access this weight parameter.

You should also remove the layout_weight="0" from the TextView in your XML. If this still doesn't fix it, give your LinearLayout a background color and see if it's even visible at all, then edit your OP with your findings and any changed/new code.

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