单击按钮时添加更多按钮

时间:2016-10-31 23:15:10

标签: android android-layout android-button

请查看以下算法并告诉我是否可以实现它:

  1. 创建一个main_activity
  2. 在main_activity内部,创建一个简单的Button
  3. 按钮标记为"添加按钮"
  4. 一旦用户点击Button,就会创建一个额外的Button并将其放置在Activity中。
  5. 换句话说:
    一旦用户点击添加按钮,它应该创建另一个按钮和 把它放在"添加按钮"按钮。

    我提前道歉,因为这可能令人困惑,所以请随时发表评论并要求澄清。

    我最初想过创建一个单独的方法,我会在其中创建一个ButtonView,但我不确定如何在物理上创建一个Button。

    我是否还需要将代码应用于.xml文件? 我真的很困惑。

    这是我的代码:

    MainActivity.java
    
        package inc.fimp;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button addArm = (Button) findViewById(R.id.btnAddArm);
            addArm.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    addButton();
                }
            });
        }
    
        public boolean onCreateOptionsMenu(Menu menu){
            MenuInflater menuInflater = getMenuInflater();
            menuInflater.inflate(R.menu.menu_main, menu);
    
    
    
            return true;
        }
    
        public boolean onOptionsItemSelected(MenuItem item){
            int res_id = item.getItemId();
            if(res_id==R.id.action_contact)
            {
                Toast.makeText(getApplicationContext(), "You selected Contacted us option", Toast.LENGTH_SHORT).show();
            }
    
            if(res_id==R.id.action_settings){
                Toast.makeText(getApplicationContext(), "You selected Settings Option", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    
        public void addButton(){
    
            // create an aditional button
    
    
    
        }
    }
    

    xml文件代码

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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: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="inc.fimp.MainActivity">
    
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/add_arm"
            android:textStyle="italic"
            android:id="@+id/btnAddArm"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/addarm"
            android:singleLine="false" />
    </RelativeLayout>
    

1 个答案:

答案 0 :(得分:0)

首先向父布局添加ID

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/buttonContainer"

然后,用findViewById得到它。仅使用ViewGroup,因为这是获取addView方法所需的全部内容。

public class MainActivity extends AppCompatActivity {

    private ViewGroup rootView;

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

        rootView = (ViewGroup) findViewById(R.id.buttonContainer);

然后,在addButton

Button button = new Button(MainActivity.this); // Need to provide the context, the Activity
// button.setText("Added!"); // for example

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
params.addRule(RelativeLayout.BELOW, R.id.btnAddArm);

// params.addRule ... (there's a bunch you can add)

rootView.addView(button, params);

由于您拥有RelativeLayout,因此您还可以通过编程方式将LayoutParams放置在上方/下方等布局,以及其他视图。