使用 XML 为 TextView 的 StateSelected 背景添加圆角

Add Rounded corners to StateSelected Background of TextView using XML

我有 RecyclerView,里面有一些 TextView。我已将 RecyclerView 的背景设置为以下 recycler_view_background.xml.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#000000" />
    <corners android:topLeftRadius="@dimen/player_category_radius" android:topRightRadius="@dimen/player_category_radius"
        android:bottomLeftRadius="@dimen/player_category_radius" android:bottomRightRadius="@dimen/player_category_radius"/>
    <stroke android:color="#D3D3D3" android:width="1dp" />
</shape>

它工作正常,我的 RecyclerView 上有圆角。

问题是,当我尝试向 TextViews 中的任何一个添加背景选择器时,它们都不显示圆角。这是每个项目 category_item_selector.xml.

的背景 xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@drawable/controlbar_gradient">
        <shape>
            <corners android:topLeftRadius="@dimen/player_category_radius" android:topRightRadius="@dimen/player_category_radius"
                android:bottomLeftRadius="@dimen/player_category_radius" android:bottomRightRadius="@dimen/player_category_radius"/>
            <stroke android:color="#D3D3D3" android:width="1dp" />
        </shape>
    </item>
</selector>

我在我的 RecyclerView.Adapter.ViewHolderOnClickListener 中以编程方式将 TextView 的选择设置为 true(选择器工作正常,否则我不会将所选的背景设为红色项).

这是应用程序的片段。

RecyclerView 有圆角,但 TextView 的背景覆盖了它。因此,当所选View在顶部或底部时。

圆角不再可见,尽管当我在选定视图上添加圆角时不应该看到。

我在搜索时不断得到类似的解决方案。根据 this.

,我的是正确的

所以在这里发布这个问题。我修改并发现了我的错误。原来如此。

在我的 category_item_selector.xml 中,我将背景设置为 @drawable/controlbar_gradient,它被定义为

<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <gradient

        android:angle="90"
        android:type="linear"
        android:startColor="#7e0809"
        android:endColor=  "#fa0000" />

</shape>

后来又在我的 category_item_selector.xml 中添加了 shape。所以编译器使用它找到的第一个 shape 并渲染它。所以我所要做的就是将 category_item_selector.xml 更改为

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true">
        <shape>
            <gradient

                android:angle="90"
                android:type="linear"
                android:startColor="#7e0809"
                android:endColor=  "#fa0000" />

            <corners android:topLeftRadius="@dimen/player_category_radius" android:topRightRadius="@dimen/player_category_radius"
                android:bottomLeftRadius="@dimen/player_category_radius" android:bottomRightRadius="@dimen/player_category_radius"/>
            <stroke android:color="#D3D3D3" android:width="1dp" />
        </shape>
    </item>
</selector>

你还有另一种方法...

为您的 RecyclerView 设置背景后为您的 RecyclerView 项设置背景

像这样

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_most_trending"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/recyclerView_background"
    >

</android.support.v7.widget.RecyclerView>
<?xml version="1.0" encoding="utf-8"?>

将背景设置为 RecyclerView 项目

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@drawable/recyclerView_item_bg">
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="right"
      android:padding="10dp"
      />
 </LinearLayout>