确定视图是否部分超出屏幕界面

5
我有一个动态添加的视图。有时,这个视图只能显示部分内容,因为它的底部在屏幕外面。在这种情况下,我希望将该视图向上移动。但是,我不知道如何检测它是否在屏幕外以及超出多少范围。
编辑:此问题的背景是我有一个EditText,我想在它旁边显示自定义软键盘。以下是我用来移动自定义键盘的代码。
 public void moveKeyboardNextToView(View view) {
    int[] location = new int[]{0, 0};
    view.getLocationInWindow(location);
    Rect r = new Rect();
    view.getGlobalVisibleRect(r);

    int height = r.bottom - r.top;
    int newTop = r.bottom - view.getHeight() / 2 - this.mKeyboardView.getHeight() / 2;
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) this.mKeyboardView.getLayoutParams();
    params.setMargins(0, newTop, 0, 0);
    this.mKeyboardView.setLayoutParams(params);
    this.mKeyboardView.invalidate();

    this.mKeyboardView.post(new Runnable() {
        @Override
        public void run() {
            int[] location = new int[2];
            Rect r2 = new Rect();
            mKeyboardView.getLocalVisibleRect(r2);
            double abc = r2.bottom;
        }
    });
}

你尝试过这个例子吗?https://dev59.com/DWox5IYBdhLWcg3wpFz5 - vmtrue
如果你已经尝试过某些东西,最好也分享一下。这样我们就不必从头开始。 - ndsmyter
2个回答

2
我会这样做,通过以下信息进行计算: 如果你有了这些信息,就不难再计算出你需要的一切。只需确保每个值都使用相同的单位(像素、dpis等)。

5
对我无效。getMeasuredHeight()返回被剪裁的视图高度。 - Moritz Both

1
这是一个晚回复,但为了日后参考,我创建了一个库来实现此目的。如果您的视图在滚动视图内,您可以使用我的库。它会添加一个ViewTreeObserver中的onScrollChangedListener,每次滚动更改时重新计算视图的可见百分比并调用自定义侦听器。您可以在这里找到它:PercentVisibleLayout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接