引言
在上面的学习中,我们在侧滑界面添加了一个按钮,名称为蓝牙( 上篇侧滑界面详情请看Android Studio开发学习(三、侧滑界面))。我们新建一个BlueTooth包,里面包含蓝牙相关的功能函数 BlueToothActivity.java,对应布局在layout包下activity_bluetooth.xml。
下篇博客,我们介绍对应方法实现,完整代码在下篇博客放出。
布局介绍
我们先来介绍一下射击的新布局 ConstraintLayout、Guideline。
ConstraintLayout 允许开发者通过定义视图之间的约束关系来创建复杂的用户界面布局。与传统的布局方式(如LinearLayout、RelativeLayout等)相比,ConstraintLayout 能够显著减少布局层级的嵌套,从而提高应用的性能和渲染效率。(高版本默认布局)
ConstraintLayout适用于需要创建复杂布局但又希望减少布局层级和提高性能的场景。它特别适用于响应式设计和动态布局调整的应用,如适配不同屏幕尺寸和方向、实现复杂的交互效果等。
Guideline 是 Android 开发中 ConstraintLayout(约束布局)中的一个重要概念,它作为一种特殊的控件,用于在布局中定义参考线,帮助开发者更精确地定位和排列其他视图(View)。Guideline 本身在界面上是不可见的,仅作为布局中的辅助工具使用。
对称布局:当需要实现两个或多个视图在屏幕上对称显示时,可以使用Guideline来定义对称轴。
动态布局:在需要根据屏幕尺寸或方向变化自动调整布局的场景中,Guideline的百分比定位功能非常有用。
复杂布局:对于包含多个视图且布局关系复杂的界面,使用Guideline可以帮助开发者更清晰地组织和定位视图。
布局预览
完整代码
下篇博客,我们介绍对应方法实现,完整代码在下篇博客放出。
<?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_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background1"
tools:context=".BlueTooth.BlueToothActivity">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="136dp"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/listView1"
app:layout_constraintGuide_end="206dp"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/openBT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="打开蓝牙"
app:layout_constraintBottom_toTopOf="@+id/stateBT"
app:layout_constraintEnd_toStartOf="@id/guideline1"
app:layout_constraintHorizontal_bias="0.567"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/closeBT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="关闭蓝牙"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.473"
app:layout_constraintStart_toEndOf="@id/guideline1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/stateBT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蓝牙状态"
app:layout_constraintEnd_toStartOf="@id/guideline1"
app:layout_constraintHorizontal_bias="0.567"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/openBT" />
<Button
android:id="@+id/updateList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新列表"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.473"
app:layout_constraintStart_toEndOf="@id/guideline1"
app:layout_constraintTop_toBottomOf="@id/closeBT" />
<TextView
android:id="@+id/textView1"
android:layout_width="307dp"
android:layout_height="46dp"
android:layout_marginTop="92dp"
android:background="#2196F3"
android:gravity="center"
android:text="蓝牙列表"
android:textSize="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/stateBT" />
<ListView
android:id="@+id/listView1"
android:layout_width="332dp"
android:layout_height="350dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.491"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textView1"
app:layout_constraintVertical_bias="0.316" />
</androidx.constraintlayout.widget.ConstraintLayout>