未对齐的列表视图

时间:2016-06-01 08:53:28

标签: java android xml android-layout listview

我正在制作一个足球联赛应用程序,我需要显示分类。 我正在尝试显示一个标题,指示代表每个字段的内容以及下面各个小组的列表视图。 我正在使用SimpleCursorAdapter来填充列表,但如果值具有不同的位数,则列表未对齐。 ¿我如何对齐它或者至少在带有适配器的一位数字之前加一个0?

片段的源代码和xml:

ClassificacioFragment.java:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        String[] from = { EquipsContract.EquipEntry.COLUMN_NAME_NOM,
                EquipsContract.EquipEntry.COLUMN_NAME_VICTORIES, EquipsContract.EquipEntry.COLUMN_NAME_DERROTES,
                EquipsContract.EquipEntry.COLUMN_NAME_EMPATS,  EquipsContract.EquipEntry.COLUMN_NAME_PUNTS};
        int[] to = {R.id.item_nom, R.id.item_victories, R.id.item_derrotes, R.id.item_empats, R.id.item_punts};
        View rootview =  inflater.inflate(R.layout.fragment_classificacio, container, false);
        ListView listView = (ListView) rootview.findViewById(R.id.classificacio);
        listView.invalidateViews();
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(rootview.getContext(), R.layout.equip_row,
                DBHandler.getDbInstance(getContext()).cursorClassificacio(), from, to);
        listView.setAdapter(adapter);
        String size = Integer.toString(DBHandler.getDbInstance(getContext()).getAllEquips().size());
        Toast toast = Toast.makeText(getContext(), size, Toast.LENGTH_LONG);
        toast.show();
        return rootview;
    }

片段XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:context="idi.francesc.footballleague.ClassificacioFragment">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:id="@+id/header_classificacio"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="@string/header_equip"
                android:textSize="18sp"
                android:layout_alignParentTop="true"
                android:layout_alignParentStart="true"
                android:layout_marginStart="28dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="@string/header_victories"
                android:textSize="18sp"
                android:layout_alignParentTop="true"
                android:layout_toStartOf="@+id/header_d"
                android:layout_marginEnd="30dp"
                />

            <TextView
                android:id="@+id/header_d"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="@string/header_derrotes"
                android:textSize="18sp"
                android:layout_alignParentTop="true"
                android:layout_toStartOf="@+id/header_e"
                android:layout_marginEnd="27dp"
                />

            <TextView
                android:id="@+id/header_e"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="@string/header_empats"
                android:textSize="18sp"
                android:layout_alignParentTop="true"
                android:layout_toStartOf="@+id/header_p"
                android:layout_marginEnd="38dp"
                />

            <TextView
                android:id="@+id/header_p"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="@string/header_punts"
                android:textSize="18sp"
                android:layout_marginEnd="12dp"
                android:layout_alignParentTop="true"
                android:layout_alignParentEnd="true"/>
        </RelativeLayout>

        <ListView
            android:id="@+id/classificacio"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/header_classificacio">
        </ListView>
    </RelativeLayout>


</FrameLayout>

Listview行:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
        <TextView
            android:id="@+id/item_nom"
            android:layout_width="wrap_content"
            android:layout_height="?android:attr/listPreferredItemHeight"
            android:gravity="center_vertical"
            android:textSize="20sp"
            android:padding="2dp"
            android:layout_marginStart="10dp"
            android:text="F.C. Barcelona"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="?android:attr/listPreferredItemHeight"
            android:id="@+id/item_victories"
            android:padding="2dp"
            android:textSize="15sp"
            android:text="10"
            android:gravity="center_vertical"
            android:layout_alignParentTop="true"
            android:layout_toStartOf="@+id/item_derrotes"
            android:layout_marginEnd="25dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="?android:attr/listPreferredItemHeight"
            android:id="@+id/item_derrotes"
            android:padding="2dp"
            android:textSize="15sp"
            android:text="20"
            android:gravity="center_vertical"
            android:layout_alignParentTop="true"
            android:layout_toStartOf="@+id/item_empats"
            android:layout_marginEnd="25dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="?android:attr/listPreferredItemHeight"
            android:id="@+id/item_empats"
            android:padding="2dp"
            android:textSize="15sp"
            android:text="30"
            android:gravity="center_vertical"
            android:layout_alignParentTop="true"
            android:layout_toStartOf="@+id/item_punts"
            android:layout_marginEnd="25dp"/>

        <TextView
            android:layout_height="?android:attr/listPreferredItemHeight"
            android:layout_width="wrap_content"
            android:id="@+id/item_punts"
            android:padding="6dp"
            android:textSize="18sp"
            android:text="40"
            android:gravity="center_vertical"
            android:layout_marginEnd="2dp"
            android:layout_alignParentEnd="true"/>


</RelativeLayout>

这就是结果: enter image description here

感谢。

3 个答案:

答案 0 :(得分:1)

您可以简化ListView行,以LinearLayout参数使用weight。它的效率更高,可以防止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="9">
    <TextView
        android:id="@+id/item_nom"
        android:layout_width="0dp"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:gravity="center_vertical"
        android:textSize="20sp"
        android:padding="2dp"
        android:layout_marginStart="10dp"
        android:layout_weight="4"
        android:text="F.C. Barcelona"/>
    <TextView
        android:layout_width="0dp"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:layout_weight="1"
        android:id="@+id/item_victories"
        android:textSize="15sp"
        android:text="10"
        android:gravity="center"/>
    <TextView
        android:layout_width="0dp"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:layout_weight="1"
        android:id="@+id/item_derrotes"
        android:textSize="15sp"
        android:text="20"
        android:gravity="center"/>
    <TextView
        android:layout_width="0dp"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:layout_weight="1"
        android:id="@+id/item_empats"
        android:textSize="15sp"
        android:text="30"
        android:gravity="center"/>

    <TextView
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:id="@+id/item_punts"
        android:textSize="18sp"
        android:text="40"
        android:gravity="center"/>


</LinearLayout>

答案 1 :(得分:0)

首先,TextView中的所有文本都必须居中对齐。

android:gravity="center"

然后,以编程方式,您应该找到最大的TextView并在该行中设置每个TextView的宽度。

或者您使用TableLayout;)

答案 2 :(得分:0)

创建一个附加0且数字小于10的函数。

public String appendZero(int input) {
   if (input >= 10) {
    return String.valueOf(input);
   } else {
    return "0" + String.valueOf(input);
   }
}

设置文本时,请按以下方式调用:

item_victories.setText(appendZero(victory_count.get(position)));

希望这个适合你。