自定义适配器的文本视图不占用屏幕

时间:2016-04-01 08:08:20

标签: android

我有两个名为compliance_details.xmlcompliance_details_row.xml

的xml文件

以下是我的compliance_details.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="vertical">

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="15dp">

                <TextView
                    android:id="@+id/taskNameLabel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_column="1"
                    android:layout_marginRight="70dp"
                    android:layout_weight="3"
                    android:singleLine="true"
                    android:text="TaskName"
                    android:textColor="#000"
                    android:textSize="20sp" />

                <TextView
                    android:id="@+id/dueDateLabel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_column="1"
                    android:layout_marginRight="20dp"
                    android:layout_weight="1"
                    android:singleLine="true"
                    android:text="Due Date"
                    android:textColor="#000"
                    android:textSize="20sp" />

                <TextView
                    android:id="@+id/ageingLabel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_column="1"
                    android:layout_marginRight="20dp"
                    android:layout_weight="1"
                    android:singleLine="true"
                    android:text="Ageiging"
                    android:textColor="#000"
                    android:textSize="20sp" />

            </TableRow>

        </TableLayout>

        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:paddingTop="10dp" />

    </LinearLayout>


and following is my compliance_details_row.xml code

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


    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="15dp">

            <TextView
                android:id="@+id/taskNameValue"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:layout_marginRight="70dp"
                android:layout_weight="3"
                android:singleLine="true"
                android:text="TaskName"
                android:textColor="#000"
                android:textSize="20sp" />

            <TextView
                android:id="@+id/dueDateValue"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:layout_marginRight="20dp"
                android:layout_weight="1"
                android:singleLine="true"
                android:text="Due Date"
                android:textColor="#000"
                android:textSize="20sp" />

            <TextView
                android:id="@+id/ageingValue"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:layout_marginRight="20dp"
                android:layout_weight="1"
                android:singleLine="true"
                android:text="Ageiging"
                android:textColor="#000"
                android:textSize="20sp" />

        </TableRow>

    </TableLayout>

</LinearLayout>

在我的适配器中,我使用compliance_row.xml对compliance_details_row.xml进行了充气。

但是当我这样做时,compliance_details_row的元素有点失真。enter image description here

从上图中可以看出,合规性名称应位于标题TaskName下,但合规性名称有点失真,并且到期日期值仅部分可见。我怎样才能解决这个问题?

3 个答案:

答案 0 :(得分:1)

你真的不需要TableLayout来实现这一目标。只需使用weightLum的LinearLayout即可。要获得所需的比例 - 更改每个TextView的权重值。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="3">

         <TextView
            android:id="@+id/taskNameValue"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="TaskName"
            android:textColor="#000"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/dueDateValue"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="Due Date"
            android:textColor="#000"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/ageingValue"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:text="Ageiging"
            android:textColor="#000"
            android:textSize="20sp" />

</LinearLayout>

答案 1 :(得分:1)

从父视图(compliance_details_row.xml)中删除taskname,duedate和agin ...并将其添加为自定义适配器中的第一个元素。 compliance_row.xml仅确保此布局中的行采用Table格式,它无法控制父布局的视图。因此,要么将compliance_details_row.xmlcompliance_row.xml同时更改为LinearLayout weight,要么删除compliance_details_row.xml中的三个元素。

答案 2 :(得分:1)

尝试将LinearLayout与android:layout_weight属性一起用于xml:

<强> compliance_details.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/taskNameLabel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.50"
        android:text="TaskName"
        android:layout_marginRight="5dp"
        android:textColor="#000"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/dueDateLabel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_column="1"
        android:layout_weight="0.25"
        android:text="Due Date"
        android:layout_marginRight="5dp"
        android:textColor="#000"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/ageingLabel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_column="1"
        android:layout_marginRight="5dp"
        android:layout_weight="0.25"
        android:text="Ageiging"
        android:textColor="#000"
        android:textSize="20sp" />
</LinearLayout>


<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:paddingTop="10dp" />

<强> compliance_details_row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/taskNameValue"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="5dp"
        android:layout_weight="0.50"
        android:singleLine="true"
        android:text="TaskName"
        android:textColor="#000"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/dueDateValue"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_column="1"
        android:layout_marginRight="5dp"
        android:layout_weight="0.25"
        android:singleLine="true"
        android:text="Due Date"
        android:textColor="#000"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/ageingValue"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="5dp"
        android:layout_weight="0.25"
        android:singleLine="true"
        android:text="Ageiging"
        android:textColor="#000"
        android:textSize="20sp" />

</LinearLayout>