一、屏幕适配的紧张性
在 Android 开辟中,屏幕适配是非常关键的。由于 Android 装备具有各种各样的屏幕尺寸、分辨率和像素密度。如果没有举行良好的屏幕适配,应用大概会出现表现不完整、元素拉伸或压缩变形、字体大小不符合等标题,极大地影响用户体验。
二、根本概念
- 屏幕尺寸(Screen Size)
- 指的是屏幕的对角线长度,通常以英寸(inch)为单元。例如,常见的手机屏幕尺寸有 5.5 英寸、6.1 英寸等,平板屏幕尺寸大概有 7 英寸、10 英寸等。不同的屏幕尺寸需要考虑结构的调整,以确保内容在各种尺寸的屏幕上都能公道展示。
- 分辨率(Resolution)
- 表示屏幕上像素的数目,通常用水平像素数 × 垂直像素数来表示,如 1920×1080。高分辨率屏幕能够表现更清晰的图像,但也意味着需要公道安排结构和资源,克制元素过小或过大。
- 像素密度(Density)
- 是指每英寸屏幕所包含的像素数目,单元是 dpi(dots per inch)。例如,低密度屏幕(ldpi)的像素密度约为 120dpi,中密度屏幕(mdpi)约为 160dpi,高密度屏幕(hdpi)约为 240dpi,超高密度屏幕(xhdpi)约为 320dpi 等。不同的像素密度会影响图像资源的清晰度,需要为不同密度的屏幕提供符合的资源。
三、适配方法
- 结构适配
- 利用相对结构(RelativeLayout)和线性结构(LinearLayout)
- 相对结构可以通过设置控件之间的相对位置关系来实现机动的结构。例如,可以将一个按钮设置为相对于另一个按钮的右边或者下方。线性结构则可以按照水平或垂直方向排列子控件,而且可以通过设置权重(weight)来分配子控件在结构中的空间比例。
- 示例:
- 在一个线性结构中,有两个按钮,想要让它们平分屏幕宽度,可以将线性结构的方向设置为水平,然后为两个按钮设置雷同的权重。
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <Button
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Button 1"/>
- <Button
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Button 2"/>
- </LinearLayout>
复制代码
- 利用百分比结构(Percent Support Library)
- 这是一个支持库,它答应通过百分比来设置视图的大小和位置。可以在结构文件中准确地指定一个视图占父视图宽度或高度的百分比。
- 示例:
- 要让一个 TextView 占据父视图宽度的 50%,可以这样设置:
- <android.support.percent.PercentFrameLayout
- 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:layout_width="0dp"
- android:layout_height="wrap_content"
- app:layout_widthPercent="50%"
- android:text="This is a TextView"/>
- </android.support.percent.PercentFrameLayout>
复制代码
- 利用约束结构(ConstraintLayout)
- 这是 Android Studio 中推荐的结构方式,它通过约束来定义视图的位置和大小。可以在可视化编辑器中方便地添加和编辑约束条件。
- 例如,要让一个视图在父视图的中心,可以添加以下约束:
- 视图的水平中心与父视图的水平中心对齐,垂直中心与父视图的垂直中心对齐。
- <androidx.constraintlayout.widget.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/textView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- android:text="Centered Text"/>
- </androidx.constraintlayout.widget.ConstraintLayout>
复制代码
- 尺寸资源适配
- 创建不同维度的资源文件
- 根据不同的屏幕尺寸(如小屏幕、正常屏幕、大屏幕、超大屏幕)创建对应的尺寸资源文件。例如,在res/values - small、res/values - normal、res/values - large、res/values - xlarge等文件夹下分别定义尺寸值。
- 以定义文本大小为例,在res/values - small文件夹下的dimens.xml文件中可以定义较小的文本尺寸:
- <resources>
- <dimen name="text_size">12sp</dimen>
- </resources>
复制代码
而在res/values - normal文件夹下的dimens.xml文件中可以定义适中的文本尺寸:
- <resources>
- <dimen name="text_size">14sp</dimen>
- </resources>
复制代码
- 利用限定符(Qualifiers)
- 除了屏幕尺寸,还可以利用像素密度限定符(如mdpi、hdpi、xhdpi等)、方向限定符(land表示横向,port表示纵向)等来提供不同的资源。
- 例如,为不同像素密度的屏幕提供不同的图片资源。将一张图片的不同分辨率版天职别放在drawable - mdpi、drawable - hdpi、drawable - xhdpi等文件夹下。Android 系统会根据装备的像素密度自动选择符合的图片举行表现。
- 代码适配
- 获取屏幕参数并动态调整结构
- 在代码中可以通过DisplayMetrics类获取屏幕的参数,如屏幕密度、分辨率等,然后根据这些参数动态地调整视图的大小和位置。
- 示例:
- 以下代码可以获取屏幕密度并根据密度来设置视图的大小:
- DisplayMetrics displayMetrics = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
- float density = displayMetrics.density;
- Button button = findViewById(R.id.button);
- // 根据屏幕密度设置按钮的宽度
- button.setWidth((int)(100 * density));
复制代码
- 利用自适应框架(如 AutoSize)
- 有一些开源的框架可以帮助举行屏幕适配,例如 AutoSize。它可以自动根据屏幕宽度适配字体大小和视图大小,减少手动适配的工作量。
屏幕适配是一个综合性的工作,需要联合结构、资源和代码等多种方式,以确保应用在各种 Android 装备上都能有良好的表现效果。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |