Adding more Buttons when a Button in clicked

坚强是说给别人听的谎言 提交于 2019-12-08 10:57:55

问题


Please look at the following algorithm and tell me if I can achieve it:

  1. create a main_activity
  2. inside the main_activity, create a simple Button
  3. the Button is labeled as "Add Button"
  4. once the users clicks the Button, an additional Button is created and placed in the Activity.

In other words:
once the user clicks on the add Button, it should create another Button and place it under the "Add Button" Button.

I apologize in advance as this may be confusing, so please feel free to comment and ask for clarification.

I originally thought about creating a separate method, in which I would create a ButtonView, but I am not sure how I can physically create a Button.

Would I need to apply code to .xml file also?
I am really confused.

Here is my code:

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 file code

<?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:


Start by adding an ID to the parent layout

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

Then, get that with findViewById. ViewGroup simply used because that is all you need to get the addView method.

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);

Then, in the 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);

Since you have a RelativeLayout, you can also programmatically put LayoutParams to do layout above/below, etc. other views.



来源:https://stackoverflow.com/questions/40351942/adding-more-buttons-when-a-button-in-clicked

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!