2

我有一门需要大约 100 个按钮的课程。我知道我可以这样编码:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/scroll"
    android:fillViewport="true"
    android:scrollbars="none"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="10dp"
    android:paddingBottom="65dp" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:background="@drawable/scrollviewborder"
        android:fillViewport="true" >

        <Button 
            android:id="@+id/b1"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b2"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b3"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b4"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b5"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b6"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b7"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b8"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b9"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b10"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b11"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b12"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b13"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b14"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b15"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b16"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b17"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b18"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b19"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 

        <Button 
            android:id="@+id/b20"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center"
            android:textSize="18sp" /> 
    </LinearLayout>
</ScrollView>

但这似乎不是很有效率,我知道如果我继续这样做,它很快就会发出警告,说我有太多的代码行。有没有更优雅的方法来做到这一点?XML 或 Java 都可以,无论哪种方式。

编辑

我的设计中有 100 个按钮引起了轩然大波。让我解释一下为什么。

这里有人玩 Android/Apple 应用程序 Candy Crush Saga 吗?您知道他们如何一次解锁一个 400 多个关卡吗?这与我正在做的类似,这就是为什么我需要这么多按钮。

在解释之后,如果我仍然做错了,请让我知道,因为我仍然是一个初学者 Android 程序员。

4

4 回答 4

3

尝试这样的事情:

for (int i=0; i<100; i++) {
    Button button = (Button) getLayoutInflater().inflate(R.layout.button_view, null);
    // Do stuff to your button, add onClickListeners, etc.
    rootView.addView(button);
}

您之前实例化rootView的 a或类似名称在哪里。LinearLayout

res/layout/button_view.xml是这样的:

<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
于 2013-06-14T13:27:16.947 回答
2

要正确执行此操作,请使用两步过程。首先要注意的是,您的每个按钮都有一个唯一的 ID。最好在 中声明您的所有 ID XML,以确保唯一性。所以第一步是设置你的 ids xml 文件(如果你真的不关心 id,你可以忽略它)。

在该res/values目录下,创建文件ids.xml,内容如下:

<resources>
    <item type="id" name="b1" />
    <item type="id" name="b2" />
    <item type="id" name="b3" />
    <item type="id" name="b4" />
    <item type="id" name="b5" />
    <item type="id" name="b6" />
    <item type="id" name="b7" />
    <item type="id" name="b8" />
    <item type="id" name="b9" />
    <item type="id" name="b10" />
    <item type="id" name="b11" />
    <item type="id" name="b12" />
    <item type="id" name="b13" />
    <item type="id" name="b14" />
    <item type="id" name="b15" />
    <item type="id" name="b16" />
    <item type="id" name="b17" />
    <item type="id" name="b18" />
    <item type="id" name="b19" />
    <item type="id" name="b20" />
    <item type="id" name="b21" />
    <item type="id" name="b22" />
    <item type="id" name="b23" />
    <item type="id" name="b24" />
    <item type="id" name="b25" />
    <item type="id" name="b26" />
    <item type="id" name="b27" />
    <item type="id" name="b28" />
    <item type="id" name="b29" />
    <item type="id" name="b30" />
    <item type="id" name="b31" />
    <item type="id" name="b32" />
    <item type="id" name="b33" />
    <item type="id" name="b34" />
    <item type="id" name="b35" />
    <item type="id" name="b36" />
    <item type="id" name="b37" />
    <item type="id" name="b38" />
    <item type="id" name="b39" />
    <item type="id" name="b40" />
    <item type="id" name="b41" />
    <item type="id" name="b42" />
    <item type="id" name="b43" />
    <item type="id" name="b44" />
    <item type="id" name="b45" />
    <item type="id" name="b46" />
    <item type="id" name="b47" />
    <item type="id" name="b48" />
    <item type="id" name="b49" />
    <item type="id" name="b50" />
    <item type="id" name="b51" />
    <item type="id" name="b52" />
    <item type="id" name="b53" />
    <item type="id" name="b54" />
    <item type="id" name="b55" />
    <item type="id" name="b56" />
    <item type="id" name="b57" />
    <item type="id" name="b58" />
    <item type="id" name="b59" />
    <item type="id" name="b60" />
    <item type="id" name="b61" />
    <item type="id" name="b62" />
    <item type="id" name="b63" />
    <item type="id" name="b64" />
    <item type="id" name="b65" />
    <item type="id" name="b66" />
    <item type="id" name="b67" />
    <item type="id" name="b68" />
    <item type="id" name="b69" />
    <item type="id" name="b70" />
    <item type="id" name="b71" />
    <item type="id" name="b72" />
    <item type="id" name="b73" />
    <item type="id" name="b74" />
    <item type="id" name="b75" />
    <item type="id" name="b76" />
    <item type="id" name="b77" />
    <item type="id" name="b78" />
    <item type="id" name="b79" />
    <item type="id" name="b80" />
    <item type="id" name="b81" />
    <item type="id" name="b82" />
    <item type="id" name="b83" />
    <item type="id" name="b84" />
    <item type="id" name="b85" />
    <item type="id" name="b86" />
    <item type="id" name="b87" />
    <item type="id" name="b88" />
    <item type="id" name="b89" />
    <item type="id" name="b90" />
    <item type="id" name="b91" />
    <item type="id" name="b92" />
    <item type="id" name="b93" />
    <item type="id" name="b94" />
    <item type="id" name="b95" />
    <item type="id" name="b96" />
    <item type="id" name="b97" />
    <item type="id" name="b98" />
    <item type="id" name="b99" />
    <item type="id" name="b100" />
</resources>

接下来,在代码中创建按钮:

for (int i = 0; i < 100; i++)
{
    Button button = new Button(this);
    int _id = getResources().getIdentifier("b" + (i+1), "id", this.getPackageName());
    button.setTag(_id);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, 0);
    params.weight = 1;
    params.gravity = Gravity.CENTER;
    button.setLayoutParams(params);
    button.setTextSize(18);
    myLinearLayout.addView(button);//myLinearLayout is your parent LinearLayout.
}
于 2013-06-14T13:50:41.170 回答
0

It's way more proper to do it in java.

LinearLayout lay = (LinearLayout) findViewById(R.id.your_liner_layout); // Get the liner layout

  for (i=0; i <= 100; i++) {
     Button btn = new Button(this); // Create a button

     btn.setGravity(Gravity.CENTER); // setting the gravity

     btn.setText("button number " + i); //setting the text

     LinearLayout.LayoutParams layout = new LayoutParams(LayoutParams.MATCH_PARENT, 0, 1); // Creating a LayoutParams : first args is the width, seconds the height and the last one the weight.

     lay.addView(btn, layout); // Adding the button to the linear layout
}
于 2013-06-14T13:34:20.630 回答
0

好吧,如果您需要这么多按钮,那么您无能为力。如果您想保持代码简短,可以在 Java 代码中使用循环,但我个人更喜欢 XML 版本,因为这样您就可以在 IDE 中看到您的布局。

我认为唯一值得做的是为这些按钮创建一种新样式。它们都有 18sp 的文本大小,您可能希望稍后添加一些其他属性。

此外,删除 layout_gravity="center" 和 layout_weight=1,它们对您的情况无效。

并且不要使用fill_parent,使用match_parent。

于 2013-06-14T13:30:45.817 回答