Android,以编程方式布局按钮视图?

Posted

技术标签:

【中文标题】Android,以编程方式布局按钮视图?【英文标题】:Android, programmatically layout a button view? 【发布时间】:2010-10-28 15:43:01 【问题描述】:

我正在尝试以编程方式定义我的程序布局并在某个位置添加一个按钮。我没有使用布局 xml 作为内容视图。

RelativeLayout mainLayout;
    mainLayout = new RelativeLayout(this);
    mainLayout.setLayoutParams(new
LayoutParams(LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT));

然后我添加了一个我想应用属性的按钮

layout align center
parent align left
height 60px
width 60px

这是目前为止的按钮

Button BtnNext = new Button(this);
    BtnNext.setWidth(60);
    BtnNext.setHeight(60);
    BtnNext.setFocusable(true);
    BtnNext.setId(idBtnNext);
    BtnNext.setText("Next");
    mainLayout.addView(BtnNext, 1);

高度和宽度不能正常工作。

【问题讨论】:

您能否更具体地说明它是如何“无法正常工作”的?您可能还想考虑使用 DIP 而不是 PX 已经在下面回答了,这是一个密度问题。我感到困惑的原因是,即使我输入像素,布局编辑器也能很好地设置它,但我猜它会自动检测和校正 DPI(或如前所述转换为倾斜) 【参考方案1】:

您好,您可以通过设置布局参数来尝试

  RelativeLayout.LayoutParams rel_btn = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  rel_btn.height = 60;
  rel_btn.width = 60;
  BtnNext.setLayoutParams(rel_btn);

您还可以通过设置相关布局参数来为 Button 添加规则和设置边距,例如

 rel_btn.addRule(RelativeLayout.CENTER_VERTICAL);
 rel_btn.leftMargin = 220;

【讨论】:

【参考方案2】:

高度和宽度不会如您所愿,因为您没有使用与密度无关的像素 (dip) 您在此处设置的值以像素为单位 您可以通过final float scale = getResources().getDisplayMetrics().density; int dip = (int) (60 * scale + 0.5f);将像素转换为倾角 你会得到更准确的结果

【讨论】:

以上是关于Android,以编程方式布局按钮视图?的主要内容,如果未能解决你的问题,请参考以下文章

Android:当布局已经包含按钮时,如何以编程方式覆盖整个布局?

android以编程方式将自定义按钮添加到布局

以编程方式在相对布局中定位按钮

约束布局中以编程方式添加的按钮将忽略约束 - Android

在线性布局中以编程方式编辑视图

安卓。以编程方式的材料设计按钮