使用 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.ViewHolder
的 OnClickListener
中以编程方式将 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>
我有 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.ViewHolder
的 OnClickListener
中以编程方式将 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>