android碎片化的解决方法,解决 Android 设备碎片化--屏幕适配
隨著支持 Android 系統的設備(手機、平板、電視、手表)的增多,設備碎片化、品牌碎片化、系統碎片化、傳感器碎片化和屏幕碎片化的程度也在不斷地加深。
在當時初學 Android 的時候,就初步接觸了這方面的概念。當時學了六大布局:
布局 PK
當時說了絕對布局已經是被淘汰了的,就是因為它不滿足屏幕適配。還有一種百分比布局,控件的位置是按百分比來控制的,在任何尺寸的手機屏幕上整體格局都是這樣顯示的,不會亂。
** 擴展小知識 **
** 屏幕尺寸 **:屏幕尺寸是指手機的對角線,單位是英寸, 1 英寸 = 2.54 厘米。現在常見的屏幕有 4.7(我的紅米 note 2,現在很少看見手機屏幕比我小的了)、5.0、 5.5、 6.0等等。
屏幕尺寸
**上圖中的 px :pixels,像素的意思,上圖中手機 分辨率 為寬 1080 px,高 1920px。 px 也就是 分辨率的單位,一個像素就是一個小點,說明寬度有 1080 個像素小點 **
** 像素密度(dpi: dots per inch) **:英文直譯過來就是每英寸點數。即 dpi = px / 英寸。
dpi 分類
4 英寸 hdpi
圖標的各屏幕密度的對應尺寸
** dip(dp) ( Devices Independent Pixels, 設備獨立像素):顧名思義,這個每一個設備獨立使用的像素,在不同的設備上有不同的效果,正是用來解決屏幕適配的單位。這里我一直都不是很明白,后面想了個比喻: 它可以看成上面像素單位的一個包裝,這里一像素可能等于上面幾像素,也有可能等于零點幾像素,這個關系由像素密度來決定,像素密度為 160 的時候, 1dip = 1px。 素密度越高,一個獨立像素為多個像素 **。
這個有兩個轉換工具方法
public static int dip2px(Context context, float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
** sp (Scaled Pixels) **:縮放像素,主要用來設置字體大小, best for textSize。
** 備注:根據谷歌的推薦,像素統一使用 dp, 字體統一使用 sp **
怎么實現屏幕適配啊
一、豎屏
使用 wrap_content:視圖的寬度或高度設置成所需的最小尺寸以適應視圖中的內容
使用 match_parent: 展開組件以匹配其父視圖的尺寸
這面兩個只能解決一些簡單的問題。
weight,權重:在 LinearLayout 中使用,用于分配控件占總體的百分比。
** 注意 **:
一般使用權重設置時,最好設對應寬高為 0dp, 減少測量工作。
當控件寬高為 match_parent 時,控件設置的權重與總體成反比;
當控件寬高為 wrap_content 時,控件設置的權重與總體成正比;
當只有部分控件設置了權重時,先確定沒設置權重控件的寬高,再按剩下部分按比例分配。
谷歌推薦:像素使用 dp, 字體使用 sp
提供備用位圖
備用位圖
使用點九圖:點九圖可以指定圖片中部分區域拉伸,從而使圖片很多場合方法而不失真。
使用百分比布局:百分比布局直接支持百分比設置控件的寬高。這樣在任何尺寸的屏幕上,控件大小都是一樣的。
谷歌提供了相關支持包( android-support-percent-lib),記得使用前添加相關 jar 包或者依賴哦。它提供了兩種布局,percentRelativeLayout 繼承自 RelativeLayout;percentFrameLayout 繼承自 FrameLayout。
百分比布局的相關屬性:
百分比布局的相關屬性
二、橫豎屏或手機與平板同時適配
2.1 使用限定符
2.1.1 最小尺寸限定符 res/layout(layout-large)
單面板布局:res/layout/activity_main.xml
雙面板布局:res/layout_large/activity_main.xml
2.1.2 最小寬度限定符 res/layout(layout-sw600dp)
** 但 Android 版本低于 3.2 的設備不支持此技術,原因是這些設備無法將 sw600dp 識別為尺寸限定符,因此我們仍需使用 large 限定符。 **
** 定義 **:通過指定某個最小寬度(以 dp 為單位)來設置屏幕的大小,從而決定是否雙面板顯示。
例如使用 sw600p 指明雙面板布局盡適用最小寬度為 600dp 的屏幕,而不是適用 large 限定符。標準 7 英寸平板電腦的最小寬度為 600dp。
單面板布局:res/layout/activity_main.xml
雙面板布局:res/layout-sw600dp/activity_main.xml
2.1.3 屏幕方向限定符 land port
2.2 使用布局別名 activity_main.xml(activity_main_large.xml)
** 步驟 1** :設置好相應布局
對應布局
** 步驟 2 **:設置大尺寸屏幕引用的布局
設置大尺寸屏幕應用的布局
** 步驟 3 **:設置 600dp 尺寸屏幕引用的布局
設置 600dp 尺寸屏幕引用的布局
** 說明 **:
說明
總結
以上是生活随笔為你收集整理的android碎片化的解决方法,解决 Android 设备碎片化--屏幕适配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android鼠标滚轮事件坐标,andr
- 下一篇: Android实现蝴蝶动画,Androi