【问题标题】:Button that generates another Button in android studio在android studio中生成另一个按钮的按钮
【发布时间】:2018-08-15 14:41:19
【问题描述】:

所以问题是,我如何在 android studio 中制作一个 buttonGenerator(具有唯一的文本、唯一的 ID 和唯一的名称 [例如取消签名 for 循环,传递他们的名字])。我已经测试了一些编码,但我总是遇到一些错误(例如:创建的按钮应该出现在图层上的哪个位置,...)并且每次用户单击 ButtonGenerator 时,创建的按钮应该出现在下面最后创建的按钮(例如在 LinearLayout 中)。 我已经尝试过可见和不可见,但我认为这不是正确的方法。我已经有一个 Button,每次用户单击该按钮时,都会创建另一个 Button。

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

    //buttons
    btnCreate= (ImageButton)findViewById(R.id.btnCreateID);
    btnDelete= (ImageButton)findViewById(R.id.btnDeleteID);
    btnCheck=(ImageButton)findViewById(R.id.btnCheckID);
    getTime = (ImageButton) findViewById(R.id.getTimeID);


    //Textviews
    txt= (TextView)findViewById(R.id.txtID);
    timeText= (TextView)findViewById(R.id.timeTextID);

    //image
    numImage = (ImageView)findViewById(R.id.numImageID);

    //Edittexts
    getTxt= (EditText)findViewById(R.id.getTxtID);

    //change visibility
    btnDelete.setVisibility(View.INVISIBLE);
    getTime.setVisibility(View.INVISIBLE);
    btnCheck.setVisibility(View.INVISIBLE);
    txt.setVisibility(View.INVISIBLE);
    timeText.setVisibility(View.INVISIBLE);
    getTxt.setVisibility(View.INVISIBLE);
    numImage.setVisibility(View.INVISIBLE);



    btnCreateClick();
}

//hit Add
public void btnCreateClick() {

    btnCreate.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            getTxt.setVisibility(View.VISIBLE);
            getTime.setVisibility(View.VISIBLE);
            btnCheck.setVisibility(View.VISIBLE);

            btnCreate.setVisibility(View.INVISIBLE);

            onGetTimeClick();
            btnCheckClick();
            btnDeleteClick();

        }
    });
}

【问题讨论】:

    标签: android android-studio button


    【解决方案1】:

    您可以创建一个按钮并将其添加到布局中,如下所示:

    Button myButton = new Button(this);
    myButton.setText(name);
    LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);
    ll.addView(myButton);
    

    如果布局是垂直布局,则新按钮将添加到现有按钮下方。

    【讨论】:

      【解决方案2】:

      您可以创建一个按钮并将其添加到布局中,如下所示:

      Button myButton = new Button(this);
      myButton.setText(name);
      myButton.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
      myButton.setId(generateButtonId());
      LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);
      ll.addView(myButton);
      

      如果布局是垂直布局,则新按钮将添加到现有按钮下方。

      这些是用于生成唯一 ID 的函数

      private int generateButtonId(){
          int id = getRandomNumber();
         try {
             String name = getResources().getResourceName(id);
         }catch (Resources.NotFoundException ex) {
             return id;
         }
          return generateButtonId();
      
      }
      
      private int getRandomNumber() {
          int min = 10;
          int max = 3000;
      
          Random r = new Random();
          int id = r.nextInt(max - min + 1) + min;
          return id;
      }
      

      以下是我使用的参考资料

      Checking to see if an ID exists in resources (R.id.something)

      How can I generate random number in specific range in Android?

      【讨论】:

        【解决方案3】:

        所以,这对我有用,并且感谢您的 4 个回答:

        Button btn;
        private Button[] newBTN;
        LinearLayout linearLayout;
        static int i=1;
        static LinearLayout.LayoutParams params;
        
        
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        
            btn= (Button)findViewById(R.id.addBTN);
            btn.setText("Add");
            linearLayout = (LinearLayout) findViewById(R.id.linear);
            linearLayout.setOrientation(LinearLayout.VERTICAL);
        
            params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
        
        
        
            btn.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
        
                    newBTN = new Button[99];
                    newBTN[i] = new Button(MainActivity.this);
        
                    //params.addRule(LinearLayout.BELOW, R.id.i);
        
        
                    newBTN[i].setLayoutParams(params);
                    newBTN[i].setText("Button "+i);
                    newBTN[i].setId(i);
        
                    //add button to the layout
                    linearLayout.addView(newBTN[i]);
        
        
                    Toast.makeText(MainActivity.this, "Button"+ +i+"/ ID "+String.valueOf(newBTN[i].getId()), Toast.LENGTH_SHORT).show();
                    i++;
                }
            });
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-05
          • 2017-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-17
          相关资源
          最近更新 更多