Android螢幕適配,包括全面屏適配,自定義適配
在此處列出一些簡單的配置圖
點選下載配置檔案 //文件就在下邊,不用下載
原理:
1. px是解析度的單位 比如現在主流手機解析度1080*1920.
2. dp是安卓開發專有的單位 在 不同的手機下 1dp = 不同的 px.
3. sp是字型大小(前面清單檔案中要求字型也用dp或者px),sp隨系統字型大小變化而變化,但據我觀察,像微信qq這些app的字型是不隨系統顯示字型大小變化的.
### 本庫是按照設計圖的寬度的值(單位px)和對應標準dpi來適配的(手機實際寬度相對於設計圖增加或減少,高度同比例(這的比例是寬度增加或減少的比例)增加或減少),所有的佈局控制元件都按這個比例(手機實際寬度/設計圖寬度)來適配,在不同的解析度,不同ppi(手機螢幕密度,又稱為dpi),不同最小寬度(有的人喜歡去調開發者選項下面的最小寬度,主流手機預設為360dp)的手機下都做到了適配.
具體使用步驟:
- 匯入依賴
implementation 'me.yatoooon:screenadaptation:1.0.9'
- 初始化
(1)在Application中:
ScreenAdapterTools.init(this);
//旋轉適配,如果應用螢幕固定了某個方向不旋轉的話(比如qq和微信),下面可不寫.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
ScreenAdapterTools.getInstance().reset(this);
}
- 在mainfest中AppLication中配置:
//設計圖的寬,單位是畫素,推薦用markman測量,量出來如果是750px那麼請儘量去找ui設計師要一份android的設計圖.
<meta-data
android:name="designwidth"
android:value="720" />
//設計圖對應的標準dpi,根據下面的那張圖找到對應的dpi,比如1080就對應480dpi,如果拿到的是其他寬度的設計圖,那麼選擇一個相近的dpi就好了
<meta-data
android:name="designdpi"
android:value="360" />
//全域性字型的大小倍數,有時候老闆會覺得你的所有的字小了或者大了,你總不能一個一個去改吧
<meta-data
android:name="fontsize"
android:value="1.0" />
//你的佈局裡面用的是px這就寫px,你的佈局裡面用的是dp這就寫dp,要統一,不要一會兒px一會兒dp,字型也用px或者dp,不要用sp,微信qq用的肯定不是sp.
<meta-data
android:name="unit"
android:value="px" />
- 具體應用適配
(1)在Activity中,找到setcontentview(R.layout.xxxxxx)
//ScreenAdapterTools.getInstance().reset(this);//如果希望android7.0分屏也適配的話,加上這句
//在setContentView();後面加上適配語句
ScreenAdapterTools.getInstance().loadView((ViewGroup) getWindow().getDecorView());
(2.)在Fragment或recyclerview,listview或gridview,viewpager,自定義view等等等,只要能找到佈局填充器
public class TestFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.test_px, container, false);
//拿到佈局填充器返回的view後
ScreenAdapterTools.getInstance().loadView((ViewGroup) view);
return view;
}
}
注: 自定義view的話,在 ScreenAdapterTools.getInstance().loadView((ViewGroup) view); 外面包裹一層判斷如下,不然在使用自定義view編寫佈局檔案時預覽xml會有問題!但不影響真機執行效果.
if (!isInEditMode()) {
ScreenAdapterTools.getInstance().loadView((ViewGroup) view);
}