0

RelativeLayout の特定の位置に EditTest を設定しようとしています。だから私は Edititext の位置を取得し、私が望むものに応じて設定しています。それは私とうまくいっています。getY()ただし、Android 2.2 および android 2.3 デバイスでメソッドが見つからない場合に問題が発生します。Edititextの位置を取得しようとしているためです。

2.2 と 2.3 では機能しないため、別の方法を見つける必要があります。

参照用の私のコードは次のとおりです。

ViewTreeObserver autoCompleteObserver = myAutoComplete.getViewTreeObserver();
    autoCompleteObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {              
            relativeLayoutHeight = ((int) myAutoComplete.getY()-12);
        }
    });   

 activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
            Log.i("TEST", "GLOBAL LAYOUT "+activityRootView.getHeight());
            Log.i("TEST", "GLOBAL LAYOUT rel"+relativeLayoutHeight);
            if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                Log.i("TEsT","Keyboard visible");
                myRelativLayout.scrollTo(0, relativeLayoutHeight);
            }
            else
            {
                Log.i("TEsT","Keyboard not visible");
                myRelativLayout.scrollTo(0, 0);
                myAutoComplete.setDropDownHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
            }
         }
    });
}

このコードは 4.1で正常に動作しgetY()ますが、EditText の位置を返す代替メソッドを見つける必要があります。
参考やヒントを教えてください。

4

2 に答える 2

2

getY()Android 4.1 の View クラスのメソッドを見てください: Link

/**
 * The visual y position of this view, in pixels. This is equivalent to the
 * 'translationY' property plus the current
 * 'top' property.
 *
 * @return The visual y position of this view, in pixels.
 */

public float getY() {
    return mTop + 
           (mTransformationInfo != null ? mTransformationInfo.mTranslationY : 0);
}

Android 2.2 & 2.3 には、 Linkという同様のメソッドがありgetTop()ます。

/**
 * Top position of this view relative to its parent.
 *
 * @return The top of this view, in pixels.
 */

public final int getTop() {
    return mTop;
}

そのため、EditText に翻訳を適用していない場合 (などを使用) View#setTranslationY(float)、本質的に同じ結果が得られます。getY()getTop()

于 2013-11-16T19:08:46.610 に答える
1

このコードをonGlobalLayout

int[] locations = new int[2];
yourView.getLocationOnScreen(locations);
int x = locations[0];
int y = locations[1];//returns Y position
于 2013-10-28T10:50:37.047 に答える