Можете ли вы использовать пользовательский атрибут в качестве значения для обычного атрибута в Android - PullRequest
0 голосов
/ 19 июня 2019

Я использую пользовательский элемент управления следующим образом:

public class DayView : RelativeLayout {
    .....
}

в своем конструкторе я называю

inflate(getContext(), R.layout.day_view, this);

, который относится к этому XML

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageButton
        android:id="@+id/day_previous"
        android:layout_width="80dp"
        android:layout_height="48dp"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_arrow_left" />

    <ImageButton
        android:id="@+id/day_next"
        android:layout_width="80dp"
        android:layout_height="48dp"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_arrow_right" />

    <TextView
        android:id="@+id/day"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="?attr/selectableItemBackgroundBorderless"
        android:clickable="true"
        android:padding="8dp"
        android:textSize="16sp"
        tools:text="Today" />

</RelativeLayout>

У меня также есть такие атрибуты:

<declare-styleable name="DayView">
    <attr name="backColor" format="color" />
    <attr name="textColor" format="color" />
</declare-styleable>

Что я хочу сделать, так это использовать пользовательский атрибут, установленный пользователем, для изменения атрибутов внутри xml

поэтому, когда макет использует мой DayView, он будет выглядеть так:

<com.example.dayview
     android:id="@+id/firstscreen_today"
     app:backColor="@color/panelColor"
     app:textColor="@color/panelTextColor"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
/>

проблема в том, что когда я изменяю свой макет day_view следующим образом:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="?backColor">

мое приложение продолжает падать, потому что оно не может раздуть представление

есть ли способ обойти это без переопределения конструктора и использования typedarray.getcolor, чтобы получить цвет, а затем применить его вручную к макету?

...