Это может быть просто плохой практикой, но графический интерфейс Android, как всегда, меня расстраивает. У меня есть это автономное представление, называемое primary_button в res/layout:
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/primary_button"
android:textColor="@color/light_warm_gray"/>
и его настраиваемая фоновая форма «primary_button» в res/drawable:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/light_olive" />
<corners android:radius="10dp"/>
<size android:height="40dp" android:width="40dp" />
</shape>
Теперь проблема в том, что когда я устанавливаю layout_margin равным 10dp, ничего не устанавливается, потому что в тот момент, когда я надуваю эту строку:
Button b = (Button)View.inflate(this, R.layout.primary_button, null);
у него нет родительского макета (очевидно, необходимо установить параметры макета). Мне нужен аккуратный код, а постоянное задание *Layout.LayoutParams в коде — это боль.
Заполнение формы и заполнение кнопок делали не то, что я хотел, а то, для чего они предназначены. (В этом случае они просто увеличили форму кнопки)
Еще один способ, о котором я подумал, заключался в том, чтобы установить вокруг него обводку с нулевой альфой, но это ужасное решение.
Интересно, как с этим справляются стоковые кнопки. Я имею в виду, что они просто оставляют хороший запас между ними (около 15 dp?) без необходимости устанавливать параметры макета. Разве это не должно происходить и с пользовательским представлением?