6

次のコードを使用して、レイアウト内のビューの位置 (x、y) 座標を取得しました。ボタンと次のコードを使用して、画面上の位置を取得しました。ただし、このコードを使用すると、アプリが強制的に閉じられます。また、このステートメントは setContentView() の後に呼び出されていることにも注意してください。コードは次のとおりです。

Toast.makeText(MainActivity.this, button1.getTop(),Toast.LENGTH_LONG).show();

そして、以下はエラーです:

 E/AndroidRuntime(11630): android.content.res.Resources$NotFoundException: String resource ID #0x196

画面上のビュー (私の場合はボタン) の位置 (x、y 座標) を取得するにはどうすればよいですか?

4

3 に答える 3

6

の参照として整数値を期待する方法を使用しますR.string.whatever。getTop() の戻り値を String にキャストする必要があります。

Toast.makeText(MainActivity.this, String.valueOf(button1.getTop()), Toast.LENGTH_LONG).show();

ボタンの x/y を取得するには (API 11 以降):

Toast.makeText(MainActivity.this, (int)button1.getX() + ":" + (int)button1.getY(), Toast.LENGTH_LONG).show();

文書:

このビューの視覚的な x 位置 (ピクセル単位)。

11 未満の API の場合、あなたは正しい道を進んでいます:getTop()と同等ですgetY()が、アニメーション/翻訳の可能性はありません。は、同じ制限を持つ とgetLeft()同等です。getX()

于 2013-07-10T11:01:15.233 に答える
1

前提条件: MyButton 参照が存在する

AtomicInteger leftButton = new AtomicInteger();
myButton.getViewTreeObserver().addOnGlobalLayoutListener(
    () -> {
        if (leftButton.get() == 0) {
            leftSubtitle.set(myButton.getLeft());

            //do something once you get the value..
        }
    }
);
于 2019-09-17T17:44:19.323 に答える
0

button1.getTop()int 数値を返し、Toast.makeText()その int 数値を実際には存在しない文字列リソース ID として扱うため、クラッシュします。

button1.getTop() + ""文字列に変更するために使用してみてください。

于 2013-07-10T11:01:22.347 に答える