8

表示画面上のビューの位置を見つけたい。

view.getLeft()そのために、 、view.getBottom()view.getRight()、などの方法を使用しますview.getTop()。残念ながら、これらのメソッドはすべて返され0ます。
ビューの位置 (つまり、画面上の座標) を見つける別の方法はありますか?

私のレイアウトmain.xml

<TextView android:id="@+id/tv1"
    android:layout_width="200px"
    android:layout_height="30px"
    android:text="welcome to" />

<TextView android:id="@+id/tv2"
    android:layout_width="200px"
    android:layout_height="30px"
    android:text=" Make Eit solution " />

そして、私のクラスにはこれがありonCreate()ます:

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);

System.out.println("tv4 width:"+tv2.getWidth());
System.out.println("tv4 height:"+tv2.getHeight());
System.out.println("Right:"+tv2.getRight());
System.out.println("Left:"+tv2.getLeft());
System.out.println("Top:"+tv2.getTop());
System.out.println("Bottom:"+tv2.getBottom());
4

5 に答える 5

8

最も簡単な方法は、 View.getLocationOnScreen(); OR を使用して取得することですgetLocationInWindow();

そして、ルート Layou t に相対的な位置が必要な場合は、次を参照してください

于 2014-04-21T11:50:36.763 に答える
6

あなたが書いたメソッドは画面上の場所を見つけるのに十分ですが、あなたが書いた場所は正しくありません.

onWindowFocusChanged(boolean hasFocus)メソッドにメソッド (view.getLeft( )、view.getTop()... など) を記述してみてください。

例えば...

**

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
                System.out.println("Right:"+tv2.getRight());
                System.out.println("Left:"+tv2.getLeft());
                System.out.println("Top:"+tv2.getTop());
        }
    }

**

それはあなたの問題を解決します。

于 2013-07-25T10:57:31.113 に答える
6

getLeft()getRight()getTop()、およびを使用しgetBottom()ます。これらは、ビューがインスタンス化された後に使用できます。

于 2011-02-09T14:12:36.717 に答える
3

あなたは実際に目の前の景色を手に入れることはできません。invalidate()可能であれば明示的に使用することをお勧めします。onPostResume()または、onResume()関数でこれを確認することもできます。

試してみて、スレッドを楽しみたい場合は、このコード ブロックがコードを UI スレッドに配置し、すべてがレンダリングされるのを待ってから、コードを表示します。

final View gv = this;
ViewTreeObserver vto = gv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @SuppressLint("NewApi")
    public void onGlobalLayout() {
        gv.getViewTreeObserver().removeGlobalOnLayoutListener(this);

        tv1=(TextView)findViewById(R.id.tv1);
        tv2=(TextView)findViewById(R.id.tv2);
        System.out.println("tv4 width:"+tv2.getWidth());
        System.out.println("tv4 height:"+tv2.getHeight());
        System.out.println("Right:"+tv2.getRight());
        System.out.println("Left:"+tv2.getLeft());
        System.out.println("Top:"+tv2.getTop());
        System.out.println("Bottom:"+tv2.getBottom());
}

この最後のものはかなり重い荷物を持ち上げますが、仕事を終わらせます. 私は通常、このような行をログに入れます(つまりandroid.util.Log

于 2013-01-07T23:22:47.460 に答える
2

レイアウト フェーズが完了する前に、ビューの位置を取得できるかどうかはわかりません。ビューがレイアウトされたら、ビューgetLocationOnScreenの位置を取得するために使用できます。getTop同様に、親でのビューの位置のみを返します。

于 2011-02-01T12:33:40.523 に答える