как изменить StateListDrawable программно? - PullRequest
0 голосов
/ 21 мая 2019

Можно ли каким-либо образом программно изменить состояние для StateListDrawable?

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime">

<item
    android:state_checked="true"
    android:drawable="@drawable/picker_circle_selected"/>

<item
    android:state_checked="false"
    android:drawable="@drawable/picker_circle_today" />

StateListDrawable backgroundDrawable = (StateListDrawable) ContextCompat.getDrawable(getContext(), R.drawable.picker_selector);

Я пытался ..... "selectDrawable(int index)" и "addState() "на StateListDrawable.Но ничего не помогло.

По умолчанию отображается "state_checked = false".Когда пользователь нажимает на этот чертеж, он меняет его состояние на «state_checked = true».Есть ли способ, которым это состояние может быть изменено программно?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Попробуйте это

// call your view
View view = LayoutInflater.from(viewGroup.getContext())
            .inflate(yourlayout, viewGroup, false);

    ColorDrawable colorDrawableSelected = new ColorDrawable(context.getResources().getColor(R.color.white));
    StateListDrawable stateListDrawable = new StateListDrawable();
    stateListDrawable.addState(new int[]{android.R.attr.state_selected}, colorDrawableSelected);
    stateListDrawable.addState(StateSet.WILD_CARD, null);// set the StateListDrawable as background of the view
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        view.setBackgroundDrawable(stateListDrawable);
    } else {
        view.setBackground(stateListDrawable); 


 then call like this: view.setSelected etc
0 голосов
/ 21 мая 2019

Вы можете изменить цвет стата, используя LayerDrawable

DrawableContainerState drawableContainerState = (DrawableContainerState) backgroundDrawable.getConstantState();
Drawable[] children = drawableContainerState.getChildren();
LayerDrawable selectedItem = (LayerDrawable) children[0];
LayerDrawable unselectedItem = (LayerDrawable) children[1];


selectedItem.setColor(Color.Black); // changing to black color
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...