У меня есть пользовательский вид, определенный этим XMLатрибут Android XML ссылается другой атрибут XML того же типа
(часть)
<LinearLayout style="@style/LayoutVertWrapContent.SameWidth"
android:layout_weight="2"
android:layout_marginRight="?betweenElementsPadding">
...
some inner views
...
</LinearLayout>
<LinearLayout style="@style/LayoutVertWrapContent.SameWidth"
android:layout_weight="2"
android:layout_marginRight="?betweenElementsPadding">
...
some inner views
...
</LinearLayout>
Для этой точки зрения я объявил некоторые атрибуты:
<declare-styleable name="TheView">
...
<attr name="betweenElementsPadding" format="dimension" />
</declare-styleable>
Как я могу объявить этот вид в макете xml для действия и передать междуElementsPadding, так что android:layout_marginRight="?betweenElementsPadding"
из XML-файла вида?
<com.blablabla.TheView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="@dimen/background_padding" />
Желаемый результат android:layout_marginRight
для обоих LinearLayouts установлен в betweenElementsPadding.
UPDATE 1
Для предотвращения дальнейших недоразумений, я хочу иметь униформу способа изменения ДКПА: betweenElementsPadding, скажет
<com.blablabla.TheView
android:id="@+id/date_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="3dp" />
<com.blablabla.TheView
android:id="@+id/date_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="15dp" />
<com.blablabla.TheView
android:id="@+id/date_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
dct:betweenElementsPadding="25dp" />
и в каждом из этих случаев я хочу LinearLayout .layout_marginRight будет установлено точное значение dct: betweenElementsPadding, который является 3dp, 15dp и 25dp, начиная с первого.
ОБНОВЛЕНИЕ 2
Используя обходной путь, частично предложенный Джо. В стиле конструктора пользовательского вида я делаю это:
// set betweenElementsPadding
final int betweenElementsPadding = array.getDimensionPixelSize(R.styleable.TheView_betweenElementsPadding, 0);
((LinearLayout.LayoutParams)((LinearLayout)findViewById(R.id.layout_1)).getLayoutParams()).rightMargin = betweenElementsPadding;
((LinearLayout.LayoutParams)((LinearLayout)findViewById(R.id.layout_2)).getLayoutParams()).rightMargin = betweenElementsPadding;
Но я не нашел ответа на мой первоначальный вопрос о том, как сделать то же самое только с XML.
Извините. Это не помогает. Я хочу иметь унифицированный способ изменения атрибута при объявлении представления в макете XML. Посмотрите: ' .... .' и т. д., и в каждом из этих случаев я устанавливаю ** между ElementsPadding **, и я хочу ** layout_marginRigh ** для LinearLayouts ** TheView ** автоматически изменять это значение. Вы предлагаете мне объявить ** stlye ** для каждого нового отдельного значения ** междуElementsPadding **. –
Нет в этом случае, возможно, это не так полезно ... но если вы хотите только объявить 'layout_marginRight', я все еще не могу найти использование записи' dct: betweenElementsPadding = sth' вместо 'layout_marginRight = sth' – madlymad
Пожалуйста, проверьте обновления в вопросе выше. В нескольких словах ваш подход не будет работать, потому что я хочу объявить несколько пользовательских представлений с разными 'layout_marginRight' для каждого из них. Учтите, что 'layout_marginRight' находится не в XML-макете активности, а в глубине XML-файла настраиваемого представления, к которому я не хочу прикасаться. –