如何在列表视图之上设置选项卡布局但在 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 中不覆盖?的主要内容,如果未能解决你的问题,请参考以下文章