Сенсорная анимация CheckBox в неправильном положении - PullRequest
0 голосов
/ 11 февраля 2019

Я использую пользовательский флажок для поддержки rtl, используя свойство rightDrawable.

public class SRCheckBox extends AppCompatCheckBox {

    public SRCheckBox(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {
        if (isRTL()) {
            this.setButtonDrawable(null);
            int[] attrs = {android.R.attr.listChoiceIndicatorMultiple};
            TypedArray ta = context.getTheme().obtainStyledAttributes(attrs);
            Drawable rightDrawable = ta.getDrawable(0);
            this.setCompoundDrawablesWithIntrinsicBounds(null, null, rightDrawable, null);
        }
    }

}

, но вот проблема, с которой я столкнулся: пожалуйста, посмотрите на этот gif

gif

Как вы можете видеть, сенсорная анимация влияет на левую сторону (на текст) вместо анимации на самом флажке .

I 'Мы также пробовали в XML:

<CheckBox
    android:id="@+id/fastDecodeCB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:button="@null" // this is causing the problem
    android:drawableRight="?android:attr/listChoiceIndicatorMultiple" />

, но это выглядит так же.какие-либо предложения?

1 Ответ

0 голосов
/ 11 февраля 2019

Вы устанавливаете кнопку-флажок на ноль, эффективно удаляя ее и устанавливая правую отрисовку.Правый чертеж отвечает на щелчки, но флажок на самом деле не знает, что этот значок является кнопкой (вы сказали, что кнопки нет), поэтому он просто делает то, что вы видите.

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

private void init(Context context) {
    if (isRTL()) {
        // This will flip the text and the button drawable. This could also be set in XML.
        setLayoutDirection(LAYOUT_DIRECTION_RTL);
        int[] attrs = {android.R.attr.listChoiceIndicatorMultiple};
        TypedArray ta = context.getTheme().obtainStyledAttributes(attrs);
        Drawable rightDrawable = ta.getDrawable(0);
        this.setButtonDrawable(rightDrawable);
        ta.recycle(); // Remember to do this.
    }
}
...