Java 与 XML 中的对齐创建按钮不正确

Incorrect alignment creating button in Java vs XML

我有这个XML:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/button_bar"
                style="?android:buttonBarStyle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

            <Button
                 style="?android:attr/borderlessButtonStyle"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:layout_gravity="center"
                 android:gravity="center"
                 android:textColor="@color/md_green_400" />

            <Button
                 android:id="@+id/action_button"
                 style="?android:attr/borderlessButtonStyle"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:layout_gravity="center"
                 android:gravity="center"
                 android:textColor="@color/md_green_400" />
  </LinearLayout>

它只是一个带有两个无边框按钮的按钮栏。有用。但是,我不想这样,我需要从 JSONArray 中扩充这些按钮。所以我这样做了:

   for (int b = 0; b < buttons.length(); b++) {
                    final JSONObject button = buttons.getJSONObject(b);
                    LinearLayout buttonBar = (LinearLayout) child.findViewById(R.id.button_bar);
                    View buttonChild = getLayoutInflater().inflate(R.layout.flat_button, null);
                    Button action = (Button) buttonChild.findViewById(R.id.action_button);
                    action.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {}
                    });
                    action.setText(button.getString("descricao"));
                    action.setTextColor(Color.parseColor(button.getString("text_color")));
                    buttonBar.addView(buttonChild);
   }

它也可以,但按钮左对齐。我希望他们有理由。 为什么当我让它们固定时它会起作用,但当我给它们充气时却不起作用?

OBS:"button_bar" 是一个 XML 只是一个 LinearLayout 而 "ActionButton" 只是一个 XML 和一个按钮。

这是您问题的根源:

View buttonChild = getLayoutInflater().inflate(R.layout.flat_button, null);

如果您不向 inflate() 方法提供父视图,则任何 LayoutParams 属性(例如 layout_gravity)都将被丢弃,因为父视图是解释这些属性的视图。

您可以通过将其更改为来解决此问题:

View buttonChild = getLayoutInflater().inflate(
        R.layout.flat_button, buttonBar, false);

这将为其提供您要附加到的父级,但不会将其附加到层次结构 yet(您在下面使用 addView() 执行此操作)。