我有一个ListView
,它有一个自定义适配器来提供自定义的View
。每个列表项“更改”它所在屏幕的一侧(就像您在垂直轴上翻转它一样)。这是我正在谈论的一个例子:
照片中较暗的灰色框覆盖了ProfilePictureView
和TextView
,其中包含用户名和照片。如果用户未登录,则没有姓名和照片(如照片中的第二个列表项所示)。正如您从照片中看到的那样,背景图像环绕视图中第一个和第三个项目的内容(从左侧开始到右侧结束)。问题是:面向的项目另一种方式是忽略我的“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>
那么,如何正确地将视图正确对齐并使背景图像正确地环绕其内容?
答案 0 :(得分: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()
中实现。)
答案 1 :(得分:0)
我的问题的答案很简单,在我的自定义适配器中,我正在设置背景图像资源,具体取决于它是偶数还是奇数列表视图项。而不是这样做我只需要制作一个imageview并将该图像资源设置为背景图像,并使用android:layout_alignParentRight="true
和`android:layout_alignParentLeft =“true”属性将其设置到屏幕的正确一侧。