Программное центрирование в списке слоев

Я хочу сгенерировать список слоев программно, подобный этому

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="#1e1e1e" />
        <size android:height="45dp"
            android:width="82dp" />
    </shape>
</item>
<item
    android:drawable="@drawable/ic_audio"
    android:gravity="center" />

Результат:

введите здесь описание изображения

Основная идея заключается в центрировании ic_audio. Чтобы сделать это программно, я попытался

LayerDrawable.setLayerGravity();

Но для этого требуется API ›= 23, а мой текущий минимум составляет 21. Я не могу придумать обходной путь, чтобы получить желаемый результат.

Если я удалю

андроид: гравитация = центр

Результат:

введите здесь описание изображения

Это растягивает ic_audio, чтобы он соответствовал размеру предыдущего слоя (по крайней мере, я так думаю). Любые предложения или обходной путь?


person Ashutosh Patoa    schedule 29.06.2020    source источник
comment
Как вы создаете его сейчас программно? т. е. растянутая версия. Опубликуйте и этот код.   -  person AgentP    schedule 29.06.2020
comment
В настоящее время я не создаю его программно, загружая его из xml-ресурса: LayerDrawable layerDrawable = (LayerDrawable) context.getDrawable(R.drawable.media_art);   -  person Ashutosh Patoa    schedule 29.06.2020


Ответы (1)


Ну, вы можете использовать setLayerInset() вот так

  LayerDrawable layerDrawable = (LayerDrawable) context.getDrawable(R.drawable.layer);
  layerDrawable.setLayerInset(1,100,100,100,100);

где 1-й аргумент - индекс слоя

person AgentP    schedule 29.06.2020
comment
Просто обратите внимание: первый элемент слоя имеет индекс 0 - person guest; 16.03.2021