我可以以编程方式采用xml布局并重用它吗?

时间:2013-10-01 07:24:38

标签: android android-layout button

我有以下按钮

<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="5dp"
android:textSize="10sp"
android:text="Button" />

现在在我的代码中,我希望以编程方式根据某些因素制作动态数量的这些按钮。

现在我花了相当多的时间来尝试使用以下代码:

 Button txtName = new Button(getActivity(), null, android.R.attr.buttonStyleSmall);
    txtName.setClickable(false);
    txtName.setTextSize(5);
    txtName.setMaxLines(1);
    txtName.setMaxHeight(40);
    txtName.setMinHeight(0);
    txtName.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    txtName.setText(tagsList.get(i));

由于某些原因,代码没有按照我的意愿去做。请参阅我的其他问题:Other question

但是现在我的问题是,我可以从上面的按钮中获取该布局代码,然后使用它来制作重复按钮,就像使用列表适配器一样吗?

换句话说,我想要一个xml描述我的按钮布局,我想让它用于同一页面上的许多按钮?

3 个答案:

答案 0 :(得分:5)

您正在寻找的是膨胀。

目前,您的方法几乎没有使用XML。您正在使用代码中的某些属性创建一个实际的新按钮,而不是使用XML布局。 那也没关系,顺便说一句。

无论如何,如果你想使用你的XML布局/按钮,你想要使用Android的充气机: http://developer.android.com/reference/android/view/LayoutInflater.html

那看起来有点像这样;

LayoutInflater inflater = (LayoutInflater)context.getSystemService
      (Context.LAYOUT_INFLATER_SERVICE);
Button mButton = (Button) inflater.inflate(R.layout.button, null);

现在你的代码中有一个按钮,从你的按钮布局中膨胀了。 如果要将此多次添加到某个视图,您可能需要为每个按钮手动设置不同的标签或ID,以便以后识别它们。

答案 1 :(得分:3)

您可以使用此代码从布局中获取xml布局

Button button=(Button)LayoutInflater.from(MainActivity.this).inflate(R.layout.buttonlayout, null);

并根据需要使用它。

答案 2 :(得分:0)

在同一个Activity no中,每个XML视图必须连接到一个视图,但是你可以膨胀数十亿个按钮:)

final Button button = new Button(this);

        button.setText(day);
        final String whichDay = day;
        layout = (RelativeLayout) findViewById(R.id.newProgActivity);
        param = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        param.addRule(RelativeLayout.BELOW, activityTitle.getId());
        param.setMargins(0, margins, 0, 0);
        layout.addView(button, param);

现在您可以使用

将它们设置在彼此之下
button.setId()

然后子按钮将获得该id下面的规则.. 或者将它们锚定到xml中的单个视图,然后使用setmargins()