У меня возникают некоторые проблемы с интервалом при создании части пользовательского интерфейса программным способом в Android 4.0. Я пытаюсь добавить стилизованные кнопки в стилизованный LinearLayout. Чтобы расставить кнопки одинаково, каждый из которых обернут в LinearLayout с весом 1. Я начал с макетом, определенным в XML (несколько из доказательства концепции,), который делает, как я ожидал:Программно добавлен LinearLayouts, неравномерно распределенный
<LinearLayout android:id="@+id/dialog_footer"
android:layout_width="500dp"
android:layout_height="wrap_content"
android:background="@drawable/dialog_footer">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center">
<Button android:id="@+id/cancel"
style="@style/Button"
android:layout_width="130dp"
android:layout_height="38dp"
android:text="Cancel" />
</LinearLayout>
<!-- Another LinearLayout with a nested Button like the one above -->
</LinearLayout>
К добавьте кнопки программно, я удалил внутренние LinearLayouts и поместил их в свой собственный файл макета, который я могу раздуть и добавить к внешнему LinearLayout в Java. Он почти идентичен.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center" >
<Button android:id="@+id/button"
style="@style/Button"
android:layout_width="130dp"
android:layout_height="38dp" />
</LinearLayout>
И это примерно, как я добавляю кнопки в коде:
LinearLayout dialogFooter = (LinearLayout)dialogView.findViewById(R.id.dialog_footer);
LinearLayout wrappedButton = (LinearLayout)getLayoutInflater().inflate(R.layout.dialog_button_wrapped, null);
Button button = (Button)wrappedButton.findViewById(R.id.button);
button.setText(R.string.button_one_text);
// button.setOnClickListener(...);
dialogFooter.addView(wrappedButton);
кнопки появляются, но теперь они сгруппированы вместе и сдвинута влево. Есть ли что-то, что делает Android, когда он анализирует макет, который мне нужно будет делать сам, если я добавлю в dialog_footer? Поскольку весы вступают в игру здесь, я думал, что вызов setWeightSum() в контейнере, который я добавляю (dialog_footer), может оказаться необходимым, но это не помогло. Есть ли у кого-нибудь идеи, что может вызвать разницу между подходами XML и Java?
попробуйте распечатать координаты и посмотреть, совпадают ли они с фактическим размещением – Jeeter