【问题标题】:Android - TextView's Weight Property in LinearLayout is being ignored when used as ListView row ViewAndroid - 当用作 ListView 行视图时,LinearLayout 中的 TextView 的权重属性被忽略
【发布时间】:2015-07-17 12:21:12
【问题描述】:

我有一个 CustomListView,当我长按一行时,该行的布局会更改为不同的 listRow 布局。到目前为止,一切正常,但是,新视图的布局被压缩了。这是我的 xml 文件:

search_result_layout.xml --> 这是 customListView Adapter 使用的原始 xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_result_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:padding="1dip" >

    <TextView
        android:id="@+id/dialogItemName"
        android:layout_width="0dp"
        android:layout_weight="0.54"
        android:layout_marginRight="5dp"
        android:layout_height="match_parent"
        android:text="Item Name"
        android:gravity="center"
        android:textSize="10pt" />


    <TextView
        android:id="@+id/price"
        android:layout_width="0dp"
        android:layout_weight="0.14"
        android:layout_height="match_parent"
        android:text="Price"
        android:gravity="center"
        android:textSize="10pt" />

    <TextView
        android:id="@+id/discount"
        android:layout_width="0dp"
        android:layout_weight="0.10"
        android:layout_height="match_parent"
        android:text="Discount"
        android:gravity="center"
        android:textSize="10pt" />

    <TextView
        android:id="@+id/qtyInput"
        android:layout_width="0dp"
        android:layout_weight="0.14"
        android:layout_height="match_parent"
        android:text="qtyInput"
        android:gravity="center"
        android:textSize="10pt" />

    <TextView
        android:id="@+id/discInput"
        android:layout_width="0dp"
        android:layout_weight="0.11"
        android:layout_height="match_parent"
        android:text="discInput"
        android:gravity="center"
        android:textSize="10pt" />


</LinearLayout>

这是我的 search_result_inflate.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:padding="1dip" >

    <TextView
        android:id="@+id/dialogItemName"
        android:layout_width="0dp"
        android:layout_weight="0.54"
        android:layout_marginRight="5dp"
        android:layout_height="match_parent"
        android:text="Item Name"
        android:gravity="center"
        android:textSize="10pt" />


    <TextView
        android:id="@+id/price"
        android:layout_width="0dp"
        android:layout_weight="0.14"
        android:layout_height="match_parent"
        android:text="Price"
        android:gravity="center"
        android:textSize="10pt" />

    <TextView
        android:id="@+id/discount"
        android:layout_width="0dp"
        android:layout_weight="0.10"
        android:layout_height="match_parent"
        android:text="Discount"
        android:gravity="center"
        android:textSize="10pt" />

    <EditText
        android:id="@+id/qtyInput"
        android:layout_width="0dp"
        android:layout_weight="0.14"
        android:layout_height="match_parent"
        android:hint="qtyInput"
        android:inputType="number"
        android:gravity="center"
        android:textSize="10pt" />

    <EditText
        android:id="@+id/discInput"
        android:layout_width="0dp"
        android:layout_weight="0.11"
        android:layout_height="match_parent"
        android:hint="discInput"
        android:inputType="number|date"
        android:gravity="center"
        android:textSize="10pt" />


</LinearLayout>

这两个文件几乎相同,只是最后两个 TextView 变成了 EditText,因此用户可以输入他或她想要的值。

另外,请注意我在 textViews 和 EditTexts 中放置了weight,以便在用户将视图从纵向切换到横向时空间最大化。

resultListView.setOnItemLongClickListener(new OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
            int position, long id) {
        // TODO Auto-generated method stub

        TextView textViewQuantity = (TextView)view.findViewById(R.id.qtyInput);
        TextView textViewDiscountReq = (TextView)view.findViewById(R.id.discInput);
        TextView textViewName = (TextView)view.findViewById(R.id.dialogItemName);
        TextView textViewPrice = (TextView)view.findViewById(R.id.price);
        TextView textViewDiscount = (TextView)view.findViewById(R.id.discount);

        textViewQuantity.setVisibility(View.GONE);
        textViewDiscountReq.setVisibility(View.GONE);
        textViewName.setVisibility(View.GONE);
        textViewPrice.setVisibility(View.GONE);
        textViewDiscount.setVisibility(View.GONE);

        LinearLayout ll_inflate = (LinearLayout)view.findViewById(R.id.search_result_layout);
        Log.d("Angelo", "original width = " + ll_inflate.getWidth());

        View child = getLayoutInflater().inflate(R.layout.search_result_inflate, null);

        TextView newText = (TextView)child.findViewById(R.id.qtyInput);
        newText.setText(textViewQuantity.getText().toString());

        EditText enter_txt = (EditText)child.findViewById(R.id.qtyInput);   

        ll_inflate.addView(child);
        Log.d("Angelo", "not original width = " + ll_inflate.getWidth());


        return false;
    }
});

当我长按一个项目时,布局会发生变化。但是,TextViews 和 EditTexts 都彼此相邻,就好像 weight 属性被忽略了一样。起初我认为宽度可能在视图更改之前和之后发生了变化,但日志告诉我它有 1136 宽度(我使用的是第二代 Nexus 7)。现在我是空白的,父母的宽度没有改变,但重量值被忽略了。我该如何解决?以编程方式分配权重是否可行?

另外,跟进问题,我只希望最后 2 个 TextView 更改为 EditTexts。所以我尝试做的是从原始布局中通过textView.getText().toString() 提取前三个字段(商品名称、价格、折扣)的值并从新布局中获取文本视图并使用@ 987654328@ 但到目前为止,它没有工作,有什么建议吗?

更新:

Upon reading this link,我认为当我使用 LinearLayout 作为我的 ListView 行视图时,LinearLayout 内 TextViews 的 Weight 属性被忽略了。嵌套另一个线性布局也没有多大帮助。

我在里面放置了另一个 LinearLayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:padding="1dip" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:padding="1dip" >

        <TextView
            android:id="@+id/dialogItemName"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginRight="5dp"
            android:layout_weight="0.70"
            android:gravity="center"
            android:text="Item Name"
            android:textSize="23sp" />

        <TextView
            android:id="@+id/price"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.16"
            android:gravity="center"
            android:text="Price"
            android:textSize="23sp" />

        <TextView
            android:id="@+id/discount"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.12"
            android:gravity="center"
            android:text="Discount"
            android:textSize="23sp" />

        <EditText
            android:id="@+id/qtyInput"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.16"
            android:gravity="center"
            android:hint="qtyInput"
            android:inputType="number"
            android:textSize="23sp" >

            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/discInput"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.13"
            android:gravity="center"
            android:hint="discInput"
            android:inputType="number|date"
            android:textSize="23sp" />
    </LinearLayout>

</LinearLayout>

有什么想法吗?

【问题讨论】:

  • 如何使用相同的布局而不使用pt 使用sp

标签: android android-listview android-custom-view android-layout-weight


【解决方案1】:

改为调用:

ll_inflate.addView(child, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多