Как сделать карту серым в режиме просмотра карты? - PullRequest
1 голос
/ 15 марта 2019

У меня есть вид карты, который динамически отображает набор карт.Я использовал для этого переработчик.Теперь я хочу отключить карту (в зависимости от значения), выбрасывая карту или что-то в этом роде.Это макет, который содержит представление карты

<?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:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:layout_width="112dp"
        android:layout_height="140dp"
        android:layout_margin="10dp"
        android:clickable="true"
        android:focusable="true"
        android:scaleType="fitXY">

        <RelativeLayout
            android:layout_width="100dp"
            android:layout_height="150dp"
            android:padding="8dp">

            <ImageView
                android:id="@+id/appIcon"
                android:layout_width="match_parent"
                android:layout_height="62dp"
                android:padding="5dp"
                tools:ignore="VectorDrawableCompat" />

            <TextView
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/appIcon"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
                android:textColor="@drawable/selector"
                android:textSize="10dp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/appVersion"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentEnd="true"
                android:layout_marginBottom="5dp"
                android:layout_marginEnd="1dp"
                android:text="version 0.0"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
                android:textSize="8dp" />

        </RelativeLayout>

    </android.support.v7.widget.CardView>

</LinearLayout> 

Я нашел несколько связанных запросов и попытался использовать селекторы и вычеркивать каждое поле вместо всей карты.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:color="@color/colorAppName" />
    <item android:state_enabled="false" android:color="@color/colorPrimary" />

</selector>

и в моем классе (Adapter.kt)

name = itemView.findViewById(R.id.name) as TextView
if(value==true)
{
  name.isEnabled=false
}

Но я хочу отключить всю карту.Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Вы можете установить оттенок для вашего относительного макета, который является прямым потомком карты в дизайне вашего предмета.Вы должны сделать это в xml:

 <android.support.v7.widget.CardView
        android:layout_width="112dp"
        android:layout_height="140dp"
        android:layout_margin="10dp"
        android:clickable="true"
        android:focusable="true"
        android:scaleType="fitXY">

        <RelativeLayout
            android:id="@+id/relParent"
            android:background="#fff"
            android:layout_width="100dp"
            android:layout_height="150dp"
            android:padding="8dp">
      ....>

Я добавил два свойства в RelativeLayout: во-первых, это id, а во-вторых, фон.

Теперь в адаптере вы можете сделать это:

if(value==true)  
{
itemView.relParent.background.setColorFilter(Color.parseColor("#6F6F6F"),PorterDuff.Mode.SRC_IN)
        itemView.relParent.isEnabled=false
}
else
{
itemView.relParent.background.setColorFilter(Color.parseColor("#FFFFFF"),PorterDuff.Mode.SRC_IN)
        itemView.relParent.isEnabled=true
}

Примечание: Необходимо установить фон в RelativeLayout из xml, в противном случае itemView.relParent.background вернет ноль, и ваше приложение будет аварийно завершено.

Обновление Вам нужно установить цвет переднего плана для вашей карты, который вы в этом случае делаете:

itemView.cardDashboard.foreground= ColorDrawable(Color.parseColor("#906F6F6F"))

Здесь cardDashboard - это вид карты, который вы используете в дизайне вашего предмета.

Итак, окончательный кодбудет так:

       if(value==true)  
        {
        itemView.cardDashboard.foreground= ColorDrawable(Color.parseColor("#906F6F6F"))     
   itemView.relParent.isEnabled=false
        }
        else
        {
        itemView.cardDashboard.foreground= ColorDrawable(Color.parseColor("#006F6F6F"))
                itemView.relParent.isEnabled=true
        }
1 голос
/ 15 марта 2019

Попробуйте установить следующее для всех представлений:

android:duplicateParentState="true"

Когда для этого атрибута установлено значение true, представление получает свое состояние рисования (сфокусировано, нажато и т. Д.) От своего прямого родителя.вместо самого себя.

Затем динамически отключите макет элемента (в определенной позиции), что приведет к отключению всех его дочерних представлений.

Примечание: Поскольку ваши просмотры карт находятся в режиме рециркуляции, вам нужно поддерживать состояние для различных положений внутри вашего адаптера.

Вы можете поддерживать фоновые состояния с помощью селекторов, как вы делали это раньше.

Я изменил вашмакеты, добавив вышеупомянутый атрибут: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<android.support.v7.widget.CardView
    android:layout_width="112dp"
    android:layout_height="140dp"
    android:layout_margin="10dp"

    android:id="@+id/cd"
    android:scaleType="fitXY">

    <RelativeLayout
        android:layout_width="100dp"
        android:layout_height="150dp"
        android:duplicateParentState="true"
        android:padding="8dp">

        <ImageView
            android:id="@+id/appIcon"
            android:layout_width="match_parent"
            android:layout_height="62dp"
            android:padding="5dp"
            android:duplicateParentState="true"
            tools:ignore="VectorDrawableCompat" />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:duplicateParentState="true"

            android:text="@string/app_name"
            android:layout_below="@+id/appIcon"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:onClick="clickMe"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"

            android:textSize="10dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/appVersion"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:duplicateParentState="true"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_marginBottom="5dp"
            android:layout_marginEnd="1dp"
            android:text="version 0.0"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
            android:textSize="8dp" />

    </RelativeLayout>

</android.support.v7.widget.CardView>

</LinearLayout>

И протестировали с отключением состояния просмотра карты, его дочерние представления также показывают изменение с их выцветанием до светло-серого (не использовался селектор для представлений, поэтомуон меняется на отключенное состояние по умолчанию (проверено на textview)). Но для любого clicklistner в представлениях вы должны будете использовать сохраненное состояние для положенияна отключен и не выполняет задачу, когда состояние отключено.

1 голос
/ 15 марта 2019

Добавьте android:background="@drawable/selector" к вашему RelativeLayout или LinearLayout.Это будет работать для включения и выключения.

Примечание: - Это не связано с вопросом, но если вы будете следовать.Это будет хорошо для вас.

Мы сравниваем if(booleanVariable) напрямую вместо сравнения, как if(booleanVariable==true).

...