如何在列表视图之上设置选项卡布局但在 Android 中不覆盖?

Posted

技术标签:

【中文标题】如何在列表视图之上设置选项卡布局但在 Android 中不覆盖?【英文标题】:How to set tab layout on top of listview but not overlaying in Android? 【发布时间】:2021-07-23 19:10:51 【问题描述】:

那里的每个人。 我想问有人可以帮我解决这个问题。 我希望我的 ListView 显示在选项卡布局的底部。

这是我的 xml 文件。 ListView 位于选项卡布局的后面。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:background="@color/bone"
    tools:context=".AddNewAdmin">

    <ProgressBar
        android:id="@+id/loadingN"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        android:layout_marginBottom="8dp"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolBar" />

    <com.google.android.material.appbar.AppBarLayout
        android:layout_
        android:layout_
        android:theme="@style/ThemeOverlay.AppCompat"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolBar"
            android:layout_
            android:layout_
            app:popupTheme="@style/Widget.AppCompat.PopupMenu.Overflow"/>

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabUsers"
            android:layout_
            android:layout_
            android:layout_marginTop="2dp"
            android:background="@color/morandi_white"
            android:theme="@style/ThemeOverlay.AppCompat"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </com.google.android.material.appbar.AppBarLayout>

    <include
        layout="@layout/content_main"/>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fabAdd"
        android:layout_
        android:layout_
        android:layout_gravity="bottom|end"
        android:layout_margin="20dp"
        android:src="@android:drawable/ic_input_add"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:contentDescription="add" />

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/mViewpager_ID"
        android:layout_
        android:layout_
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />


</androidx.constraintlayout.widget.ConstraintLayout>

如下图所示。 Click here

另一种情况是ListView在标签布局的前面,不能点击。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:background="@color/bone"
    tools:context=".AddNewAdmin">

    <ProgressBar
        android:id="@+id/loadingN"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        android:layout_marginBottom="8dp"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolBar" />

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolBar"
            android:layout_
            android:layout_
            app:popupTheme="@style/Widget.AppCompat.PopupMenu.Overflow"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabUsers"
            android:layout_
            android:layout_
            android:layout_marginTop="2dp"
            android:background="@color/morandi_white"
            android:theme="@style/ThemeOverlay.AppCompat"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    <include
        layout="@layout/content_main"
        app:layout_constraintTop_toBottomOf="@id/tabUsers"/>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fabAdd"
        android:layout_
        android:layout_
        android:layout_gravity="bottom|end"
        android:layout_margin="20dp"
        android:src="@android:drawable/ic_input_add"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:contentDescription="add" />

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/mViewpager_ID"
        android:layout_
        android:layout_
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />


</androidx.constraintlayout.widget.ConstraintLayout>

显示为this picture.

感谢您的阅读。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

你必须使用更多的约束来正确定位元素。

给出的例子:

        <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolBar"
        android:layout_
        android:layout_
        app:popupTheme="@style/Widget.AppCompat.PopupMenu.Overflow"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabUsers"
        android:layout_
        android:layout_
        android:layout_marginTop="2dp"
        android:background="@color/morandi_white"
        android:theme="@style/ThemeOverlay.AppCompat"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

这两个元素都使用约束Top_toTopOf="parent" 所以它们重叠,因为它们都对齐到同一个 ConstraintLayout 的顶部。

最好的方法是开始将第一个视图 (=element1) 定位在 ConstraintLayout (Top_toTopOf="parent") 的顶部,然后将以下视图 (=element2) 与

Top_toBottomOf="@id/element1"

Element3 将在 element2 下对齐

Top_toBottomOf="@id/element2"

您还可以使用更多的 ConstraintLayouts。

/> 是 xml-Layout 的结束标签,如果你想在 Layout 中放置一个 View,这个结束标签必须放在 View 元素之后。

如果是:

  <com.google.android.material.tabs.TabLayout
    android:id="@+id/tabUsers"
    android:layout_
    android:layout_
    android:layout_marginTop="2dp"
    android:background="@color/morandi_white"
    android:theme="@style/ThemeOverlay.AppCompat"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

任何后续视图元素都将在同一层次结构中的此布局之外。

【讨论】:

这似乎不起作用,因为我更改了约束以让工具栏下的选项卡布局仍然无法解决问题,fabAdd 也被移到了左上角。

以上是关于如何在列表视图之上设置选项卡布局但在 Android 中不覆盖?的主要内容,如果未能解决你的问题,请参考以下文章

当我在选项卡布局中更改选项卡时,回收站视图项目正在增加

我们如何在android中使用firebase Realtime数据库动态设置选项卡布局的选项卡标题?

使用带有选项卡布局的自定义视图时无法从选项卡中删除填充

设置列表视图的最大高度

在选项卡布局中看不到我的 cardView

按下锁定/主页按钮时的通知,单击返回选项卡片段时的通知