Android 資源類型

創(chuàng)新互聯(lián)基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)成都服務器托管報價,主機托管價格性價比高,為金融證券行業(yè)服務器托管,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。
1.字符串資源
1.普通字符串
2.字符串數(shù)組
復制代碼
resources
string-array name="planets_array"
itemaaa/item
itembbb/item
/string-array
/resources
復制代碼
獲取方式:getResources().getStringArray(R.array.planets_array)
3.復數(shù)字符串資源
某些自然語言中,不同的數(shù)字在使用方法上會有所不同,比如one book,two books。當數(shù)量大于1時,會使用不同的名詞或其它復數(shù)形式;
復制代碼
resources
plurals name="numberOfp"
item quantity="one"one person/item
item quantity="other"more persons/item
/plurals
/resources
復制代碼
quantity屬性的值除了one和other外,還可以是zero,two,few,many;
引用復數(shù)字符串:
// 引用數(shù)字為1的復數(shù)字符串
getResources().getQuantityString(R.pluarlas.numberOfp,1);
// 引用數(shù)字為其它值的復數(shù)字符串
getResources().getQuantityString(R.pluarlas.numberOfp,10,10);
4.占位符格式化字符串
常用的格式化字符串三種方法:
1.在字符串中使用引號
字符串中的值雖然可以隨意指定,但是當遇到特殊符號時(雙引號,單引號)就需要采取特殊的方法來處理這些符號。
如果是單引號(')可以使用轉義符(\)或用雙引號(")將整個字符串括起來,如果是雙引號,可以在雙引號前使用轉義符(\)。
resources
string name="str1""This'll work"/string This'll work
string name="str2"This\'ll work/string This'll work
string name="str3"\"apple\"/string "apple"
/resources
2.用占位符格式化字符串
使用String.format(String,Object...)方法可以格式化帶占位符的字符串,只需要在字符串中插入占位符,就可以使用String.format方法格式化字符串資源,format方法要求的占位符用%1,%,...,%n,其實第n個占位符與format方法的n+1個參數(shù)值對應;
resources
!-- $s表示該占位符被字符串替換,$d表示該占位符被整數(shù)替換 --
string name="str1"hello,%1$s!You have %2$d new message/string
/resources
String str1 =String.format(getResources().getString(R.string.str1), "ly", 17);
3.使用HTML標簽格式化字符串資源
字符串資源支持一些HTML標簽,因此可以直接在字符串資源中使用這些HTML標簽格式化字符串
字符串資源支持如下的HTML標簽
b粗體字
i斜體定
u帶下劃線的字
有時需要同時使用HTML標簽和占位符格式化字符串,如果使用String.format方法格式化字符串,會忽略字符串中的所有HTML標簽。為了使format方法可以格式化帶
HTML標簽的確字符,需要使用Html.formHTML方法處理字符串;
resources
string name="hello_world"Welcome to bandroid/b/string
string name="str2"Hello,%1$s! You have b %2d new messages /b/string !--同時包含占位符和html標簽的字符串--
/resources
由于需要使用Html.formHTML方法處理字符串,因此HTML標簽中的 "" 需要使用 "" 表示 "" 并不需要處理
獲取字符串:
String text = String.format(getResources().getString(R.string.str2), "ly", 10);
CharSequence styledText = Html.fromHtml(text);
// 如果format的某個參數(shù)包含HTML的特殊字符,如"","",可以使用如下方式讀取字符串的值;
String escapedUsername = TextUtils.htmlEncode("");
String text1 = String.format(getResources().getString(R.string.str2), "ly", 20);
2.Layout資源
1、如果根節(jié)點是View,除了requestFocus標簽外,不能添加任何子標簽,requestFocus可能被添加到布局文件的任何View中,表示該標簽對應的控件在顯示時處于焦點狀態(tài),整個布局文件只能有一個requestFocus標簽
2、根節(jié)點是ViewGroup,常用的布局都是ViewGroup的子類
3、重用布局文件
如果想重用某個布局文件,可以使用include標簽
include layout="@layout/xx_layout" /
如果想讓一個布局文件被另一個布局文件引用(使用include標簽),可以使用merge作為被引用布局文件的根節(jié)點,由于merge并不會生成任何標簽(在大量引用布局文件時不至于生成大量無用的標簽),但是xml文件必須要有一個根節(jié)點,因此merge所起的作用就是作為xml文件的根節(jié)點,以使xml文件在編譯時不至于出錯,可以把merge當成FrameLayout使用;
3.圖像資源
在圖像資源中可以存儲圖像文件,還可以使用xml格式的圖像資源來控件圖像的狀態(tài)和行為;
1.普通圖像資源
Drawable da = getResources().getDrawable(R.drawable.xxx);
2.xml圖像資源
xml圖像資源其實就是在drawable目錄中指定的xml文件,此種方式可以額外指定圖像的某些屬性,如圖像拉動、排列方式;
bitmap xmlns:android=""
android:src="@drawable/ic_launcher"
android:tileMode="repeat"
/bitmap
3.Nine-Patch圖像資源
Nine-Patch圖像資源文件必須以9.png作為文件擴展名,如abc.9.png
該圖像資源的主要作用是:防止圖像的某一部分被拉伸;確定將圖像作為背景圖的控件中內容顯示的位置;
Android SDK本身提供了一個Draw 9-patch的工具,啟動sdk目錄\tools\draw9patch.bat命令啟動該工具;
可以通過此工具在png圖的四周繪制1個像素粗的直線,上邊緣和左邊緣的直線分別表示圖像在水平和垂直方向可位值的范圍。如果水平或垂直方向的某個區(qū)域不需要拉伸,則可不繪制相應的直線;右邊緣和下邊緣的直線分別表示圖像所在控件中內容的顯示范圍,內容只在右邊緣和下邊緣繪制直線的區(qū)域顯示,表示內容顯示范圍和拉伸范圍的兩給直線有一個重要區(qū)別就是表示內容顯示范圍的直線中間不能斷開,而表示拉伸范圍的直線中間可以斷開;
Nine-Patch圖像資源與普通圖像資源引用方法相同,在引用時只寫文件名,活力.9.png;
4.XML Nine-Patch圖像資源
Nine-Patch圖像資源也有與其對應的xml圖像資源,使用nine-patch標簽來引用Nine-Patch格式的圖像,有一個設置抖動的android:dither屬性;
5.圖層資源
圖層資源類似于FrameLayout不同的是FrameLayout標簽中可以包含任意的控件,而圖層資源每一層都只有是圖像,定義圖層資源必須使用layer-list作為資源文件的根節(jié)點,layer-list標簽中包含多個item標簽,每一個標簽表示一個圖像,最后一個item標簽顯示在最頂層;
默認情況下,圖像會盡量充滿顯示圖像的范圍,圖像可能會有拉伸,為了避免圖像拉伸,可以在item標簽中使用bitmap標簽引用圖像;
復制代碼
layer-list xmlns:android=""
item
android:bottom="10dip" 底端偏移的像素
android:left="10dip" 左側偏移的像素
android:right="10dip" ...
android:top="10dip" ...
bitmap
android:gravity="center"
android:src="@drawable/hell" /
/item
/layer-list
復制代碼
某些情況下,可以使用圖層來代替FrameLayout
6.圖像狀態(tài)資源,處理控件不同狀態(tài)下的顯示狀態(tài)
復制代碼
selector xmlns:android=""
item android:drawable="@drawable/bm" android:state_focused="true"/item
item android:drawable="@drawable/bm" android:state_pressed="true"/item
item android:drawable="@drawable/bm"/item
/selector
// android:state_focused/pressed設置為true表示當前item的drawable屬性為獲取焦點和按下時的drawable樣式
復制代碼
7.圖像級別(Level)資源
圖像資源狀態(tài)只能指定幾種有限的狀態(tài),可以通過圖像級別指定更多的狀態(tài);圖像級別是一個整數(shù)的區(qū)間,可以通過ImageView.setImageLevel或Drawable.setLevel方法切換不同狀態(tài)的圖像;圖像級別資源是xml文件,必須以level-list為根節(jié)點,每一個item表示一個級別區(qū)間,下面是一個xml文件;通過ImageView.setImageLevel(level),根據(jù)level所在的區(qū)間設定顯示的圖像資源,如果level不在任一區(qū)間內則清空ImageView當前圖像;
level-list xmlns:android=""
item android:maxLevel="2" android:minLevel="0" android:drawable="@drawable/hell" /
item android:maxLevel="4" android:minLevel="3" android:drawable="@drawable/hell" /
/level-list
8.淡入淡出(Cross-fade)資源
也是切換兩個圖像(不支持多于兩個圖像的切換),并且使這兩個圖像以淡入淡出效果進行切換,如電燈在開關時逐漸變亮或逐漸變暗;
transition xmlns:android=""
item android:drawable="@drawable/hell"/
item android:drawable="@drawable/hell"/
/transition
TransitionDrawable da = ...;
// 從第一張圖片切換到第二張圖片,時間效果為1秒
da.startTransition(1000);
// 從第二張圖片切換到第一張圖片,時間效果為1秒
da.reverseTransition(1000);
9.嵌入(insert)圖像資源
使用場景:要顯示的圖像要求要小于裝載圖像的View(圖小于View區(qū)域),也是通過xml資源定義,只有一個節(jié)點inset。
inset xmlns:android=""
android:drawable="@drawable/hell"
android:insetLeft="10dip" !--圖像距離左邊的距離,延伸--上/下/右的距離--
/inset
10.剪切(Clip)圖像資源,使用剪切圖像資源可以只顯示圖像的一部分,如可以通過此來制作進度條;
clip xmlns:android=""
android:clipOrientation="horizontal" // 指定截取的方向
android:drawable="@drawable/hell" // 指定要截取的圖像
android:gravity="left" // 指定截取的方式,在此為從左側開始截取
/clip
ClipDrawable cd = ...;
cd.setLevel(1000);
上面ClipDrawable.setLevel(level)設置截取的圖像寬度,ClipDrawable預設了最大值10000(表示不進行截取),最小值為0(表示不顯示);
11. 比例(Scale)圖像資源
scale xmlns:android=""
android:drawable="@drawable/hell"
android:scaleGravity="center" // 設置圖像顯示的位置
android:scaleHeight="70%" // 設置圖像顯示的高度
android:scaleWidth="80%" // 設置圖像顯示的寬度
/scale
12.形狀資源
復制代碼
shape xmlns:android=""
android:shape="rectangle" shape可以指定就矩形,oval(橢圓),line(直線),ring(圓)
corners 定義圓角
/corners
gradient
android:angle="45"
android:startColor="#000000"
android:endColor="#FFFFFF" 定義顏色漸變,從左下角到或上角
/gradient
padding 定義控件內容到邊框的距離
/padding
stroke 定義邊線
/stroke
solid 定義填充
/solid
size 定義大小
/size
/shape
復制代碼
13.菜單資源
菜單不僅可以在onCreateContextMenu或onCreateOptionsMenu方法中通過代碼創(chuàng)建,還可以在res/menu目錄中建立相應的菜單資源文件,并在上面兩個方法中加載菜單資源;
菜單資源文件必須以menu標簽作為根節(jié)點,每一個菜單項用一個item表示,如果要定義子菜單,可以在item標簽中包含menu標簽;如果想將多個菜單項劃為一組,可以使用group包含多個item標簽;
復制代碼
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
復制代碼
查看MenuInflater.inflate(int,Menu)
復制代碼
/**
* Inflate a menu hierarchy from the specified XML resource.
*
* @param menuRes Resource ID for an XML layout resource to load (e.g., codeR.menu.main_activity/code)
* @param menu The Menu to inflate into. The items and submenus will be added to this Menu.
*/
public void inflate(int menuRes, Menu menu) {
XmlResourceParser parser = null;
try {
parser = mContext.getResources().getLayout(menuRes);
AttributeSet attrs = Xml.asAttributeSet(parser);
parseMenu(parser, attrs, menu);
} catch ...finally {
if (parser != null) parser.close();
}
}
復制代碼
14.樣式與主題(style/theme)
1.樣式style
android中樣式和css中樣式作用是一樣的,都是用于為界面元素定義顯示風格,它是一個包含一個或者多個控件屬性的集合。
定義樣式需要在res/values/styles.xml中進行定義,如下是一個樣式的定義:
style name="textViewStyle"
item name="android:textSize"22sp/item
item name="android:textColor"#FF0000/item
/style
style name="textViewStyle1" parent="textViewStyle"/style!-- 此樣式繼承自textViewStyle --
style name="textViewStyle.Livingstone"!-- 樣式繼承的另一種寫法,但不可用此寫法繼承Android自帶的定義樣式? --
item name="android:textColor"#00FF00/item
/style
所有定義的樣式都會在R文件中自動生成一個資源ID,加一個點表示樣式繼承會生成上圖所示的資源id;
樣式的引用:
TextView
style="@style/textViewStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hello" /
2.主題Theme
主題應用于整個應用或者activity,樣式應用于具體的控件上。主題的應用與樣式定義一樣,不同的是主題還可以設置窗口的顯示風格;主題的引用需要在清單文件中進行引用,如引用到整個應用之上就需要在Application節(jié)點中進行配置引用,而引用到單個Activity只需要在此Activity中進行配置引用;
復制代碼
style name="Livingstonetheme"!--此定義是一個無Title的主題--
item name="android:windowNoTitle"true/item
item name="android:windowFullscreen"?android:windowNoTitle/item
!-- 問號表示引用此主題中android:windowNoTitle屬性的值 --
item name="android:textSize"18sp/item
/style
復制代碼
android系統(tǒng)定義了一些屬性,如android:theme="@android:style/Theme.Dialog",該主題可以讓Activity看起來像一個對話框,更多主題可以在文檔reference-android-R.style中查看。當主題里面的樣式屬性值與樣式里面的屬性值發(fā)生沖突的時候會顯示樣式里面的值;
15.其它資源
在資源文件中還可以包括尺寸(dimen)、整數(shù)(integer)、布爾(bool) 、整形數(shù)組資源(integer-array)、資源數(shù)組(array)、顏色(color)
TypedArray ta = getResources().obtainTypedArray(int id); // 獲取數(shù)組資源,包括integer-array、array
Final總結:
除了res/values目錄中的資源名,其它目錄的資源都會以文件名在R類的相應子類中生成變量;而res/values中的資源會以name屬性值為變量名在R類的相應子類中生成變量;
移動領域的兩大風向標--Android和iOS,也是移動應用設計時最大的兩個競爭對手。Android與iOS在市場份額、受歡迎程度、使用人口統(tǒng)計方面數(shù)據(jù)不相上下,在這里,我們對比了Android和iOS之間的簡單設計差異,這將幫助我們弄清一個與另一個有何不同。
由于碎片化的原因,安卓系統(tǒng)的應用設計會有細微的差異。
我們先來了解一下Android與iOS UI應用設計在扁平化設計和材質設計方面的對比。
人機界面指南主要基于三個原則。清晰、尊重和深度。簡單來說,該方法支持極簡主義,使用簡潔的元素,注重排版和扁平化色彩。
簡而言之,Android Material Design被認為是Flat設計的升級版,帶有擬態(tài)性(一種流行的設計概念,即讓所代表的物品與現(xiàn)實世界中的對應物相似)。
用Google設計副總裁 MatíasDuarte 的話來說,它是–
有了這些基礎知識,讓我們從7個方面研究兩個平臺之間的差異。
目錄
1. 導航
2. 按鈕
3. 圖標和屏幕分辨率
4. 字體
5. 控件
6. 卡片
7. 警報
對于iOS應用程序,總是在“后退”按鈕旁邊提示上一個選項卡的名稱。在中間,顯示當前選項卡的名稱,而在右上角則顯示“編輯”或“完成”(控制按鈕)。
說到Android的設計規(guī)則,應用程序通常在抽屜菜單或后退按鈕(可選)之后的左上角顯示標題。移至右上方,總是有一個操作項,例如搜索圖標(也可以是多個,例如“收藏夾”圖標),其后是溢出菜單。
在iOS中,主導航始終顯示在底部,功能菜單專門用于存儲一次性功能。而在Android中,通常會在功能菜單中看到主要導航,或者以搜索欄,浮動操作按鈕等形式在整個界面中存在。
ios界面指南中,沒有類似抽屜導航菜單的標準控件。iOS的全局導航被放置在應用屏幕的底部,一般位于最末位的 "更多"標簽下找到二級導航。
Android中,二次導航是一個抽屜,一旦按下功能菜單圖標,就會從左到右打開,同時產生一個深色的遮罩層。
有四種方法可以在iOS應用中實現(xiàn)“后退”操作:
在某些情況下,Android應用程序中給出了類似后退的操作,您可以通過該操作進入前一個標簽。但是,最常見和最簡單的方法是使用導航欄中的后退按鈕(Android 10中現(xiàn)在是可選的)。
iOS和Android中的按鈕風格最主要的設計區(qū)別在于,iOS中的按鈕遵循扁平化的設計模式,不帶陰影、支持標題大小寫。Android遵循Material Design,帶陰影且字母大寫。
另一個比較重要的按鈕是Floating action button(FAB行動呼吁按鈕)。例如安卓系統(tǒng)中Gmail的compose按鈕,iOS系統(tǒng)中社交媒體應用的新建文章按鈕。
兩種系統(tǒng)都使用8dp的網格來構建屏幕結構,而最常見的邊框是16dp。
在開發(fā)移動應用程序時,以預定義的尺寸設計圖標是非常關鍵的。這里有一個表,描述了所有的測量。
這些表格一開始可能會讓人有點不知所措,但是如果你知道基本尺寸,并且能夠使用倍數(shù)進行檢查和導出,會發(fā)現(xiàn)這并不復雜。
多年來,蘋果一直是Helvetica Neue字體的粉絲,然而在2015年,蘋果開始使用San Francisco,它更節(jié)省空間,非常適合手機、臺式機和iOS Watch使用。
Android系統(tǒng),一直使用Roboto作為標準系統(tǒng)字體。在可預見的未來,谷歌也沒有計劃改變這一深受喜愛的元素。
控件設計包含搜索、CTA按鈕、選擇控件和標簽等元素。每一個都滿足了這樣或那樣的目的,讓我們來看看他們的位置。
搜索功能對于兩個平臺來說都非常重要,蘋果最近還在iMessage中加入了 "搜索欄 "。
在蘋果中,搜索選項有兩種類型--突出和隱藏。通常情況下,搜索圖標會顯示在上邊的選項卡上,而有時需要從上到下拖動屏幕才能顯示搜索欄。此外,如果要取消搜索查詢,可以按 "取消",如果要清除,可以用 "X"。
在安卓系統(tǒng)中,沒有隱藏的搜索欄,你總能在上層標簽中找到一個。如果要取消搜索,只需點擊"←"圖標即可,如果要清除查詢,則和iOS中的一樣。
浮動的動作按鈕(FAB)在Android中充當主要行動按鈕,可以出現(xiàn)在頂部應用欄或一些組件的邊緣。而iOS應用中的主要行動按鈕總是出現(xiàn)在頁面的右上角。
不過也有一些例外,少數(shù)iOS會在底部工具欄顯示CTA,而Android則在上部工具欄顯示。
如果需要顯示一些選項,可以在iOS平臺上使用選取器控件,選取器一般出現(xiàn)在底部。
對于在Android平臺上顯示很少的選項,通常使用一個出現(xiàn)在原地的下拉菜單,或者一個出現(xiàn)在中心的模態(tài)對話框,使用模態(tài)框時應用背景變暗。
據(jù)觀察,iOS系統(tǒng)并沒有一個視覺上類似于 "標簽"的控件。它使用的是一個分段的按鈕。Android使用了"扁平化設計的tab"來實現(xiàn)同樣的效果。
卡片是圖片、文字、視頻的集合,還包括按鈕和評論。
在iOS中,卡片的特點是無陰影、全寬、無圓角。而在安卓系統(tǒng)中,卡片的設計有陰影、溝槽、圓角等功能。
安卓系統(tǒng)的提醒采用的是扁平化的按鈕樣式,具體尺寸可以在材質設計指南中找到。操作按鈕被放置在提醒的右下角。這些 "按鈕 "完全以文字為主(全大寫),讓用戶更容易理解。
至于iOS系統(tǒng)的提醒,則是用分割線隔開。它們基本采用句子或標題的形式,在獨立的區(qū)塊中呈現(xiàn)。它們被放置在彈出窗口的中心。
本文涵蓋了iOS和Android所有的初步差異,希望對你有所幫助,而設計一個iOS或Android的移動應用,總是有迭代的準則,所以,一定要保持信息的更新,及時調整自己的產品設計。
Q. 為什么iOS和Android上的應用看起來不一樣?
品牌和意識形態(tài)的不同,已經波及到他們的操作系統(tǒng)的運作方式。兩個平臺的UI設計已經成為品牌的符號化。
Q. 如何設計一個原生應用?
在設計原生應用時,必須始終遵守iOS UI應用設計指南和Material設計指南。這樣才能使應用與它所要針對的平臺同步。另外,這些平臺有不同的要求,所以你的應用必須滿足它們才能在應用商店上發(fā)布。
Q. iOS比Android更方便用戶使用嗎?
這個問題的答案是純主觀的。它是基于用戶的個人偏好。有些人可能會覺得iOS更實用,而有些人則在各方面都偏愛Android。
一、??界面布局之線性布局(LinearLayout)
這種布局比較常用,也比較簡單,就是每個元素占一行,把它按照橫向排放,也就是每個元素占一列。在布局中都按照垂直或者水平的順序依次排列子元素,每一個子元素都位于前一個元素之后。
二、??界面布局之相對布局(RelativeLayout)
相對布局是android界面設計中比較常用和好用的一個布局方式。
三、??界面布局之表格布局(TableLayout)
表格布局采用行、列的形式來管理元素組件。TableLayout的行和列不需要聲明,而是采用添加方法控制。
每次在TableLayout中添加一個TableRow,一個TableRow就代表表格中的一行,也同樣是容器,往里面添加一個子組件就代表增加一列。在表格布局中,列的寬度由最寬的那個單元格決定,整個表格布局寬度取決于父容器的寬度
四、??界面布局之絕對布局(AbsoluteLayout)
特點:以坐標的方式來定位在屏幕上的位置,引起缺乏靈活性,在沒有絕對定位的情況下相比其他類型的布局更難維護
五、??界面布局之幀布局(FrameLayout)
FrameLayout是五大布局中最簡單的一個布局。在幀布局中,整個界面被當成一塊空白備用區(qū)域,所有的子元素都不能被指定放置的位置,它們統(tǒng)統(tǒng)放于這塊區(qū)域的左上角,并且后面的子元素直接覆蓋在前面的子元素之上,將前面的子元素部分和全部遮擋。
轉自長沙軟件公司---小房子
PPI(Pixels per inch):每英寸所擁有的像素數(shù),即像素密度。
DPI(dots per inch):即每英寸上,所能印刷的網點數(shù),一般稱為像素密度。ppi計算公式:ppi = 屏幕對角線像素數(shù)/屏幕對角線英寸數(shù),通過勾股定理計算屏幕對角線像素數(shù)。
Screen Size(屏幕尺寸):手機屏幕尺寸大小,如3英寸、4英寸、4.3英寸、5.7英寸,指的是對角線的長度。
DIP(device independent pixel):即dip/dp,設備獨立像素。 1px = 1dp density(由dpi決定)
Resolution(分辨率):指手機屏幕垂直和水平方向上的像素個數(shù)。eg分辨率480 800,指該設備垂直方向有800個像素點,水平方向有480個像素點。
px(Pixel像素):相同像素的ui,在不同分辨率的設備上效果不同。在小分辨率設備上會放大導致失真,大分辨率上被縮小。
Android Design里把主流設備的 dpi 歸成了四個檔次: 120 dpi、160 dpi、240 dpi、320 dpi ,具體見如下表格。
實際開發(fā)當中,我們經常需要對這幾個尺寸進行相互轉換(比如先在某個分辨率下完成設計,然后縮放到其他尺寸微調后輸出),一般按照 dpi 之間的比例即 2:1.5:1:0.75 來給界面中的元素來進行尺寸定義。
也就是說如果以 160 dpi 作為基準的話,只要尺寸的 DP 是 4 的公倍數(shù),XHDPI 下乘以 2,HDPI 下乘以 1.5,LDPI 下乘以 0.75 即可滿足所有尺寸下都是整數(shù) pixel 。但假設以 240 dpi 作為標準,那需要 DP 是 3 的公倍數(shù),XHDPI 下乘以 1.333,MDPI 下乘以 0.666 ,LDPI 下除以 2。而以 LDPI 和 XHDPI 為基準就更復雜了。同時第一款Android設備(HTC的T-Mobile G1)是屬于160dpi的。鑒于以上各種原因, 標準dpi=160
谷歌官方對dp的解釋如下:
A virtual pixel unit that you should use when defining UI layout, to express layout dimensions or position in a density-independent way.
The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a "medium" density screen. At runtime, the system transparently handles any scaling of the dp units, as necessary, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.
簡單來說,以160dpi的設備為準,該設備上1dp = 1px;如果屏幕密度大,1dip代表的px就多,比如在320dpi的屏幕上,1dip=2px(即1dp代表2個像素)。在app開發(fā)時,最好用dp來做界面的布局,以保證適配不同屏幕密度的手機。
dp和px的換算公式:
我的理解,該公式表示px的數(shù)值等于dp的數(shù)值*(設備dpi/160)
注意,px、dp是單位,但density沒單位。
applyDimension的源碼如下,可參考:
android的尺寸眾多,建議使用分辨率為 720x1280 的尺寸設計。這個尺寸 720x1280中顯示完美,在 1080x1920 中看起來也比較清晰;切圖后的圖片文件大小也適中,應用的內存消耗也不會過高。
app啟動圖標為48*48dp,對應各dpi設備,圖像資源像素如下:
| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|48 48px|72 72px|94 96px|144px 144px|
操作欄圖標為32*32dp,對應各dpi設備,圖像資源像素如下:其中圖形區(qū)域尺寸是24*24dp,可參考平時ui切圖會有部分留白。
| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|32 32px|48 48px|64 64px|96px 96px|
通知欄圖標為24*24dp,對應各dpi設備,圖標像素如下:
| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|24 24px|36 36px|48 48px|72px 72px|
某些場景需要用到小圖標,大小應當是16*16dp,其中圖形區(qū)域尺寸12*12dp。
| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|16 16px|24 24px|32 32px|48px 48px|
目前,很多UI設計師的UI設計稿是先做iPhone6(750×1334)的,目的是向上適配iPhone6Plus,同時向下適配iPhone5和iPhone4的尺寸。這一節(jié)課也算是25學堂為大家精心整理的iPhone6界面設計尺寸規(guī)范大全。
iOS篇
————————————————————————————————————
界面尺寸
☆ 狀態(tài)欄(status bar):就是電量條,其高度為:40px;
☆ 導航欄(navigation):就是頂部條,其高度為:88px;
☆ 主菜單欄(submenu,tab):就是標簽欄,底部條,其高度為:98px;
☆ 內容區(qū)域(content):就是屏幕中間的區(qū)域,其高度為:1334px-40px-88px-98px=1108px
| 設備|App Store|程序應用|主屏幕|spotlight搜索|標簽欄|工具欄和導航欄|
| :-------------:|:-------------:| :-----:|:-----:|:-----:|
|iPhone6 plus(@3x)|1024 1024px|180 180px|144×144px|87×87 px|75 75px|66 66px|
|iPhone6(@2x)|1024 1024px|120 120px|144×144px|58 58px|75 75px|44 44px|
|iPhone5 - 5s - 5c(@2x) |1024 1024px|120 120px|144×144px|58 58px|75 75px |44 44px|
|iPhone4 - 4s(@2x)|1024 1024px|120 120px|144×144px|58 58px|75 75px|44 44px|
|iPad3 - 4 - Air - Air2 - mini2|1024 1024px|180 180px|144×144px|100 100px|50 50px|44 44px|
|iPad1 - 2|1024 1024px|90 90px|72 72px|50 50px|25 25px|22 22px|
|iPad mini |1024 1024px|90 90px|72 72px|50 50px|25 25px|22 22px|
字體
iPhone 上的字體英文為: HelveticaNeue 至于中文,Mac下用的是黑體-簡,Win下則為華文黑體,所有字體要用雙數(shù)字號。
百度用戶體驗部做過一個小調查, 對于app字體大小的調查結論如下:
當前題目:android界面設計,android界面設計軟件
網站路徑:http://chinadenli.net/article13/dsicids.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站制作、標簽優(yōu)化、移動網站建設、企業(yè)網站制作、外貿網站建設、網站制作
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)