Android判断view在屏幕可见,如何检查TextView是否在Android可见屏幕内
我想知道我的textview是否在可見的屏幕區域內.
但似乎沒有什么對我有用.
我以前檢查過的代碼是
Rect rect = new Rect();
//textview intialized in onCreate as text1
text1.getHitRect(rect);
text1.measure(0, 0);
//layout is the parent layout (linear) in which i am adding the text view
Rect acctualView = new Rect(Math.round(layout.getX()), Math.round(layout.getY()),
Math.round(layout.getX() + layout.getWidth()), Math.round(layout.getY() +layout.getHeight()));
if(Rect.intersects(acctualView, rect))
{
Toast.makeText(context, "visible", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(context, "Not visible ", Toast.LENGTH_LONG).show();
}
textview和layout的每個寬度和高度都給我0“零”,
請讓我知道如何解決這個問題,并知道視圖是否在可見區域內
這是我的完整活動代碼
public class MainActivity extends Activity {
private TextView text1, text2, text3, text4, text5, text6;
private Context context;
private LinearLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getLayoutInflater().getContext();
layout = (LinearLayout) findViewById(R.id.parentLayout);
setTextViews();
checkViewAndUpdate();
}
private void checkViewAndUpdate() {
Rect rect = new Rect();
layout.getHitRect(rect);
if (text1.getLocalVisibleRect(rect)) {
Toast.makeText(context, "visible", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Not visible", Toast.LENGTH_LONG).show();
}
}
private void setTextViews() {
text1 = new TextView(context);
text2 = new TextView(context);
text3 = new TextView(context);
text4 = new TextView(context);
text5 = new TextView(context);
text6 = new TextView(context);
text1.setText("text1");
text2.setText("text2");
text3.setText("text3");
text4.setText("text4");
text5.setText("text5");
text6.setText("text6");
text1.setTextSize(30);
text2.setTextSize(30);
text3.setTextSize(30);
text4.setTextSize(30);
text5.setTextSize(30);
text6.setTextSize(30);
//layout.removeAllViews();
layout.addView(text1);
layout.addView(text2);
layout.addView(text3);
layout.addView(text4);
layout.addView(text5);
layout.addView(text6);
}
}
我的布局只包含LinearLayout(空)
解決方法:
正如我在評論中寫的那樣,檢查onCreate上的可見rect是行不通的.
在onCreate結束時嘗試此代碼(而不是直接調用checkAndUpdate()).
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
checkViewAndUpdate();
}
});
如果您在onCreate中添加了視圖,則視圖布局無法完成??.是的,這次用戶無法看到實際活動,并且未設置視圖的實際大小.
onGlobalLayout將在視圖布局結束時調用(并且活動可見).
在那個時刻,我們現在可以獲得它們的大小和位置!
僅供參考,您可以通過在onGlobalLayout()中調用layout.getViewTreeObserver().removeOnGlobalLayoutListener(this)來刪除此偵聽器.
標簽:android,textview
來源: https://codeday.me/bug/20190624/1276903.html
總結
以上是生活随笔為你收集整理的Android判断view在屏幕可见,如何检查TextView是否在Android可见屏幕内的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一手可转债可以转多少股?转股数量计算方法
- 下一篇: 银行购买国债有风险吗?注意这两种风险