在 Android 4.0 中以编程方式构建 UI 的一部分时,我遇到了一些间距问题。我正在尝试将风格化按钮添加到风格化的 LinearLayout。为了使按钮的间距相等,每个按钮都包装在一个权重为 1 的 LinearLayout 中。我从一个用 XML 定义的布局开始(有点概念证明),其呈现方式与我期望的一样:
<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 并将它们放在自己的布局文件中,我可以将其膨胀并添加到 Java 中的外部 LinearLayout 中。它几乎相同。
<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);
按钮出现,但现在它们被组合在一起并移动到左侧。如果我要添加到 dialog_footer,Android 在解析我需要自己做的布局时是否会做一些事情?由于权重在这里发挥作用,我认为在我添加到 (dialog_footer) 的容器上调用 setWeightSum() 可能是必要的,但这并没有帮助。有没有人知道什么可能导致 XML 和 Java 方法之间的差异?