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()
执行此操作)。
我有这个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()
执行此操作)。