getX()不适用于按钮?

时间:2014-03-25 09:01:10

标签: android button coordinate

我使用以下方法获取我的按钮的x和y值。它总是返回0。可能是什么问题?

btn_show.setOnClickListener(new OnClickListener()
             {
                  @Override
                 public void onClick(View arg0) 
                 {
                       int x = (int)btn_show.getX();
                       int y=  (int)btn_show.getY();

                    Toast.makeText(getApplicationContext(), "button x is......"+x,Toast.LENGTH_SHORT ).show();
                    Toast.makeText(getApplicationContext(), "button y is......"+y,Toast.LENGTH_SHORT ).show();
     }
               });

我使用此方法将值传递给另一个活动

Intent i = new Intent(getApplicationContext(), CustomDialogExample.class);
                    i.putExtra("value",popup_height);
                    startActivity(i);

此方法检索值

Intent i = getIntent();
         int intValue = i.getIntExtra("value", 0);

最后这个设置我的弹出位置

Window window = customizeDialog.getWindow();
            WindowManager.LayoutParams wlp = window.getAttributes();
            wlp.y =intValue;
            window.setAttributes(wlp);

变量intValue总是返回0

4 个答案:

答案 0 :(得分:2)

您将'measuring'放在onWindowFocusChanged() - 方法中。 正如文档所述:

这是该活动是否对用户可见的最佳指标。

您也可以将它放在onResume()中,这是应用程序完全在屏幕上并且处于活动状态之前的最后一步,但是:

请记住,onResume不是您的活动对用户可见的最佳指标;诸如键盘锁之类的系统窗口可以在前面。使用onWindowFocusChanged(boolean)可以确定您的活动对用户可见(例如,恢复游戏)。

如果窗口/视图尚未显示,则无法保证其测量结果,因此以前的方法会更好。

答案 1 :(得分:2)

使用此功能。

btn_show.setOnTouchListener(new OnTouchListener() {

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    int x = (int)event.getX();
    int y = (int)event.getY();

   Toast.makeText(getApplicationContext(), "button x is......"+x,Toast.LENGTH_SHORT ).show();
   Toast.makeText(getApplicationContext(), "button y is......"+y,Toast.LENGTH_SHORT ).show();

  return false;
  }
  });

答案 2 :(得分:0)

你能先尝试这样做吗

Log.d("Button","Button description :"+btn_show.toString());

答案 3 :(得分:0)

尝试打印getX()和getY()返回的浮点值。问题可能在于整数转换。我尝试了你的代码,它和我一起工作正常。检查你的布局。