【问题标题】:How to set the layout_weight of a TextView in code?如何在代码中设置 TextView 的 layout_weight?
【发布时间】:2012-08-02 01:59:54
【问题描述】:

我环顾四周,但大多数都没有任何意义。有些有第三个参数,至少不再存在于 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,以防万一这很有帮助:

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

【问题讨论】:

    标签: android textview layoutparams


    【解决方案1】:

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

    要以编程方式设置layout_weight,您需要使用LinearLayout.LayoutParamsViewGroup.LayoutParams 没有第三个参数,正如您指出的那样,但前者有。

    试试这个:

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

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

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

    【讨论】:

    • 哦,xml中的T​​extView不是我用的。那是另一回事。目前的布局很好,它在 LinearLayout 中,但非常感谢您的快速建议。我现在试一试。让你知道我得到了什么。
    • 天哪,它奏效了。非常感谢。如果可以的话,您能否解释一下为什么LinearLayout.LayoutParamsTextView 有效?我从来没有动态创建一个视图来放在屏幕上,而且我还是 Android 新手。再次感谢!
    • 我在回答中详细说明了不同 LayoutParams 对象的用途,如果您需要更多信息,请链接到文档。
    • 非常感谢。你是最有帮助的。
    猜你喜欢
    • 2011-10-05
    • 2011-06-06
    • 2012-12-29
    • 2017-02-04
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多