如何在android listview中组合两个变量:第一个左对齐和第二个右对齐

时间:2014-12-16 21:56:28

标签: android listview

我使用标准的ListView和Adapter作为 ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,android.R.id.text1,itemList)。

列表结构如下: LOOOOOOOOOOOOONG ITEM NAME 1

简短的项目名称2

我需要在text1行添加数量。我可以将它与ITEM NAME连接,所以它看起来像

LOOOOOOOOOOOOONG ITEM NAME1 845

SHORT ITEM NAME2 132

如何将数量推向正确,所以所有这些都将对齐并正确对齐?有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您必须使用自定义适配器为每个单元格填充自定义复合视图。

在新的CustomAdapter.java中(Item是您的数据POJO:见下文)

public class CustomAdapter extends BaseAdapter {
    private final Context mContext;
    private final List<Item> mItemList;

    public CustomAdapter(Context context, List<Item> itemList) {
        mContext = context;
        mItemList = itemList;
    }

    @Override
    public int getCount() {
        return mItemList.size();
    }

    @Override
    public Item getItem(int position) {
        return mItemList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        CustomViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.custom_cell, parent, false);
            CustomViewHolder holder = new CustomViewHolder();
            holder.itemNameTextView = (TextView) convertView.findViewById(R.id.textview_item_name);
            holder.itemQuantityTextView = (TextView) convertView.findViewById(R.id.textview_item_quantity);
            convertView.setTag(holder);
        } else {
            holder = (CustomViewHolder) convertView.getTag();
        }
        Item item = getItem(position);
        holder.itemNameTextView.setText(item.getName());
        holder.itemQuantityTextView.setText(item.getQuantity());
        return convertView;
    }

    private static class CustomViewHolder {
        public TextView itemNameTextView;
        public TextView itemQuantityTextView;
    }
}

使用custom_cell.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall">

    <TextView
        android:id="@+id/textview_item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/textview_item_quantity"
        android:singleLine="true"/>

    <TextView
        android:id="@+id/textview_item_quantity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"/>
</RelativeLayout>

这是项目POJO:

public class Item {
    private final String mName;
    private final String mQuantity;

    public Item(String itemName, String itemQuantity) {
        mName = itemName;
        mQuantity = itemQuantity;
    }

    public String getName() {
        return mName;
    }

    public String getQuantity() {
        return mQuantity;
    }
}

通过执行以下操作将其与ListView一起使用:

listView.setAdapater(new CustomAdapter(this, itemList));

答案 1 :(得分:0)

在这一行:

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, itemList)

在res / layout中创建一个新的自定义xml文件[比如名为your_layout_name.xml],并将上面代码中的android.R.layout.simple_list_item_1替换为“R.layout.your_layout_name”。在该文件中,输入以下代码:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical|right"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />

说明

Here是原始android.R.layout.simple_list_item_1布局,在该ArrayAdapter代码中,定义了行的布局:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />

所有需要改变的都是“引力”参数。这定义了文本的对齐方式,您需要添加的所有内容都是“正确的”。

注意:gravity参数通常会在任何视图中对齐其所有内容。比方说,对于LinearLayout,这将尝试对齐其所有子元素。对于TextView,它会对齐文本。