【问题标题】:Center elements in LinearLayout after creating it programmatically以编程方式创建LinearLayout后的中心元素
【发布时间】:2015-12-28 09:59:47
【问题描述】:

我正在运行时创建一个 LinearLayout,我在其中添加了两个元素:一个文本视图和一个微调器。 我想在 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);

如果有人可以帮助我,那就太好了!谢谢:)

【问题讨论】:

    标签: android android-layout position android-linearlayout center


    【解决方案1】:

    因为您必须将重力设置为线性布局本身,所以只需在设置线性布局参数后放置这条线

    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);
    

    希望对你有帮助

    【讨论】:

    • 非常感谢!在运行时生成布局和定位有点棘手!
    • 这很棘手,但很有效。为什么布局本身需要它而布局参数的设置没有任何效果?
    【解决方案2】:

    问题是你从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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多