Androidアプリでviewを取得する場所

2572 ワード

Viewクラスのインタフェースコントロールの場所を取得し、新しいコントロールを追加するのに役立ちます.
parent内の相対座標位置を取得する
これは比較的簡単で、言うまでもなく、Viewを直接呼び出す方法:getLeft、getTop、getBottom、getRightが取得します.
画面内の絶対位置を取得する.
getLocalVisibleRect
getGlobalVisibleRect
getLocationOnScreen
getLocationInWindow
よく書けた文章がありますが、次のように投稿されています.http://www.fengfly.com/plus/view-209439-1.html)
=======================================================================
私たちはviewのy座標を取得することに重点を置いています.あなたは知っています.
次の4つの方法を順に説明します.
 
1.getLocationInWindow
 
int[] position = new int[2]; 
textview.getLocationInWindow(position); 
System.out.println("getLocationInWindow:" + position[0] + "," + position[1]); 
この方法はviewの左上隅座標を配列に格納する.この座標は現在のactivityに対する.
通常activityの場合、y座標は、可視の状態欄の高さ+可視のタイトル欄の高さ+view左上からタイトル欄の底までの距離となる.
ステータスバー/タイトルバーが非表示の場合、その高いは0で計算する.
ダイアログ式のactivityの場合、y座標は表示するタイトルバーの高さ+viewからタイトルバーの底までの距離である.
この場合、ステータスバーの有無は無視する.
 
2.getLocationOnScreen
 
int[] position = new int[2]; 
textview.getLocationOnScreen(position); 
System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]); 
この方法は上との差が少なく、viewの左上隅座標を配列に格納する.しかし、この座標は画面全体に対して相対的である.
 
y座標はviewの左上から画面上部までの距離である.
 
 
3.getGlobalVisibleRect
 
Rect viewRect = new Rect(); 
textview.getGlobalVisibleRect(viewRect); 
System.out.println(viewRect); 
この方法はRectを構築して「カバー」というviewに用いる.このRectの座標は、現在のactivityに対する.
通常activityの場合、Rectのtopは、表示する状態欄の高さ+表示するタイトル欄の高さ+Rectの左上隅からタイトル欄の底部までの距離となる.
ダイアログ式のactivityの場合、y座標がRectのtopは、表示するタイトルバーの高さ+Rect左上からタイトルバーの底までの距離となる.
この場合、ステータスバーの有無は無視する.
 
4.getLocalVisibleRect
 
Rect globeRect = new Rect(); 
button.getLocalVisibleRect(globeRect); 
注意:
以上のメソッドはOnCreateメソッドで呼び出す、いずれも0を返します.これは、Viewがまだロードされていないためです.
onWindowFocusChangedメソッドで取得することをお勧めします.onWindowFocusChangedが使いにくい場合(Activity Groupなど)は、次のように書くことができます.
 
mTextView.post(new Runnable() { 
    @Override 
    public void run() { 
        Rect viewRect = new Rect(); 
        mTextView.getLocalVisibleRect(viewRect); 
        mTreeScrollView.setRect(viewRect); 
    } 
}); 
これにより、Viewのロードが完了する後に位置を取得する方法が実行する.
=======================================================================
PS:Viewクラスコントロールを動的に作成する方法:
1、new方法でインタフェースオブジェクトを作成する.
2.Layout xmlリソースによって作成し、LayoutInflaterが提供する方法を利用する.