以编程方式创建 LinearLayout 后居中元素
Center elements in LinearLayout after creating it programmatically
我在运行时创建了一个 LinearLayout,我在其中添加了两个元素:textview 和 spinner。
我想在 LinearLayout 中将它们水平居中,但不知道该怎么做。下面是我用来创建视图的代码:
LinearLayout leftSideAttributLayout = new LinearLayout(this);
leftSideAttributLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams attributLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
leftSideAttributLayout.setLayoutParams(attributLayoutParams);
LinearLayout.LayoutParams leftLabelParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
leftLabelParams.gravity = Gravity.CENTER;
leftAttributLabel.setLayoutParams(leftLabelParams);
TextView leftAttributLabel = new TextView(this);
leftAttributLabel.setText(attribut.getNom());
leftAttributLabel.setTextColor(Color.WHITE);
Tools.applyFont(getApplicationContext(), leftAttributLabel, "gothic_0.TTF");
LinearLayout.LayoutParams spinnerParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
spinnerParams.gravity = Gravity.CENTER_HORIZONTAL;
spinnerParams.setMargins(10, 0, 0, 0);
Spinner leftAttributValues = new Spinner(this);
leftAttributValues.setLayoutParams(spinnerParams);
leftAttributValues.setAdapter(adapter);
leftAttributValues.setBackgroundResource(R.drawable.lenti_attributspinner);
leftAttributValues.setTag(attribut);
如果有人能帮助我,那就太好了!谢谢:)
问题是你从 Layout
获取参数,而不是从 Spinner
,所以你的属性大小是全屏的,这使得重力修改无效。
使用这个:
Spinner leftAttributValues = new Spinner(this);
leftAttributValues.setAdapter(adapter);
leftAttributValues.setBackgroundResource(R.drawable.lenti_attributspinner);
leftAttributValues.setTag(attribut);
// get actual spinner params
LayoutParams params = (LayoutParams) leftAttributValues.getLayoutParams();
// modify desired params
params.gravity = Gravity.CENTER_HORIZONTAL;
params.setMargins(10, 0, 0, 0);
// set modified params to spinner again
leftAttributValues.setLayoutParams(params);
因为你必须将 gravity 设置为 linearlayout 本身所以只需在设置你的线性布局参数后放置此行
leftSideAttributLayout.setGravity(Gravity.CENTER);
这是您的代码示例
LinearLayout leftSideAttributLayout = new LinearLayout(this);
leftSideAttributLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams attributLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
attributLayoutParams.gravity = Gravity.CENTER;
leftSideAttributLayout.setLayoutParams(attributLayoutParams);
leftSideAttributLayout.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams leftLabelParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//leftLabelParams.gravity = Gravity.CENTER;
TextView leftAttributLabel = new TextView(this);
leftAttributLabel.setText("sample");
leftAttributLabel.setTextSize(25);
leftAttributLabel.setLayoutParams(leftLabelParams);
LinearLayout.LayoutParams spinnerParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
// spinnerParams.gravity = Gravity.CENTER;
spinnerParams.setMargins(10, 0, 0, 0);
Spinner leftAttributValues = new Spinner(this);
leftAttributValues.setLayoutParams(spinnerParams);
leftSideAttributLayout.addView(leftAttributLabel);
leftSideAttributLayout.addView(leftAttributValues);
mainview.addView(leftSideAttributLayout);
希望对您有所帮助
我在运行时创建了一个 LinearLayout,我在其中添加了两个元素:textview 和 spinner。 我想在 LinearLayout 中将它们水平居中,但不知道该怎么做。下面是我用来创建视图的代码:
LinearLayout leftSideAttributLayout = new LinearLayout(this);
leftSideAttributLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams attributLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
leftSideAttributLayout.setLayoutParams(attributLayoutParams);
LinearLayout.LayoutParams leftLabelParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
leftLabelParams.gravity = Gravity.CENTER;
leftAttributLabel.setLayoutParams(leftLabelParams);
TextView leftAttributLabel = new TextView(this);
leftAttributLabel.setText(attribut.getNom());
leftAttributLabel.setTextColor(Color.WHITE);
Tools.applyFont(getApplicationContext(), leftAttributLabel, "gothic_0.TTF");
LinearLayout.LayoutParams spinnerParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
spinnerParams.gravity = Gravity.CENTER_HORIZONTAL;
spinnerParams.setMargins(10, 0, 0, 0);
Spinner leftAttributValues = new Spinner(this);
leftAttributValues.setLayoutParams(spinnerParams);
leftAttributValues.setAdapter(adapter);
leftAttributValues.setBackgroundResource(R.drawable.lenti_attributspinner);
leftAttributValues.setTag(attribut);
如果有人能帮助我,那就太好了!谢谢:)
问题是你从 Layout
获取参数,而不是从 Spinner
,所以你的属性大小是全屏的,这使得重力修改无效。
使用这个:
Spinner leftAttributValues = new Spinner(this);
leftAttributValues.setAdapter(adapter);
leftAttributValues.setBackgroundResource(R.drawable.lenti_attributspinner);
leftAttributValues.setTag(attribut);
// get actual spinner params
LayoutParams params = (LayoutParams) leftAttributValues.getLayoutParams();
// modify desired params
params.gravity = Gravity.CENTER_HORIZONTAL;
params.setMargins(10, 0, 0, 0);
// set modified params to spinner again
leftAttributValues.setLayoutParams(params);
因为你必须将 gravity 设置为 linearlayout 本身所以只需在设置你的线性布局参数后放置此行
leftSideAttributLayout.setGravity(Gravity.CENTER);
这是您的代码示例
LinearLayout leftSideAttributLayout = new LinearLayout(this);
leftSideAttributLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams attributLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
attributLayoutParams.gravity = Gravity.CENTER;
leftSideAttributLayout.setLayoutParams(attributLayoutParams);
leftSideAttributLayout.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams leftLabelParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//leftLabelParams.gravity = Gravity.CENTER;
TextView leftAttributLabel = new TextView(this);
leftAttributLabel.setText("sample");
leftAttributLabel.setTextSize(25);
leftAttributLabel.setLayoutParams(leftLabelParams);
LinearLayout.LayoutParams spinnerParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
// spinnerParams.gravity = Gravity.CENTER;
spinnerParams.setMargins(10, 0, 0, 0);
Spinner leftAttributValues = new Spinner(this);
leftAttributValues.setLayoutParams(spinnerParams);
leftSideAttributLayout.addView(leftAttributLabel);
leftSideAttributLayout.addView(leftAttributValues);
mainview.addView(leftSideAttributLayout);
希望对您有所帮助