У меня есть несколько кнопок в формате RelativeLayout
, и я хочу поместить последнюю кнопку прямо под второй последней, но также и посередине экрана. Первоначально, когда мои кнопки были одна под другой, мой XML-файл выглядел примерно так:
// некоторые кнопки
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/ok"
android:layout_marginLeft="5dip"
android:layout_below="@id/entry"
android:text="Cancel" />
<Button
android:id="@+id/pickdate"
android:layout_width="100dip"
android:layout_height="40dip"
android:layout_below="@id/cancel"
android:layout_marginTop="25dip"
android:layout_marginLeft="30dip"
android:text="Set Date" />
но когда я хотел установить LeftMargin
кнопки «установить дату» (последней) на "width of screen" / 2
, мне пришлось кодировать ее на Java, получая ширину с помощью getWindowManager.getDefaultDisplay()
. Но при его выполнении казалось, что атрибуты XML, определенные для последней кнопки (только параметры макета), игнорируются. Я предполагаю, что это потому, что Java-код анализируется после XML, и он переопределяет поведение, определенное в XML. Мне пришлось установить все атрибуты макета в самом файле Java SRC. Вот код Java:
Display display = getWindowManager().getDefaultDisplay();
int w = display.getWidth();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(w/2, 25, 0, 0);
params.width = 200;
params.height = 50;
params.addRule(RelativeLayout.BELOW, R.id.cancel);
datepick.setLayoutParams(params);
Только для одного атрибута. Мне пришлось установить все атрибуты в Java. Есть ли способ обойти это? Что-то вроде ссылки на мою переменную w
в XML ... любые предложения помогут.