相关疑难解决方法(0)

如何获取视图的绝对坐标

我正在尝试获取视图左上角的绝对屏幕像素坐标.但是,我可以找到的所有方法,例如getLeft()并且getRight()不起作用,因为它们似乎都相对于视图的父级,因此给了我0.这样做的正确方法是什么?

如果它有帮助,这是为了"让图片重新整理"游戏.我希望用户能够绘制一个框来选择多个部分.我的假设是,做到这一点的最简单方法是getRawX(),并getRawY()MotionEvent再兑布局保持件的左上角比较这些值.知道了件的大小,我就可以确定已经选择了多少件.我知道我可以使用getX()getY()MotionEvent,而是作为一个返回相对位置,使得确定哪个被选择件更困难.(我知道,这并非不可能,但似乎不必要地复杂化).

编辑:这是我用来尝试获取保持容器大小的代码,根据其中一个问题.TableLayout是包含所有拼图的表.

TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
Run Code Online (Sandbox Code Playgroud)

编辑2:这是我尝试过的代码,遵循更多建议的答案.

public int[] tableLayoutCorners = new int[2];
(...)

TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
            + ", " + corners.bottom);

cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " …
Run Code Online (Sandbox Code Playgroud)

android android-tablelayout

376
推荐指数
9
解决办法
27万
查看次数

如何在dispatchTouchEvent中检测MotionEvent

我做了一个FragmentActivity.一些碎片包括一个EditText.

我想,当软输入键盘启动并MotionEvent发生时 - 除了在EditText内部单击的事件 - 要隐藏的软输入.到现在为止,我在MainActivity中编写了这段代码:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

    InputMethodManager im = (InputMethodManager) getApplicationContext()
                                  .getSystemService(Context.INPUT_METHOD_SERVICE);
    im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(),
                                   InputMethodManager.HIDE_NOT_ALWAYS);
    return super.dispatchTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作.但是当我在EditText中单击时,它会隐藏并再次出现.我不希望这种情况发生.在这种情况下,我希望键盘只是保留在屏幕上.

  1. dispatchTouchEvent()当我点击Fragment里面的EditText时,有什么方法可以禁用吗?

  2. 有没有办法检测其中的EditText的click事件dispatchTouchEvent()并在那里创建条件,这会禁用隐藏的软输入?

android android-softkeyboard motionevent

0
推荐指数
1
解决办法
2636
查看次数