ScrollView的许多示例,但我对RelativeLayout没有任何想法
在RelativeLayout中,一些视图将涵盖另一个视图。 我可以用xml检查它,但如何用java代码检查呢? 使用isShown(),willNotDraw(),hasWindowFocus(),getLocalVisibleRect(),这些都不起作用。
案例1:容器布局确实在屏幕上
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--container layout is really on screen-->
<fragment
android:id="@+id/map_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="50dp"
/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
案例2:容器布局并非真正在屏幕上
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="50dp"
/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
/>
</LinearLayout>
</LinearLayout>
<!--container layout is not really on screen-->
<fragment
android:id="@+id/map_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
答案 0 :(得分:1)
尝试使用此
if (myView.isShown()) {
// Its visible
} else {
// Either gone or invisible
}
答案 1 :(得分:0)
案例2中的更改:容器布局实际上不在屏幕上
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp" />
</LinearLayout>
<!--container layout is not really on screen-->
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- fragment -->
</FrameLayout>
</RelativeLayout>
<强> MainActivity 强>
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private FrameLayout frameLayout;
private LinearLayout container;
private RelativeLayout parent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
frameLayout = (FrameLayout) findViewById(R.id.frameLayout);
container = (LinearLayout) findViewById(R.id.container);
parent = (RelativeLayout) findViewById(R.id.parent);
//container.bringToFront();
Log.e(TAG, "container: " + parent.indexOfChild(container));
Log.e(TAG, "frameLayout: " + parent.indexOfChild(frameLayout));
if (parent.indexOfChild(container) == parent.getChildCount() - 1) {
Log.e(TAG, "container is visible");
} else {
Log.e(TAG, "container is not visible");
}
}
}
如果容器索引等于父级中的子计数,则它位于其他视图的前面并且可见。否则容器重叠在其他布局后面。
我希望它对你有所帮助。