如何在 Android Studio 中的 ViewPager 小部件之上设置布局
Posted
技术标签:
【中文标题】如何在 Android Studio 中的 ViewPager 小部件之上设置布局【英文标题】:How to set a layout on top of a ViewPager widget in Android Studio 【发布时间】:2021-11-16 23:31:00 【问题描述】:我希望在所有内容之上始终有一个布局并且始终可见,但是,一旦我滑动到 ViewPager 中的下一个元素,FrameLayout 就会落后于 ViewPager。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:gravity="center_vertical"
tools:context=".MainActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/videosViewPager"
android:layout_
android:layout_
android:orientation="vertical"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="0dp">
</androidx.viewpager2.widget.ViewPager2>
<RelativeLayout
android:layout_
android:layout_>
<FrameLayout
android:id="@+id/preview_display_layout"
android:layout_
android:layout_
android:visibility="visible"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="216dp"
tools:layout_editor_absoluteY="0dp">
</FrameLayout>
</RelativeLayout>
</RelativeLayout>
我试图在 FrameLayout 的顶部放置一个按钮,但猜猜看,每次滚动后,该按钮仍位于所有内容的顶部,而不是在 ViewPager 后面。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".MainActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/videosViewPager"
android:layout_
android:layout_
android:orientation="vertical"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="0dp">
</androidx.viewpager2.widget.ViewPager2>
<RelativeLayout
android:layout_
android:layout_>
<Button
android:layout_
android:layout_>
</Button>
<FrameLayout
android:id="@+id/preview_display_layout"
android:layout_
android:layout_
android:visibility="visible"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="216dp"
tools:layout_editor_absoluteY="0dp">
</FrameLayout>
</RelativeLayout>
</FrameLayout>
这是我在 MainActivity 中的代码
private ViewPager2 videosViewPager;
private SurfaceView previewDisplayView;
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(getContentViewLayoutResId());
previewDisplayView = new SurfaceView(this);
setupPreviewDisplayView();
videosViewPager = findViewById(R.id.videosViewPager);
List<VideoItem> videoItems = new ArrayList<>();
VideoItem life = new VideoItem();
String path = "android.resource://"+getPackageName()+"/"+ R.raw.video;
life.videoURL = Uri.parse(path);
videoItems.add(life);
VideoItem rest = new VideoItem();
String path2 = "android.resource://"+getPackageName()+"/"+ R.raw.video1;
rest.videoURL = Uri.parse(path);
videoItems.add(rest);
videosViewPager.setAdapter(new VideoAdapter(videoItems));
private void setupPreviewDisplayView()
previewDisplayView.setVisibility(View.GONE);
ViewGroup viewGroup = findViewById(R.id.preview_display_layout);
viewGroup.addView(previewDisplayView);
previewDisplayView
.getHolder()
.addCallback(
new SurfaceHolder.Callback()
@Override
public void surfaceCreated(SurfaceHolder holder)
processor.getVideoSurfaceOutput().setSurface(holder.getSurface());
Log.d("Surface","Surface Created");
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
onPreviewDisplaySurfaceChanged(holder, format, width, height);
Log.d("Surface","Surface Changed");
@Override
public void surfaceDestroyed(SurfaceHolder holder)
processor.getVideoSurfaceOutput().setSurface(null);
Log.d("Surface","Surface destroy");
);
我想我的问题是在 ViewGroup 中添加 SurfaceView(previewDisplayView)。 我该怎么做才能使 previewDisplayView 始终处于一切之上?顺便说一句,我尝试了bringToFront(),但是在滑动之后,previewDisplayLayout 会自动移到 ViewPager 后面。 提前谢谢你
【问题讨论】:
【参考方案1】:你试过android:elevation
属性吗?我想这就是你要找的,
希望会有所帮助
【讨论】:
您好!谢谢您的答复!不,不幸的是,它不起作用。问题是,在我滑动到 ViewPager 中的下一个元素后,ViewPager 小部件总是位于所有内容之上。以上是关于如何在 Android Studio 中的 ViewPager 小部件之上设置布局的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio 生成 Xutils3 注入的插件
如何导入在Android Studio中的javax.swing
如何在 Android Studio 中的 ViewPager 小部件之上设置布局