【问题标题】:Android GridLayout get row/columnAndroid GridLayout 获取行/列
【发布时间】:2014-06-02 22:58:50
【问题描述】:

我有一个带按钮的 3x3 GridLayout。这些按钮有一个 onTileClicked() 监听器。现在我想获得点击按钮在网格中的位置。这是我的代码:

public void onTileClicked(View view) {
    Button button = (Button) view;
    GridLayout.LayoutParams params = (LayoutParams) button.getLayoutParams();
}

但是我怎样才能得到点击按钮的行和列呢?有 params.columnSpec 但我不知道如何处理这个...

【问题讨论】:

    标签: java android layout listener grid-layout


    【解决方案1】:

    没有直接的方法来获取单元格的位置。但是,假设您知道 onItemClick 侦听器中的列数和行数,您可以计算单击按钮的位置:

        public void onItemClick(AdapterView parent, 
             View v, int position, long id) 
        {   
            int row_no=position/3;
            int col_no=position%3;
            .
            .
        }
    

    【讨论】:

      【解决方案2】:

      感谢您的回答 AmmarCSE,但我通过执行以下操作解决了问题:

      public void onTileClicked(View view) {
          Button button = (Button) view;
          if(button.getId()==R.id.btn00)onTileClicked(0, 0, button);
          else if(button.getId()==R.id.btn01)onTileClicked(0, 1, button);
          else if(button.getId()==R.id.btn02)onTileClicked(0, 2, button);
          else if(button.getId()==R.id.btn10)onTileClicked(1, 0, button);
          else if(button.getId()==R.id.btn11)onTileClicked(1, 1, button);
          else if(button.getId()==R.id.btn12)onTileClicked(1, 2, button);
          else if(button.getId()==R.id.btn20)onTileClicked(2, 0, button);
          else if(button.getId()==R.id.btn21)onTileClicked(2, 1, button);
          else if(button.getId()==R.id.btn22)onTileClicked(2, 2, button);
      }
      

      【讨论】:

      • AmmarCSE 的方式更加清晰,您的代码应该使用开关
      【解决方案3】:

      这可能是旧的,但我也寻找了解决方案,但仍然没有找到。 我需要根据用户对游戏的选择制作多行按钮。无法使用 ID,因为按钮的数量可能从 2x2 到 9x9 不等。

      我的按钮不需要有标题,所以这就是我所做的:

      layout = (GridLayout) findViewById(R.id.layoutPrincipal);
          context = this;        
          for(int i=0;i<rowCount;i++){
              for(int j=0;j<columnCount;j++){
                  Button mButon= new Button(this);
                  mButon.setText(""+i+""+j);
                  mButon.setTextColor(Color.TRANSPARENT);
      
                  mButon.setOnClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                          Button button = (Button) v;
      
      
                          //button.getText() allows me to retrieve the coordinates.
      
                          button.getText()
      
                       }
                  });     
                  layout.addView(mButon);
      
              }
          }
      

      当然,如果您需要按钮上的文字,这将不起作用。也许你可以使用标签?

      【讨论】:

        【解决方案4】:

        我面临同样的问题,目前唯一让我感到舒服的解决方案是修改课程并添加您需要的任何信息。 我的例子是

        class ImageView extends android.widget.ImageView {
            public ImageView(Context context) {
                super(context);
            }
        
            //the position of the plane head.
            int xPos,yPos;
        
            public void setPosInGrid(int x,int y) {
                xPos=x;yPos=y;
            }
        
            public int[] getPosInGrid() {
                int[] pos=new int[2];
                pos[0]=xPos;
                pos[1]=yPos;
                return pos;
            }
        }
        

        现在我们可以使用这个附加功能了。我们还可以重写 setLayoutParams 并将 setPosInGrid() 集成到其中。 不需要修改其他代码,除非您想要一个普通的 ImageView 只需使用完整标识符“androi.widget.ImageView”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-18
          • 2014-04-20
          • 2016-10-14
          • 2015-07-26
          • 1970-01-01
          • 1970-01-01
          • 2013-05-18
          相关资源
          最近更新 更多