一、选用合适的布局
在Android中,提供了多种布局方式,包括线性布局、相对布局、表格布局、帧布局等等。不同的布局方式适合不同的场景,要创建响应式布局就需要根据实际需求选择合适的布局。
例如,在需要创建一个简单的列表时,选取线性布局或者表格布局是不错的选择,这些布局都可以自动适应手机的大小,并且能够显示更多的信息。而在需要创建比较复杂的布局时,相对布局则可以自由地设置控件的位置和大小,实现更灵活的效果。
下面是一个简单的列表布局示例:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Item 1" />
<TextView
android:id="@+id/item_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Description 1" />
</LinearLayout>
二、使用百分比布局
为了实现真正的响应式布局,推荐使用百分比布局。这种布局方式可以根据手机的大小动态地计算出每个控件应该占用的空间大小。
百分比布局需要导入库,可以在build.gradle中添加以下行:
dependencies {
compile 'com.android.support:percent:23.4.0'
}
然后在布局文件中,需要在最外层布局添加这个属性:
<android.support.percent.PercentRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
在百分比布局中,每个控件都有widthPercent和heightPercent属性,可以根据需要设置不同的比例,例如:
<TextView
android:id="@+id/text_view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_widthPercent="50%"
app:layout_heightPercent="50%"
android:text="Hello World!" />
三、使用限制布局(ConstraintLayout)
限制布局是Android 2.3版本才添加的,它可以帮助实现更加复杂的布局、实现嵌套,并且可以在不同的设备上展现出类似或相同的效果。
限制布局有两种模式,即水平和垂直布局。可以设置各个控件之间的关系,例如设置两个控件间的距离,或者设置其中一个控件相对于另一个控件来进行定位。这样就可以实现更加灵活的布局效果。
下面是一个简单的限制布局示例:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:text="Hello World!" />
<TextView
android:id="@+id/text_view2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/text_view1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:text="Hello World2!" />
</android.support.constraint.ConstraintLayout>
四、使用框架布局(FrameLayout)
框架布局是一种简单的布局方式,它只能容纳一个子控件。在布局中添加多个框架布局,就可以实现分块显示的效果。
框架布局的特点是控件可以居中,同时也可以自由设置在屏幕上的位置和大小。对于一些简单的页面,可以使用框架布局来实现响应式效果。
下面是一个简单的框架布局示例:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="This is a FrameLayout" />
</FrameLayout>
五、使用可扩展布局(ExpandableListView)
可扩展布局是一种用于创建可展开列表的布局方式。与普通列表不同,可扩展布局支持在每个列表项下面呈现更多的信息和子列表。
可扩展布局是一种响应式的布局方式,它可以在不同的设备上显示出一致的效果。对于数据比较多的列表,可扩展布局可以使用户更好地掌握信息,而不是让他们在列表中浏览。
下面是一个简单的可扩展布局示例:
<ExpandableListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/expandable_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
代码示例
下面是一个完整的响应式布局示例:
<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_heightPercent="100%"
app:layout_widthPercent="100%" />
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="Button"
app:layout_alignParentBottom="true"
app:layout_alignParentRight="true"
app:layout_marginRightPercent="5%"
app:layout_marginBottomPercent="5%"
app:layout_heightPercent="10%"
app:layout_widthPercent="30%" />
</android.support.percent.PercentRelativeLayout>
该布局包含一个百分比布局,其中有一个铺满整个屏幕的ListView和一个Button。Button被放置在父布局的右下角,以使其可以在不同的设备上显示出类似的效果。