如何在代码中设置TextView的layout_weight?

时间:2012-08-04 03:00:27

标签: android textview layoutparams

我环顾四周,但大多数都没有任何意义。有些第三个参数在Android文档中不存在,至少不再存在。任何人都知道如何做到这一点?到目前为止我有这个:

@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;
    }

我正在尝试将其添加到LinearLayout中的ListView,因此您在代码中看到的方法。一个问题是当我运行它时TextView没有显示出来。所以我在想我需要layout_weight。虽然,我对一件事感到困惑。 LayoutParams构造函数(dp或px)的宽度和高度参数是什么值?我还将添加xml我试图在incase添加它的地方有用:

<?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>

1 个答案:

答案 0 :(得分:4)

首先,LayoutParams构造函数使用像素(根据文档)。

要以编程方式设置layout_weight,您需要使用LinearLayout.LayoutParams。当你指出时,ViewGroup.LayoutParams没有第三个参数,但前者确实如此。

试试这个:

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

ViewGroup.LayoutParams是任何类型布局中任何View的布局参数集(因为这些布局都是ViewGroup s)。如果您具有特定布局(例如LinearLayout),则可以使用LinearLayout.LayoutParams来访问特定于该类型布局的内容。在这种情况下,layout_weight特定于LinearLayout s,因此您必须使用LinearLayout.LayoutParams来访问此权重参数。

您还应该从XML中的layout_weight="0"中删除TextView。如果仍然无法解决此问题,请为LinearLayout提供背景颜色,看看它是否完全可见,然后使用您的调查结果和任何更改/新代码编辑您的OP。