以编程方式设置android xml

Posted

技术标签:

【中文标题】以编程方式设置android xml【英文标题】:Programmatically set android xml 【发布时间】:2014-07-23 22:28:29 【问题描述】:
<Button
    android:id="@+id/pin1"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin2"
    android:layout_toLeftOf="@+id/pin2"
    android:onClick="PIN"
    android:text="1" />

<Button
    android:id="@+id/pin2"
    android:layout_
    android:layout_
    android:layout_above="@+id/pin5"
    android:layout_alignLeft="@+id/pin5"
    android:onClick="PIN"
    android:text="2" />

<Button
    android:id="@+id/pin3"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin2"
    android:layout_toRightOf="@+id/pin2"
    android:onClick="PIN"
    android:text="3" />

<Button
    android:id="@+id/pin4"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin5"
    android:layout_toLeftOf="@+id/pin5"
    android:onClick="PIN"
    android:text="4" />

<Button
    android:id="@+id/pin5"
    android:layout_
    android:layout_
    android:layout_above="@+id/pin8"
    android:layout_alignLeft="@+id/pin8"
    android:onClick="PIN"
    android:text="5" />

<Button
    android:id="@+id/pin6"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin5"
    android:layout_toRightOf="@+id/pin5"
    android:onClick="PIN"
    android:text="6" />

<Button
    android:id="@+id/pin7"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin8"
    android:layout_toLeftOf="@+id/pin8"
    android:onClick="PIN"
    android:text="7" />

<Button
    android:id="@+id/pin8"
    android:layout_
    android:layout_
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:onClick="PIN"
    android:text="8" />

<Button
    android:id="@+id/pin9"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin8"
    android:layout_toRightOf="@+id/pin8"
    android:onClick="PIN"
    android:text="9" />

<Button
    android:id="@+id/pinclear"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin0"
    android:layout_toLeftOf="@+id/pin0"
    android:onClick="PIN"
    android:text="*" />

<Button
    android:id="@+id/pin0"
    android:layout_
    android:layout_
    android:layout_below="@+id/pin8"
    android:layout_alignLeft="@+id/pin8"
    android:onClick="PIN"
    android:text="0" />

<Button
    android:id="@+id/pincheck"
    android:layout_
    android:layout_
    android:layout_alignTop="@+id/pin0"
    android:layout_toRightOf="@+id/pin0"
    android:onClick="PIN"
    android:text="#" />

我将如何在 Activity 中进行编程? 如果有帮助,它应该是一个数字键盘。 它用于自定义视图中

我将如何在 Activity 中进行编程? 如果有帮助,它应该是一个数字键盘。 它用于自定义视图中

【问题讨论】:

【参考方案1】:

你需要使用 GridLayout

类似这样的:

GridLayout buttonLayout = new GridLayout(this);
buttonLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
buttonLayout.setOrientation(GridLayout.HORIZONTAL);
buttonLayout.setColumnCount(3); //Amount of colums


for(int i = 0; i < numberOfButtons; i++)

    Button b = new Button(this);
    b.setText(i);
    b.setPadding(5,5,5,5);
    b.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            //Do Something on click
        
    buttonLayout.addView(b);

要进行修复,您需要实例化 LayoutParams 变量和调用 b.setLayoutParams(paramsVariable)

【讨论】:

【参考方案2】:

您可以使用简单的 for 循环以编程方式轻松创建所有按钮,该循环重复添加所需布局上的所有按钮。(在以下情况下,线性布局)

LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags);
layout.setOrientation(LinearLayout.VERTICAL);  //Can also be done in xml by android:orientation="vertical"

for (int i = 0; i < 3; i++) 
LinearLayout row = new LinearLayout(this);
row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.WRAP_CONTENT));

for (int j = 0; j < 4; j++ 
    Button btnTag = new Button(this);
    btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    btnTag.setText("Button " + (j + 1 + (i * 4));
    btnTag.setId(j + 1 + (i * 4));
    row.addView(btnTag);


layout.addView(row);

【讨论】:

这会将第 8 个按钮 android:id="@+id/pin8" 放在中间吗?

以上是关于以编程方式设置android xml的主要内容,如果未能解决你的问题,请参考以下文章

Android以编程方式设置视图边距

Android:如何以编程方式设置 LinearLayout 边距

以编程方式设置的 Android 约束布局不正确

Android:以编程方式将颜色设置为 ProgressBar

Android - 以编程方式设置 TextView TextStyle?

以编程方式设置android xml