C說話中構造體偏移及構造體成員變量拜訪方法的成績評論辯論。本站提示廣大學習愛好者:(C說話中構造體偏移及構造體成員變量拜訪方法的成績評論辯論)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中構造體偏移及構造體成員變量拜訪方法的成績評論辯論正文
0. 媒介
Android的屏幕適配,即便得某一元素在Android分歧尺寸、分歧分辯率的手機上具有雷同的顯示後果,這個成績一向以來都是我們Android開辟者不能不面臨的成績。本文參考了許多後人的博客,並對這一成績做一個總結,力圖精簡清楚明了。
轉載請注明出處:http://blog.csdn.net/seu_calvin/article/details/52690498
1. 基本概念
(1)屏幕尺寸,即手機對角線的物理尺寸
1英寸 = 2.54cm 罕見手機尺寸有5英寸、5.5英寸、6英寸等。
(2)屏幕分辯率,即手機在橫向、縱向上的像素點數總和(普通描寫成屏幕的”寬x高”)
例如1080dpx1920dp,即寬度偏向上有1080個像素點,在高度偏向上有1920個像素點,1px=1像素點
Android手機罕見的分辯率:320x480、480x800、720x1280、1080x1920
(3)屏幕像素密度,即每英寸的像素點數,單元dpi
例如某裝備為240x320,屏幕尺寸為3.3英寸,那末該裝備的屏幕像素密度為400/3.3=120dpi,個中400為經由過程寬高像素勾股定理得出。
Android手機依據像素密度,可以分為以下幾種屏幕密度類型:
(4)密度有關像素,單元為dp,是Android獨有的單元
Android開辟時平日應用dp而不是px單元設置圖片年夜小,由於它可以包管在分歧屏幕像素密度的裝備上顯示雷同的後果。
/** * dp與px的轉換 * Created by SEU_Calvin on 2016/09/28 */ public class DensityUtils { public static int dp2px(float dp , Context context){ float density = context.getResources().getDisplayMetrics().density;//即表中的0.75/1/1.5/2/3 //context.getResources().getDisplayMetrics().densityDpi //即表中的120/160/240/320/480 return (int)(dp * density + 0.5f); } public static float px2dp(int px , Context context){ float density = context.getResources().getDisplayMetrics().density; return px/density; } }
(5)自力比例像素,單元為sp,Android開辟時用於設置文字年夜小的單元
可依據字體年夜小首選項停止縮放,推舉應用12/14/18/22sp作為字體設置的年夜小,不推舉應用奇數和小數,輕易形成精度的喪失成績。
引見了上述基本概念,我們接上去從結構適配、圖片適配、和代碼適配三個角度分離引見屏幕適配的處理計劃。
2. 結構適配
(1)推舉應用絕對結構,禁用相對結構。由於絕對結構在屏幕的年夜小轉變時視圖之間的絕對地位不會變更。
(2)應用dp和sp(盡可能不消px)、wrap_content、match_parent和weight來掌握結構。應用權重weight在任何裝備上均會完善適配。
(3)為分歧屏幕尺寸的裝備設計分歧的結構,經由過程設置裝備擺設限制符使得法式在運轉時依據以後裝備的尺寸主動加載適合的結構資本。
好比我們先寫兩個結構文件,分離為:
適配手機的結構(默許):res/layout/main.xml
適配尺寸>7寸平板的結構:res/layout/main_pb.xml
然後參加以下兩個文件,體系會依據Android版本主動選擇應用哪一個結構設置裝備擺設文件。
//適配Android 3.2之前的平板結構 res/values-large/layout.xml <resources> <item name="main" type="layout">@layout/main_pb</item> </resources> //適配Android 3.2以後的平板結構 res/values-sw600dp/layout.xml <resources> <item name="main" type="layout">@layout/main_pb</item> </resources>
上述兩個設置裝備擺設文件,並沒有真正去界說結構,它們僅僅是將main設置成了@layout/main_pb的別號。
假如不如許做,main_pb.xml結構文件的內容須要復制成兩份分離放入res/layout-large/main.xml和res/layout-sw600dp/main.xml以適配3.2之前和今後,如許顯著很冗余。
3. 圖片適配
(1)好比有一個如許的需求,一個按鈕的配景圖片必需可以或許跟著按鈕年夜小的轉變而轉變。應用通俗的圖片將沒法完成上述功效,由於運轉時會平均地拉伸或緊縮你的圖片。
這時候候可使用Nine-Patch圖(一種被特別處置過的PNG圖片,應用.9.png後綴名),9Patch圖可以指定圖片的拉伸區域和非拉伸區域,在須要拉伸圖片時,體系就會主動地拉伸你想要拉伸的部門。須要留意的是,.9圖不須要多個分辯率的圖片,放在drawable文件夾便可。
白色框區域:表現縱向拉伸的區域,也就是說,當圖片須要縱向拉伸的時刻它會只指定拉伸白色區域。
綠色框區域:表現橫向拉伸的區域,也就是說,當圖片須要橫向拉伸的時刻它會只指定拉伸綠色區域。
(2)圖片不須要鄙人圖hdpi、mdpi等目次下都放入絕對應的分辯率的圖片,如許會使APK變年夜,普通只做1280*720一套圖,放在hdpi或xhdpi下,若出成績再針對屏幕停止成績圖片調換便可。別的關於若何減小APK年夜小,可以參考Android開辟——減小APK年夜小。
3. 代碼適配
(1)好比有一個需求,須要完成一個空間寬度,是屏幕的1/3。這時候候便可以用代碼完成:
/** * 代碼適配例子 * Created by SEU_Calvin on 2016/09/28 */ WindowManager wm = getWindowManager(); int width = wm.getDefaultDisplay().getWidth(); LinearLayout.LayoutParams params = (LayoutParams)tv.getLayoutParams(); params.width = width/3; tv.setLayoutParams(params);
須要留意的是,普通代碼適配須要寫一個對象類(上文中曾經貼出了)來完成dp2px ,由於代碼裡的參數普通都須要px值,須要經由過程分歧裝備的屏幕密度來完成dp2px。
(2)代碼適配的另外一個應用場景是依據加載結構的分歧,來決議走分歧的流程,以下:
setContentView(R.layout.main_layout);//此處會依據屏幕年夜小加載分歧的結構 Button btn = (Button)findViewById(R.id.btn);//個中一個結構沒有該按鈕 if(btn == null){ //營業邏輯1... }else{ //營業邏輯2... }
感激浏覽,願望能贊助到年夜家,感謝年夜家對本站的支撐!