【问题标题】:Creating Imagebutton programmatically以编程方式创建 Imagebutton
【发布时间】:2013-05-07 10:40:10
【问题描述】:

我想以编程方式创建几个 ImageButton。我可以创建它们,但单击事件侦听器始终接收相同的视图(按钮 2),无论我单击按钮 0、按钮 1 还是按钮 2。

    RelativeLayout gameBoard = (RelativeLayout) findViewById(R.id.RelGameboard);

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    lp.addRule(RelativeLayout.CENTER_IN_PARENT,1);

    for(int i = 0 ; i <  3 ; i++)
    {

        ImageButton btnGreen = new ImageButton(this);
        btnGreen.setImageResource(R.drawable.bola_verde);
        btnGreen.setLayoutParams(lp);
        btnGreen.setOnClickListener(mGreenBallOnClickListener);
        btnGreen.setBackgroundColor(Color.TRANSPARENT); 
        btnGreen.setTag(i);
        btnGreen.setId(i);

                    gameBoard.addView(btnGreen);


     }'

点击事件监听器:

private View.OnClickListener mGreenBallOnClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        //check which green ball was clicked
        ImageButton imgBtn = (ImageButton) v;

    Log.i("greeny","Clicked on green ball->"+imgBtn.getTag()+" v.ID->"+v.getId());
    }
};

对于绘制的任何图像按钮,当我点击时,我得到:点击绿色球->2 v.ID->2

按钮位于不同的位置(我为每个按钮设置了不同的填充,但为了简化代码我没有放在这里)

【问题讨论】:

    标签: android click imagebutton


    【解决方案1】:

    尝试添加onClickListener -

    private View.OnClickListener ClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int selected_item = (Integer) v.getTag();
        }
    };
    

    编辑

    尝试创建一个 ImageButtons 数组 -

    ImageButton[] btnGreen = new ImageButton[3];
    
    for (int i = 0; i < 3; i++) {
        btnGreen[i] = new ImageButton(this);
        btnGreen[i].setImageResource(R.drawable.bola_verde);
        btnGreen[i].setLayoutParams(lp);
        btnGreen[i].setOnClickListener(ClickListener);
        btnGreen[i].setBackgroundColor(Color.TRANSPARENT); 
        btnGreen[i].setTag(i);
        btnGreen[i].setId(i);
    
        gameBoard.addView(btnGreen[i]);
    }
    

    【讨论】:

    • erm.. 我已经这样做了.. 我不断收到相同的标签,这就是问题所在。我在该参数“View v”中收到相同的按钮
    • 那将崩溃。你甚至没有初始化每个 ImageButton 对象。
    【解决方案2】:

    发生这种情况是因为您没有设置按钮布局,所有按钮都在同一个位置。

    Use Aboveof,Belowof,left,right,center
    

    Example

    params.addRule(RelativeLayout.ALIGN_PARENT_ABOVE);  
        relativeLayout.addView(button, params);
    

    【讨论】:

    • 抱歉,我简化了代码并隐藏了我在该定义之后设置的填充。按钮位于不同的位置。
    【解决方案3】:

    试试这个代码:

    RelativeLayout gameBoard = (RelativeLayout)findViewById(R.id.RelGameboard);
    
    ImageButton[] imageButtons;
    
    private final int NUMBER_OF_IMAGE_BUTTONS = 5; //your number of image buttons
    
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    
    lp.addRule(RelativeLayout.CENTER_IN_PARENT,1);
    
    imageButtons = new ImageButton[NUMBER_OF_IMAGE_BUTTONS];
    
    for(int i = 0 ; i < NUMBER_OF_IMAGE_BUTTONS; i++){
       imageButtons[i] = new ImageButton(this);
       imageButtons[i].setImageResource(R.drawable.bola_verde);
       imageButtons[i].setLayoutParams(lp);
       imageButtons[i].setOnClickListener(mGreenBallOnClickListener);
       imageButtons[i].setBackgroundColor(Color.TRANSPARENT); 
       imageButtons[i].setTag(i);
       imageButtons[i].setId(i);
       gameBoard.addView(imageButtons[i]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多