⑴ android中的適配器是什麼
適配器就是就是把一些數據給弄得適當,適合以便於在View上顯示。
1、Android適配器是數據和視圖之間的橋梁,以便於數據在View上顯示。適配器就像顯示器,把復雜的東西按人可以接受的方式來展現。我們常用的適配器一共有三個:ArrayAdapter,SimpleAdapter,SimpleCursorAdapter 這三個,他們都是繼承於BaseAdapter 。
2、Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。Android操作系統最初由Andy Rubin開發,主要支持手機。
⑵ android屏幕適配有哪些方法
Android 資源文件夾有其中兩種方式支持屏幕適配:
一、方法:
1.XXX XXX-ldpi XXX-mdpi XXX-hdpi XXX-xhdpi XXX-xxhdpi 這種方式 (推薦使用)
2.XXX XXX-123x456 後面是具體值(不推薦使用這種方式!)
當我們做適配處理時通常會在以上一堆文件夾中定義 xxx.xml 例如 定義一個 : <dimen name="list_item_height">100dip</dimen>
二、適配舉例:
Android的匹配機制和手機系統有關:
規則一:Android4.0 以上的手機,先尋找和設備吻合的文件夾里的相應文件里的資源,如果沒有找到會繼續匹配它下面(比它解析度或密度小)的一些文件夾,最後去XXX 默認文件夾中匹配。
eg1: 小米2s (4.1 1280x720) 有文件夾 XXX XXX-320x240 XXX-800x480 XXX-1280x719 XXX-1280x720 XXX-1280x721 XXX-xhdpi
1.匹配XXX-xhdpi
2.匹配XXX-1280x720
3.匹配XXX-1280x719
4.匹配XXX-480x800
5.匹配XXX-320x240
6.匹配XXX
eg2:HTC ONE (4.2 1920×1080)
規則二:Android4.0 以下的手機,先尋找和設備吻合的文件夾里的相應文件里的資源,如果沒有找到會繼續匹配它下面(比它密度小)的一些文件夾。
eg:三星m250L(同三星9100 2.3.7 800x480) 有文件夾 XXX XXX-320x240 XXX-800x479 XXX-480x800 XXX-ldpi XXX-mdpi XXX-hdpi
1.匹配XXX-hdpi
2.匹配XXX-mdpi
3.匹配XXX-480x800
4.匹配XXX
5.匹配XXX-ldpi
6.程序退出
eg3:華為U8860(2.3.6 854x480)
所以在項目中<dimen name="list_item_height">50dip</dimen> 分別定義在
values : <dimen name="list_item_height">50dip</dimen> 和
values-320x240 : <dimen name="list_item_height">42dip</dimen> 中.
小米2s 會取 values-320x240 中42dip 的值。
⑶ android的適配器有什麼作用
連接控制項與數據源之間的橋梁,用來將數據綁定到控制項上。
在Android界面開發過程中,經常需要使用列表視圖控制項(ListView)、縮略圖瀏覽器控制項(Gallery)、網格控制項 (GridView)、下拉列表(Spinner)等控制項進行數據的展示, 然而Activity中的數據(數組、鏈表、集合、資料庫等)是 無法直接傳遞給這類控制項,要將數據在控制項上進行顯示,必須藉助數據適配器(Adapter)來完成。
(3)android適配工具擴展閱讀:
適配器的適配模式:
一個適配允許通常因為介面不兼容而不能在一起工作的類工作在一起,做法是將類自己的介麵包裹在一個已存在的類中。
適配器模式主要應用於,當介面里定義的方法無法滿足客戶的需求,或者說介面里定義的方法的名稱或者方法界面與客戶需求有沖突的情況。
兩類模式:對象適配器模式 - 在這種適配器模式中,適配器容納一個它我包裹的類的實例。在這種情況下,適配器調用被包裹對象的物理實體。類適配器模式 - 這種適配器模式下,適配器繼承自已實現的類(一般多重繼承)。
適配器不具備數據速率轉換功能。
在計算機編程中,適配器包括:容器適配器、迭代器適配器、泛函適配器等。
⑷ android 屏幕適配
@[TOC](文章目錄)
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
# 前言
<font color=#999AAA >使用工具Android studio,利用values文件下dimens.xml界面適配安卓屏幕</font>
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
<font color=#999AAA >提示:以下是本篇文章正文內容,下面案例可供參考
# 一、概念
1.屏幕解析度單位是px,例如Android手機常見的解析度:320x480px、480x800px、720x1280px、1080x1920px。
2.手機屏幕的密度:每英寸的像素點數,單位是dpi。
| 密度類型 |代表的解析度(px)| 屏幕像素密度(dpi) | 1dp轉換為px |
|:--------|:--------|:--------|:--------|
| 低密度(ldpi) |240x320|120|0.75|
| 中密度(mdpi) |320x480|160|1|
| 高密度(hdpi)|480x800|240| 1.5|
| 超高密度(xhdpi)|720x1280|320|2|
| 超超高密度(xxhdpi) |1080x1920|480|3|
3.由於android的機型屏幕大小品類太多了,有一些是不標準的,這時我們就需要單獨去獲取屏幕的解析度和密度了。
# 二、獲取屏幕的解析度和密度
```java
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float density = displayMetrics.density;
int densityDpi = displayMetrics.densityDpi;
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
Log.e("123","密度:"+density+"---"+densityDpi);
Log.e("123","屏幕解析度:"+width+"x"+height);
Log.e("123","安卓系統:"+android.os.Build.VERSION.RELEASE);
Log.e("123","手錶型號:"+android.os.Build.PRODUCT);
```
# 三、SmallestWidth適配
**smallestWidth適配,或者叫sw限定符適配。指的是Android會識別屏幕可用高度和寬度的最小尺寸的dp值(其實就是手機的寬度值),然後根據識別到的結果去資源文件中尋找對應限定符的文件夾下的資源文件。**
**sw計算公式:sw = 屏幕寬度 / (dpi/160) 註:160是默認的**
**例如:屏幕寬度為1080px、480dpi 的sw = 1080/(480/160)**
# 四、生成 dimens 文件
1、 首先在 res 目錄下新建各種尺寸的 values 文件 。文件名為:values-sw(你要適配屏幕的sw值)dp。
例如:

注意:values文件下也生成 dimens文件
**生成dimens值工具類**
1、先生成標準的值。//value = (i + 1) * 1;
2、再用生成其他的值。 //value = (i + 1) * 需要生成的sw值/標準的sw值;
例如:value = (i + 1) * 160 / 320;
```java
public static void genDimen() {
StringBuilder stringBuilder = new StringBuilder();
try {
double value;
for (int i = 0; i < 500; i++) {
//value = (i + 1) * 1; //這里控制對應轉換的值,如果是標准尺寸就一對一轉換
//value = (i + 1) * 需要生成的sw值/標準的sw值; //這里控制對應轉換的值
value = (i + 1) * 1
//value = (i + 1) * 160 / 320;
value = Math.round(value * 100) / 100;
//dp可改成sp
stringBuilder.append("<dimen name=\"size_" + (i + 1) + "\">" + value + "dp</dimen>\r\n");
}
if (stringBuilder.length() > 4000) {
for (int i = 0; i < stringBuilder.length(); i += 4000) {
if (i + 4000 < stringBuilder.length())
Log.e("123", stringBuilder.substring(i, i + 4000));
else
Log.e("123", stringBuilder.substring(i, stringBuilder.length()));
}
} else {
Log.e("123", stringBuilder.toString());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
```
示例:(我這是以sw320為適配的標準的,你們可改自己的標准)
1、sw320的樣例
```java
<resources>
<dimen name="dimen_1">1.0dp</dimen>
<dimen name="dimen_2">2.0dp</dimen>
<dimen name="dimen_3">3.0dp</dimen>
<dimen name="dimen_4">4.0dp</dimen>
<dimen name="dimen_5">5.0dp</dimen>
<dimen name="dimen_6">6.0dp</dimen>
<dimen name="dimen_7">7.0dp</dimen>
<dimen name="dimen_8">8.0dp</dimen>
<dimen name="dimen_9">9.0dp</dimen>
<dimen name="dimen_10">10.0dp</dimen>
<dimen name="size_1">1.0sp</dimen>
<dimen name="size_2">2.0sp</dimen>
<dimen name="size_3">3.0sp</dimen>
<dimen name="size_4">4.0sp</dimen>
<dimen name="size_5">5.0sp</dimen>
<dimen name="size_6">6.0sp</dimen>
<dimen name="size_7">7.0sp</dimen>
<dimen name="size_8">8.0sp</dimen>
<dimen name="size_9">9.0sp</dimen>
<dimen name="size_10">10.0sp</dimen>
</resources>
```
2、sw160的樣例
```java
<resources>
<dimen name="dimen_1">0.0dp</dimen>
<dimen name="dimen_2">1.0dp</dimen>
<dimen name="dimen_3">1.0dp</dimen>
<dimen name="dimen_4">2.0dp</dimen>
<dimen name="dimen_5">2.0dp</dimen>
<dimen name="dimen_6">3.0dp</dimen>
<dimen name="dimen_7">3.0dp</dimen>
<dimen name="dimen_8">4.0dp</dimen>
<dimen name="dimen_9">4.0dp</dimen>
<dimen name="dimen_10">5.0dp</dimen>
<dimen name="size_1">0.0sp</dimen>
<dimen name="size_2">1.0sp</dimen>
<dimen name="size_3">1.0sp</dimen>
<dimen name="size_4">2.0sp</dimen>
<dimen name="size_5">2.0sp</dimen>
<dimen name="size_6">3.0sp</dimen>
<dimen name="size_7">3.0sp</dimen>
<dimen name="size_8">4.0sp</dimen>
<dimen name="size_9">4.0sp</dimen>
<dimen name="size_10">5.0sp</dimen>
</resources>
```
3、xml界面控制項使用樣例
```java
<TextView
android:layout_width="@dimen/dimen_30"
android:layout_height="@dimen/dimen_30"
android:textSize="@dimen/size_20"
android:layout_margin="@dimen/dimen_10"
android:padding="@dimen/dimen_10">
```
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
# 總結
<font color=#999999 >提示:這里對文章進行總結:
如果你的app需要適配dpi較低的屏幕,最好以最小dpi的sw為適配的標准。
⑸ android studio 適配器是干什麼的
在處理列表數據時,對viewgroup和數據就行適配的,根據列表數據的size生成對應個數的itemview再在viewholder中將每個數據裝填至itemview,還可以處理滑動,數據更新,item的點擊事件等等
⑹ Android 屏幕適配神器ScreenMatch
網上關於屏幕適配的文章已經鋪天蓋地了,為什麼我還要講?因為網上現在基本都是使用 屏幕解析度限定符 進行適配,即每種屏幕解析度的設備需要定義一套 dimens.xml 文件。由於不同解析度的設備太多了,而且有些設備還有虛擬按鍵(例如華為手機),這樣就還需要每個有虛擬按鍵的設備加多一套 dimens.xml 文件,再加上平板那些你會發現 dimens.xml 文件所佔的體積已經超過 2M 了!這絕對不是我們想要的。
我這里要講的是使用 sw<N>dp 限定符,即 smallestWidth(最小寬度) 限定符 來進行適配,使用這種方式只需要少量 dimens.xml 文件即可達到適配,而且根本不用考慮虛擬按鍵的問題。如果只適配手機,dimens.xml 文件所佔的體積只有 100 多 KB,即使加上平板和 TV,也就 500 多 KB,完全可以接收。這種方案已經在自己多個項目中應用過了,經過幾十台手機測試過,基本不會出現適配有問題的情況。製作生成對應 dimens.xml 文件插件(後面會講)的作者也說過他在待過的兩家大公司實踐過,所以請放心使用。
關於為什麼要進行屏幕適配,什麼是 dp、dpi 這些概念我就不去一一講解了,網上很多文章。這里我推薦幾篇講的比較好的:
屏幕解析度限定符適配需要在 res 文件夾下創建各種屏幕解析度對應的 values-xxx 文件夾,如下圖:
然後根據一個基準解析度,例如基準解析度為 1280x720,將寬度分成 720 份,取值為 1px~720px,將高度分成 1280 份,取值為 1px~1280px,生成各種解析度對應的 dimens.xml 文件。如下分別為解析度 1280x720 與 1920x1080 所對應的橫向 dimens.xml 文件:
假設設計圖上的一個控制項的寬度為 720px,那麼布局中就寫 android:layout_width="@dimen/x720" ,當運行程序的時候,系統會根據設備的解析度去尋找對應的 dimens.xml 文件。例如運行在解析度為 1280x720 的設備上,系統會自動找到對應的 values-1280x720 文件夾下的 lay_x.xml 文件,由上圖可知 x720 對應的值為
720.px,可鋪滿該屏幕寬度。運行在解析度為 1920x1080 的設備上,系統會自動找到對應的 values-1920x1080 文件夾下的 lay_x.xml 文件,由上圖可知 x720 對應的值為 1080.0px,可鋪滿該屏幕寬度。這樣就達到了屏幕適配的要求!
smallestWidth 限定符適配原理與屏幕解析度限定符適配原理一樣,系統都是根據限定符去尋找對應的 dimens.xml 文件。例如程序運行在最小寬度為 360dp 的設備上,系統會自動找到對應的 values-sw360dp 文件夾下的 dimens.xml 文件。區別就在於屏幕解析度限定符適配是拿 px 值等比例縮放,而 smallestWidth 限定符適配是拿 dp 值來等比縮放而已。需要注意的是「最小寬度」是不區分方向的,即無論是寬度還是高度,哪一邊小就認為哪一邊是「最小寬度」。如下分別為最小寬度為 360dp 與最小寬度為 640dp 所對應的 dimens.xml 文件:
ScreenUtils——> ScreenUtils
既然原理都一樣,都需要多套 dimens.xml 文件,那為什麼要選擇 smallestWidth 限定符適配呢?
大多數 UI 設計師提供的設計圖無非就幾種,它們對應的獲取方式如下:
這些文件當然不會手動去寫,網上已經有大神提供了自動生成這些文件的插件 ScreenMatch 。但是這個插件還是有點問題的:
基於以上問題,我在該插件的源碼上優化生成了新的插件 ScreenMatch ,由於插件庫已經有原作者的插件了,所以我就不重復造輪子上傳到插件庫了,你直接用本地安裝的方式安裝即可。
工具使用步驟:
然後選擇在哪個 mole 下執行適配。即基於哪個 mole 下的 res/values/dimens.xml 文件作為基準 dimens.xml 文件,生成的其他尺寸 dimens.xml 文件放在哪個 mole 下。例如選擇 app,然後點擊 OK ,出現如下界面表示生成文件成功。如下圖:
然後再看看 res 目錄下會自動生成一堆 dimens.xml 文件,如下圖:
通過上面的步驟就已經生成了所有設備對應的 dimens.xml 文件。
步驟 3 是以插件默認的最小寬度基準值為 360dp,適配的設備最小寬度為
320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365(包含了平板和 TV )生成的文件,但實際情況要根據設計圖和需求設置。
例如設計圖的最小寬度為 375dp,則需要更改最小寬度基準值為 375dp。如果項目只需要適配手機的話,適配的設備最小寬度保留 320,360,384,392.7272,400,410,411.4285,432,480 即可,若發現手機還有其他最小寬度自行加上即可,也麻煩把該最小寬度提供給我,我們一起來完善該份適配。
以上修改需要在配置文件里修改,即 screenMatch.properties 文件,該配置文件是執行完上面第 3 步後自動生成在項目的跟目錄下的。如下圖:
打開配置文件,修改下圖中 1、3、4 的值即可。(圖中單位均為 dp)
1:最小寬度基準值,填寫設計圖的最小寬度值即可。
2:插件默認適配的最小寬度值,即默認情況下會生成如下值的 dimens.xml 文件。
3:需要適配的最小寬度值(如果是小數,則保留 4 位小數。例如 392.727272...,則取 392.7272),即你想生成哪些 dimens.xml 文件。
4:忽略不需要適配的最小寬度值,即忽略掉插件默認生成的 dimens.xml 文件。
配置文件修改完成後,重新執行第 3 步,生成新的 dimens.xml 文件。
當然!如果你的設計圖也是標準的 360dp,那麼上面的步驟你可以忽略。直接復制我 github 上你需要的 dimens.xml 文件到你的項目即可, 默認的 values 文件夾下也需要一份 。
設計圖標注多少 dp,布局中就寫多少 dp ,非常方便!
大多數 UI 設計師提供的設計圖無非就幾種,它們對應的使用方式如下:
說了這么多,其實只需要簡單的 2 步:
很多人肯定會有疑問,難道我用了這套適配方案就可以全部直接寫死寬高了?那肯定不是的,如果一些好用的適配技巧能實現的,那就不要用直接寫死寬高的方式。這套適配方案搭配下面這些適配技巧可以讓你的屏幕適配更完美。
絕對布局(AbsoluteLayout)直接使用 X、Y 坐標來控制控制項的位置,對於屏幕碎片化這么嚴重的今天,使用絕對布局對於屏幕適配來說就是災難性的,所以 Google 已經廢棄了該控制項。
相對布局(RelativeLayout)或者約束布局(ConstraintLayout)就不一樣了,相對布局的子控制項之間使用 相對位置 的方式排列,即使屏幕的大小改變,控制項的相對位置也不會變化,與屏幕大小無關,靈活性很強。約束布局也是類似的,通過對某些控制項進行約束來確定它們之間的位置。
Nine-Patch 圖片是一種被特殊處理過的 PNG 圖片,你可以指定哪些區域可以拉伸而哪些區域不可以。例如聊天界面中的聊天氣泡背景圖就需要做成 Nine-Patch 圖片,因為每條消息的字數不是固定的,如果背景圖片不能隨著字數的長短進行縮放,那麼就會導致背景圖片變形。
因為各種屏幕高寬比並不是固定的,有 16:9、4:3,還有全面屏的 19.5:9 等等,如果強行將寬高都適配那隻會導致布局變形。
例如一個控制項的寬高為 360dp 和 640dp,如果將它顯示在寬高為 360dp 和 640dp 的設備上是正常鋪滿整個屏幕的,但是顯示在寬高為 360dp 和 780dp 的設備上高度則不能鋪滿,如果你讓高度鋪滿,而寬度又保持不變,那就會出現變形的情況。所以這也就是為什麼目前市面上的屏幕適配方案只能以寬或高一個維度去適配,另一個方向用滑動或權重的方式去適配的原因。
那你為什麼說高度也能適配呢?
這里說的高度也能適配指的是在不同解析度和密度的手機上能達到等比縮放的適配,其他屏幕適配方案也是一樣的。
注意:smallestWidth 限定符適配的效果是讓不同解析度和密度的設備上能達到以設計圖等比縮放的適配,如果設備與設計圖相差太大時並不能達到很好的適配效果,需要單獨出圖,其他屏幕適配方案也是一樣的。
同橫屏道理一樣,平板、TV 與手機的寬高差距太大,想要平板、TV 也能完全適配,那就只能讓設計師出一套平板、TV 的設計圖,然後單獨寫一套平板、TV 的布局文件。
注意:再說一遍,smallestWidth 限定符適配的效果是讓不同解析度和密度的設備上能達到以設計圖等比縮放的適配,如果設備與設計圖相差太大時並不能達到很好的適配效果,需要單獨出圖,其他屏幕適配方案也是一樣的。
github 地址: ScreenAdaptation
參考資料: