Я хочу перекрыть первый элемент вторым элементом в представлении переработчика.
это то, чего я хочу достичь:
вот как сейчас выглядит мой вид ресайклера:
[]
содержимое внутри зеленой рамки на самом деле является recyclerView и первым элементом в родительском представлении recycler, а макет строки рейтинга является вторым элементом в родительском recyclerview . пожалуйста, предложите мне, как я могу наложить первый элемент на второй элемент я пробовал это
item_rating_layout:
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
style = "@style/LayoutHeightWrapWidthMatchStyling"
android:layout_width = "match_parent"
android:gravity = "center_horizontal"
android:orientation = "vertical"
android:padding = "@dimen/padding_large">
<TextView
android:id = "@+id/tvRatingMessage"
style = "@style/TextStyleNormal.XXLarge"
android:text = "@string/rating_exp" />
<RatingBar
android:id = "@+id/ratingBar"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_margin = "@dimen/margin_medium"
android:numStars = "5"
android:progressBackgroundTint = "@color/gray"
android:stepSize = "1.0"
android:progressTint = "@color/primaryColor"
android:rating = "2.5" />
<TextView
android:id = "@+id/tvWriteFeedBack"
style = "@style/TextStyleNormal.XXXLarge.primary"
android:padding = "@dimen/padding_medium"
android:text = "Write Feedback"
android:visibility = "gone" />
</LinearLayout>
item_recycler_view:
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tool = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginStart = "@dimen/margin_24dp"
android:layout_marginEnd = "@dimen/margin_24dp"
android:background = "@color/warranty_card_background">
<androidx.core.widget.NestedScrollView
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:fillViewport = "true">
<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@drawable/btn_shap_without_solid_green"
android:gravity = "center_horizontal"
android:orientation = "vertical">
<ImageView
android:id = "@+id/ivProductImage"
android:layout_width = "100dp"
android:layout_height = "100dp"
android:layout_marginTop = "@dimen/margin_medium"
android:scaleType = "fitXY"
app:srcCompat = "@drawable/ic_original_placeholder" />
<TextView
android:id = "@+id/tvName"
style = "@style/TextStyleNormal.XXLarge.black"
android:textStyle = "bold"
tool:text = "Steelbird Air" />
<TextView
android:id = "@+id/tvModel"
style = "@style/TextStyleNormal.XXLarge"
tool:text = "SBA-2 Horn Matt Black With Red " />
<TextView
android:id = "@+id/tvId"
style = "@style/TextStyleNormal.XXLarge.gray"
android:text = "@string/product_id" />
<TextView
android:id = "@+id/tvViewProductDetails"
style = "@style/TextStyleNormal.XLarge.primary"
android:text = "View product Details" />
<androidx.recyclerview.widget.RecyclerView
android:id = "@+id/rvWarrantyCard"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginStart = "@dimen/margin_medium"
android:layout_marginBottom = "@dimen/margin_medium">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
Использовать основной макет Относительный, в противном случае макет кадра
Вы можете использовать следующие ItemDecoration:
public class OverlapDecoration extends RecyclerView.ItemDecoration {
private final static int vertOverlap = -90;
@Override
public void getItemOffsets (Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.set(0, vertOverlap, 0, 0);
}
}
Теперь, когда вы добавите вышеуказанное украшение, ваш следующий ряд будет нарисован поверх предыдущего ряда. Чтобы исправить это, сделайте свой recyclerview обратным, используя setReverseLayout(true)
Вы можете обратиться к мой вопрос, у которого почти такое же требование.
Я каким-то образом исправил свою проблему, просто добавив немного того же цвета, что и фон панели рейтинга внизу первого элемента.
теперь вот окончательный вид xml:
item_recycler_view:
<?xml version = "1.0" encoding = "utf-8"?>
<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tool = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<LinearLayout
android:id = "@+id/llOverlapView"
android:layout_width = "match_parent"
android:layout_height = "50dp"
android:layout_gravity = "bottom"
android:background = "@color/rating_bar"
android:orientation = "vertical"/>
<androidx.core.widget.NestedScrollView
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:layout_marginStart = "@dimen/margin_24dp"
android:layout_marginEnd = "@dimen/margin_24dp"
android:fillViewport = "true">
<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@drawable/btn_shap_without_solid_green"
android:gravity = "center_horizontal"
android:orientation = "vertical">
<ImageView
android:id = "@+id/ivProductImage"
android:layout_width = "100dp"
android:layout_height = "100dp"
android:layout_marginTop = "@dimen/margin_medium"
android:scaleType = "fitXY"
app:srcCompat = "@drawable/ic_original_placeholder" />
<TextView
android:id = "@+id/tvName"
style = "@style/TextStyleNormal.XXLarge.black"
android:textStyle = "bold"
tool:text = "Steelbird Air" />
<TextView
android:id = "@+id/tvModel"
style = "@style/TextStyleNormal.XXLarge"
tool:text = "SBA-2 Horn Matt Black With Red " />
<TextView
android:id = "@+id/tvId"
style = "@style/TextStyleNormal.XXLarge.gray"
android:text = "@string/product_id" />
<TextView
android:id = "@+id/tvViewProductDetails"
style = "@style/TextStyleNormal.XLarge.primary"
android:text = "View product Details" />
<androidx.recyclerview.widget.RecyclerView
android:id = "@+id/rvWarrantyCard"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginStart = "@dimen/margin_medium"
android:layout_marginBottom = "@dimen/margin_medium">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</FrameLayout>
Большое спасибо @Pawel
Наличие перекрывающихся элементов довольно сложно. Разве вы не можете просто добавить немного синего фона внизу первого элемента, чтобы имитировать поведение?