gpt4 book ai didi

android - 如果 View 在 ScrollView 的屏幕上不可见,则无法找到。总是返回真

转载 作者:行者123 更新时间:2023-11-30 02:53:33 28 4
gpt4 key购买 nike

我一直在尝试确定是否可以在屏幕上看到 TextView,如果不能,我想显示一个小文本,上面写着“滚动阅读”。我已经从 this 等问题中尝试了各种方法还有很多其他人。在我的主从布局的细节 fragment 中,我有一个 fragment ,其中包含一个 FrameLayout。这个框架布局在后面有一个 ScrollView ,在前面有一个 TextView ,上面写着“滚动阅读”(我会保持不可见,直到 ScrollView 中带有新闻文章的 TextView 不可见)。例如,我不会显示“滚动阅读” TextView herehere , 但会显示 here .现在,它仅出于测试目的可见。

布局是here . ScrollView 是 scroller。当图像可用时article_header_stub_import 被使用,在文件底部给出。我想检查 TextView body 是否可见。我在正文下方添加了 wastedText 只是为了检查,但它在所有情况下都显示为可见。

我尝试了不同的解决方案,例如使用 scrollingLinearLayoutscrollerdetailFrameLayout 获取 getHitRect,甚至使用细节 fragment 。该代码类似于我链接的问题,我只是使用 Log.d(...) 查看 if-else 情况的检查。

我正在使用 Picasso 加载图像并在 picasso 的成功回调中进行编码,例如:

picassoInstance.load(mImageURL).into(mMainImageView, new Callback() {

@Override
public void onSuccess() {
Log.d(TAG_ASYNC, "Image Loaded");
mTestTextView.setVisibility(View.VISIBLE);

Rect scrollBounds = new Rect();
mScrollView.getHitRect(scrollBounds);
if (mTestTextView.getLocalVisibleRect(scrollBounds)) {
// Any portion of the imageView, even a single pixel, is
// within the visible window
Log.d(TAG_ASYNC, "is visible");
} else {
// NONE of the imageView is within the visible window
Log.d(TAG_ASYNC, "not visible");
}

}

@Override
public void onError() {
// TODO Auto-generated method stub

}
});

我也试过 getHeight、getTop、getBottom 等,但都返回 0。

最佳答案

我无法使用 Rect。所以我搜索了“view getheight is always 0”。虽然我仍然不明白为什么高度返​​回 0(虽然这是在 AsyncTask 的 onPostExecute 中发生并且在 Picasso 加载图像之后),但我使用 GlobalListener 获取高度并与屏幕进行比较。

picassoInstance.load(mImageURL).into(mMainImageView, new Callback() {

@Override
public void onSuccess() {
Log.d(TAG_ASYNC, "Image Loaded");

mMainImageView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {

@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
@Override
public void onGlobalLayout() {

//Get Display metrics according to the SDK
Display display = getWindowManager().getDefaultDisplay();
Point screen = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
display.getSize(screen);
} else {
screen.x = display.getWidth();
screen.y = display.getHeight();
}

//StatusBar Height
int statusBarHeight = 0;
int resId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resId);
}

//ActionBar Height
TypedValue tv = new TypedValue();
int actionBarHeight = 0;
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
getResources().getDisplayMetrics());
}

//Check
Log.d(TAG_ASYNC, "mSubtitleLayout " + mSubtitleLayout.getHeight());
Log.d(TAG_ASYNC, "mMainImageView " + mMainImageView.getHeight());
Log.d(TAG_ASYNC, "mArticleTextView " + mArticleTextView.getTop());
Log.d(TAG_ASYNC, "total height " + screen.y);
Log.d(TAG_ASYNC, "status bar " + statusBarHeight);
Log.d(TAG_ASYNC, "action bar " + actionBarHeight);

//Boolean to check if image+subtitle is large enough.
//If yes, then display "Scroll To Read"
displayScrollToRead = (screen.y - statusBarHeight - actionBarHeight) < (mArticleTextView
.getTop()) * 1.08;
Log.d(TAG_ASYNC, "displayScrollToRead " + displayScrollToRead);

if (displayScrollToRead) {
mScrollToReadLayout.setVisibility(View.VISIBLE);
Log.d(TAG_ASYNC, "Visiblity - " + mScrollToReadLayout.getVisibility());
}

//remove GlobalLayoutListener according to SDK
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
mMainImageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
mMainImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}

}

});

}

@Override
public void onError() {

Log.d(TAG_ASYNC, "IMAGE WAS NOT LOADED!!!");

}
});

关于android - 如果 View 在 ScrollView 的屏幕上不可见,则无法找到。总是返回真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711150/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com