Android - 如何动态地根据屏幕大小和按钮下方以编程方式添加按钮?

时间:2016-04-11 08:18:17

标签: java android button layout

我在制作Android应用时遇到了一些问题。 我希望有一个响应和动态的应用程序。

当用户点击按钮时,我想动态添加按钮,这是我的代码:

 @Override
public boolean onOptionsItemSelected(MenuItem item) {


    switch (item.getItemId()) {
        case R.id.action_ajouter:

            Button b = new Button(this);


               //numButton counts the number of buttons created by
              //clicking on a button placed in the action bar

                if (numButton % 2 != 0) {
                    //Align to the left

                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                    b.setLayoutParams(params);
                    b.setText("Bouton n°" + numButton);
                    mainRelativeLayout.addView(b);
                    numButton++;

                } else {
                    //Align to the right
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                    b.setLayoutParams(params);
                    b.setText("Bouton n°" + numButton);
                    mainRelativeLayout.addView(b);
                    numButton++;
                }

            break;
        default:
            break;
    }
    return true;


    }

问题是: 我需要并排添加两个按钮,而其他按钮则会并排(也是并排)。问题是他们正在叠加它们而不是添加到其他地方之下。

1 个答案:

答案 0 :(得分:1)

您的按钮彼此重叠,因为您的布局参数不合适:

params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                b.setLayoutParams(params);
                b.setText("Bouton n°" + numBoutton);

使用上面的代码,所有按钮都将与父对齐。

如果您想在其他人旁边添加按钮,最好使用LinearLayout而不是RelativeLayout。

假设您已经有一个水平方向的线性布局。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                b.setLayoutParams(params);
                b.setText("Bouton n°" + numBoutton);
                mainLinearLayout.addView(b);
                numBoutton++;

这就是全部。

编辑:这里有一些代码,不知道这是否是您的需要。

在这个应用程序中,我在ScrollView和Button中有一个LinearLayout。当我单击按钮时,我向ScrollView添加了新按钮。

MainActivity.java

package com.tiennt.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    private LinearLayout llButtons;
    private int buttonCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnAdd = (Button) findViewById(R.id.btn_add);
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doAddButton();
            }
        });
        llButtons = (LinearLayout) findViewById(R.id.ll_buttons);
    }

    private void doAddButton() {
        Button button = new Button(this);
        button.setText("Button " + ++buttonCount);
        button.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        llButtons.addView(button);
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.tiennt.myapplication.MainActivity">

    <Button
        android:id="@+id/btn_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ADD BUTTON"
        android:layout_gravity="center_horizontal" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:id="@+id/ll_buttons"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" />

    </ScrollView>

</LinearLayout>

结果如下: Result