如何在 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中的图像数组创建视频?

如何导入在Android Studio中的javax.swing

如何在 Android Studio 中的 ViewPager 小部件之上设置布局

如何在 Android Studio 中扩展 2 列中的按钮?

Android Studio 中的 ListFragment