我在使用RecyclerView时遇到了一些非常奇怪的行为,并且它关于在一行RecyclerView中锚定和对齐视图。所以这里是行的结果应该是这样的:
总是不会发生这种情况。有时候里面的视图会像上面附着的图像一样混乱,有时则不是。无论如何这里是我的xml文件,显示行布局的外观:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout android:id="@+id/background"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_margin="24dp"
android:id="@+id/iv_user_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_zelena_bez_lopte"
app:civ_border="true"
app:civ_border_color="@color/colorAccent"
app:civ_border_width="1dp"
app:civ_shadow="true"
app:civ_shadow_color="@android:color/black"
app:civ_shadow_radius="10"/>
<LinearLayout
android:id="@+id/username_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/iv_user_icon"
android:layout_alignTop="@+id/iv_user_icon"
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
android:layout_toEndOf="@+id/iv_user_icon"
android:layout_toRightOf="@+id/iv_user_icon"
android:gravity="center|start"
android:orientation="vertical">
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mr.Bean"
android:textColor="@android:color/white"
android:textSize="12sp"
android:typeface="sans"/>
<TextView
android:id="@+id/tv_city_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textColor="@color/colorAccent"
android:textSize="12sp"
android:typeface="sans"/>
</LinearLayout>
<ImageView
android:id="@+id/iv_option"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignBottom="@+id/iv_user_icon"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/iv_user_icon"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:background="@null"
android:src="@drawable/ic_message"/>
<View
android:id="@+id/lst_item_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignLeft="@+id/username_container"
android:layout_alignStart="@+id/username_container"
android:layout_below="@+id/username_container"
android:background="@color/main_text_color"/>
</RelativeLayout>
<ImageView
android:visibility="visible"
app:layout_anchor="@+id/iv_user_icon"
app:layout_anchorGravity="bottom|center|end|right"
android:src="@drawable/icon"
android:id="@+id/iv_star"
android:layout_width="30dp"
android:layout_height="30dp"/>
</android.support.design.widget.CoordinatorLayout>
我需要时在适配器内部隐藏视图,也许这是一个问题,我真的不知道。在检查适配器中的某些条件时,我尝试过不隐藏视图,但结果相同。只是为了解释一下,我隐藏了收件箱图标,因为如果我的用户名显示在列表中我想隐藏它,因为我不想发送自己的消息,而且这个徽章图标只会显示给一个用户。
以下是适配器的代码:
@Override
public void onBindViewHolder(final TeamMembersListAdapter.HeaderViewHolder holder, int position) {
final User user = teamUsers.get(position);
Glide.with(mContext)
.load(Uri.parse(user.getImage()))
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.placeholder(R.drawable.ic_zelena_bez_lopte)
.error(R.drawable.ic_zelena_bez_lopte)
.dontAnimate()
.into(holder.profileImage);
String selfUserId = AppController.getInstance().getDatabase().getUserDetails().get("user_id");
if (user.getCreatorId() == Integer.parseInt(user.getId())) {
holder.ivBadge.setVisibility(View.VISIBLE);
} else {
holder.ivBadge.setVisibility(View.INVISIBLE);
}
if (selfUserId.equals(user.getId())) {
holder.ivSendMessage.setVisibility(View.INVISIBLE);
} else {
holder.ivSendMessage.setVisibility(View.VISIBLE);
}
holder.tvUsername.setText(user.getName());
holder.tvCityName.setText(user.getCity());
holder.bgContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemClickListener.onItemClickListener(holder.getAdapterPosition());
}
});
}
答案 0 :(得分:1)
不应该在RelativeLayout中将所有视图放在一起吗? 我不明白为什么你甚至需要CoordinatorLayout,也许试图摆脱Coordinator并将所有内部包裹起来。
我建议也尝试使用ConstraintLayout - 在这种布局中应该很容易做到这一点。