Android 資原始檔螢幕適配
一、圖片適配:
mipmap-xhdpi:720P,表示1280x720解析度,用於存放2x切圖
mipmap-xxhdpi:1080P,表示1920x1080解析度,用於存放3x切圖
mipmap-xxxhdpi:2K,表示2560x1440解析度,用於存放4x切圖
二、佈局適配:
1、layout目錄方式:
res/layout目錄後跟解析度,格式:"layout-高x寬",每個layout目錄下都寫一個佈局檔案。
豎屏:layout-1280x720,layout-1920x1080,layout-2560x1440
橫屏:layout-land-1280x720,layout-land-1920x1080,layout-land-2560x1440
2、dimens檔案方式:
(1)values目錄後跟dp方式:
res/values目錄後跟dp,每個values目錄下都寫一個dimens.xml檔案。
3種方式:
第1種,格式:"values-sw值dp",螢幕寬高的較小值,大於等於"值"時,取此目錄下的dimens檔案中的dp值,不受橫豎屏影響。
計算方式:值 = 解析度寬高較小值 / 密度值density
例,1920x1080解析度,density值為3的,values目錄命名如下:
豎屏:values-sw360dp
橫屏:values-sw360dp-land
第2種,格式:"values-w值dp",螢幕寬度,大於等於"值"時,取此目錄下的dimens檔案中的dp值,橫豎屏切換時取值會變。
計算方式:值 = 解析度寬度 / 密度值density
例,1920x1080解析度,density值為3的,values目錄命名如下:
豎屏:values-w360dp
橫屏:values-w640dp-land
使用:
values-w320dp/dimens.xml檔案:
-
<?xml version="1.0" encoding="utf-8"?>
-
<resources>
-
<dimen name="dp1">0.89dp</dimen> <!-- 320/360,四捨五入得到0.89 -->
-
</resources>
values-w360dp/dimens.xml檔案(此檔案中的dp值為基準值,解析度寬度1080,密度3,會取此目錄下的值):
-
<?xml version="1.0" encoding="utf-8"?>
-
<resources>
-
<dimen name="dp1">1.00dp</dimen> <!-- 基準值 -->
-
</resources>
values-w384dp/dimens.xml檔案:
-
<?xml version="1.0" encoding="utf-8"?>
-
<resources>
-
<dimen name="dp1">1.07dp</dimen> <!-- 384/360,四捨五入得到1.07 -->
-
</resources>
values-w392dp/dimens.xml檔案:
-
<?xml version="1.0" encoding="utf-8"?>
-
<resources>
-
<dimen name="dp1">1.09dp</dimen> <!-- 392/360,四捨五入得到1.09 -->
-
</resources>
values-w411dp/dimens.xml檔案(例如:解析度寬度1080,密度2.625,會取此目錄下的值):
-
<?xml version="1.0" encoding="utf-8"?>
-
<resources>
-
<dimen name="dp1">1.14dp</dimen> <!-- 411/360,四捨五入得到1.14 -->
-
</resources>
第3種,格式:"values-h值dp",螢幕高度,大於等於"值"時,取此目錄下的dimens檔案中的dp值,橫豎屏切換時取值會變。
計算方式:值 = 解析度高度 / 密度值density
例,1920x1080解析度,density值為3的,values目錄命名如下:
豎屏:values-h640dp
橫屏:values-h360dp-land
(2)values目錄後跟解析度方式:
res/values目錄後跟解析度,格式:"values-高x寬",每個values目錄下都寫一個dimens.xml檔案。
豎屏:values-1280x720,values-1920x1080,values-2560x1440
橫屏:values-land-1280x720,values-land-1920x1080,values-land-2560x1440
3.LinearLayout佔比方式:
利用LinearLayout的android:weightSum屬性和子View的android:layout_weight="1"實現佔比佈局
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout
-
xmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:orientation="vertical"
-
android:weightSum="4">
-
<TextView
-
android:layout_width="match_parent"
-
android:layout_height="0dp"
-
android:layout_weight="1"
-
android:background="#f98002"
-
android:gravity="center"
-
android:text="佔比4分之1"/>
-
<TextView
-
android:layout_width="match_parent"
-
android:layout_height="0dp"
-
android:layout_weight="2"
-
android:background="#fff222"
-
android:gravity="center"
-
android:text="佔比4分之2"/>
-
<TextView
-
android:layout_width="match_parent"
-
android:layout_height="0dp"
-
android:layout_weight="1"
-
android:background="#f00ff2"
-
android:gravity="center"
-
android:text="佔比4分之1"/>
-
</LinearLayout>