以编程方式创建 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);

希望对您有所帮助