【问题标题】:How to get `ListView` item to wrap_content starting from right side of the screen?如何从屏幕右侧开始将 `ListView` 项获取到 wrap_content?
【发布时间】:2013-04-26 00:03:09
【问题描述】:

我有一个ListView,它有一个自定义适配器来提供自定义的View。每个列表项都会“更改”它所在的屏幕一侧(就像您围绕垂直轴翻转它一样)。这是我所说的一个例子:

照片中较深的灰色框覆盖了包含用户名和照片的ProfilePictureViewTextView。如果用户未登录,则没有姓名和照片(如您在照片中的第二个列表项中所见)。从照片中可以看出,背景图像环绕在视图中的第一项和第三项内容(从左侧开始到右侧结束)。问题是:另一种方法是忽略我的“wrap_content”调用并“匹配”父视图(如您在第二项中所见)。我相信它正确地包装了内容,但是有没有办法从屏幕右侧开始并将内容包装到左侧?

这是该项目视图的XML 代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="right|center_vertical">

<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_alignParentRight="true"
    android:gravity="right" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <com.namespace.RobotoTextView
            android:id="@+id/list_item_user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="24sp"
            android:textStyle="bold"
            android:textColor="@color/white"
            custom:typeface="roboto_light"/>

        <com.namespace.RobotoTextView
            android:id="@+id/list_item_user_score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="36sp"
            android:textStyle="bold"
            android:textColor="@color/waf_warm_yellow_orange"
            custom:typeface="roboto_bold"/>

    </LinearLayout>

    <com.facebook.widget.ProfilePictureView
            android:id="@+id/list_item_user_image"
            android:layout_width="69dp"
            android:layout_height="69dp"
            android:layout_margin="10dp" />

</LinearLayout>

那么,我怎样才能正确地将视图右对齐并让背景图像正确环绕其内容?

【问题讨论】:

    标签: java android xml android-custom-view


    【解决方案1】:

    为左右创建单独的列表项布局。在您的适配器中...

    @Override
    public int getViewTypeCount() {
        return 2;
    }
    
    @Override
    public int getItemViewType(int position) {
        return position % 2;
    }
    
    public View getView(int position, View convertView, ViewGroup parent) {
        int viewType = getItemViewType(position);
        int layoutRes = viewType == 0 ? R.layout.list_item_left : R.layout.list_item_right;
    
        View row = inflater.inflate(layoutRes);
        /* ... */
    }
    

    基本上,您的适配器报告两种不同的视图类型,而您的 getView 在它们之间交替。 (如果还有其他逻辑来判断左右,请在getItemViewType() 中实现。)

    【讨论】:

      【解决方案2】:

      我的问题的答案很简单,在我的自定义适配器中,我根据它是偶数还是奇数列表视图项来设置背景图像资源。而不是这样做,我只需要制作一个 imageview 并将该图像资源设置为背景图像,并使用 android:layout_alignParentRight="true 和 `android:layout_alignParentLeft="true" 属性将其设置到屏幕的正确一侧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 2015-06-10
        • 1970-01-01
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多