Добавьте закругленные углы в StateSelected Background TextView с помощью 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, они не показывают закругленные углы. Вот фон xml для каждого элемента 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" 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>

Я программно устанавливаю для TextView значение true в моем RecyclerView.Adapter.ViewHolder OnClickListener (селектор работает нормально, иначе у выбранного элемента не было бы красноватого фона).

Вот фрагменты из приложения.

введите здесь описание изображения введите здесь описание изображения

У RecyclerView углы закруглены, но фон TextView перекрывает их. Поэтому, когда выбранный View находится сверху или снизу.

Закругленные углы больше не видны, хотя они и не должны были быть видны, когда я добавил закругленные углы на выбранные виды.

Я продолжаю получать подобные решения при поиске этого. И мой правильный согласно this< /а>.


person Abbas    schedule 28.01.2016    source источник
comment
этот селектор не будет работать, потому что он имеет только одно состояние (вам тоже нужно значение по умолчанию), и вы только что определили для этого возможность рисования. Внутренняя форма будет проигнорирована.....   -  person Opiatefuchs    schedule 28.01.2016
comment
@Opiatefuchs Мне не нужны закругленные углы для state_selected=false. Так что на этом уровне все работает нормально. Что касается уже определенного рисования, проверьте мой ответ, где я указал на свою ошибку.   -  person Abbas    schedule 28.01.2016


Ответы (2)


Итак, размещая этот вопрос здесь. Пересмотрел и нашел свою ошибку. Итак, вот оно.

В моем 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>
person Abbas    schedule 28.01.2016

у вас есть еще один способ сделать это...

после установки фона для вашего RecyclerView sset background для ваших элементов 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>
person Edalat Feizi    schedule 28.01.2016