Разрешить использование значений типа 'wrap_content' в attrs.xml - PullRequest
0 голосов
/ 30 апреля 2019

Как я могу разрешить использование значений, таких как wrap_content или match_parent в attrs.xml файле ресурсов на Android?

My attrs.xml.

<declare-styleable name="BarView">
    <attr name="foo_dimen" format="dimension" />
</declare-styleable>

Я хочуfoo_dimen атрибут, который будет использоваться следующим образом:

<BarView
    …
    app:foo_dimen="wrap_content" />
<BarView
    …
    app:foo_dimen="42dp" />

1 Ответ

0 голосов
/ 30 апреля 2019

Это можно сделать с помощью <enum />:

<declare-styleable name="BarView">
    <attr name="foo_dimen" format="dimension">
        <enum name="wrap_content" value="-1" />
    </attr>
</declare-styleable>

Тогда вы можете получить значение, используя Java:

TypedArray arr = context.getTheme().obtainStyledAttributes(R.styleable.BarView, /* defStyleAttr */ 0, /* defStyleRes */ 0);
switch ((int)(arr.getDimension(R.styleable.BarView_foo_dimen, -255))) {
    case -1: // wrap_content
        // …
        break;
    case -255: // not specified
        // …
        break;
    default: // Specified valid dimension
        int pixels = arr.getDimensionPixelSize(R.styleable.BarView_foo_dimen, -1);
        …
        break;
}
...