android代碼適配
⑴ 怎麼實現android應用的適配問題
怎樣適配多種屏幕
a.在manifest里定義你的程序支持的屏幕類型,相應代碼如下:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"] //是否支持小屏
android:normalScreens=["true" | "false"] //是否支持中屏
android:largeScreens=["true" | "false"] //是否支持大屏
android:xlargeScreens=["true" | "false"] //是否支持超大屏
android:anyDensity=["true" | "false"] //是否支持多種不同密度的屏幕
android:requiresSmallestWidthDp=」integer」
android:compatibleWidthLimitDp=」integer」
android:largestWidthLimitDp=」integer」/>
b.對不同大小的屏幕提供不同的layout。
比如,如果需要對大小為large的屏幕提供支持,需要在res目錄下新建一個文件夾layout-large/並提供layout。當然,也可以在res目錄下建立layout-port和layout-land兩個目錄,裡面分別放置豎屏和橫屏兩種布局文件,以適應對橫屏豎屏自動切換。
c.對不同密度的屏幕提供不同的圖片。
應盡量使用點9格式的圖片,如需對密度為low的屏幕提供合適的圖片,需新建文件夾drawable-ldpi/,並放入合適大小的圖片。相應的,medium對應drawable-mdpi /,high對應drawable-hdpi/,extra high對應drawable-xhdpi/。
圖片大小的確定:low:medium:high:extra high比例為3:4:6:8。舉例來說,對於中等密度(medium)的屏幕你的圖片像素大小為48×48,那麼低密度(low)屏幕的圖片大小應為36×36,高(high)的為72×72,extra high為96×96。
不同密度的屏幕對應的圖片比例
3、多屏幕適配的4條黃金原則
a.在layout文件中設置控制項尺寸時應採用wrap_content,fill_parent和dp。
具體來說,設置view的屬性android:layout_width和android:layout_height的值時,wrap_content,fill_parent或dp比pix更好。相應地,為了使文字大小更好的適應屏幕應該使用sp來定義文字大小。
b.在程序的代碼中不要出現具體的像素值。
為了使代碼簡單,android內部使用pix為單位表示控制項的尺寸,但這是基於當前屏幕基礎上的。為了適應多種屏幕,android建議開發者不要使用具體的像素來表示控制項尺寸。
c.不要使用AbsoluteLayout(android1.5已廢棄) 。相應地,應使用RelativeLayout。
⑵ android Fragment中的ViewPager添加適配器應該怎麼寫代碼
package com.genius.demo;
import java.util.List;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
public class ViewPageAdapter extends PagerAdapter{
private final static String TAG = "MyPagerAdapter";
List<View> mViewList;
public ViewPageAdapter(List<View> viewList)
{
mViewList = viewList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if (mViewList != null)
{
return mViewList.size();
}
return 0;
}
@Override
public Object instantiateItem(View view, int index) {
// TODO Auto-generated method stub
((ViewPager) view).addView(mViewList.get(index), 0);
return mViewList.get(index);
}
@Override
public void destroyItem(View view, int position, Object arg2) {
// TODO Auto-generated method stub
((ViewPager) view).removeView(mViewList.get(position));
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean isViewFromObject(View view, Object obj) {
// TODO Auto-generated method stub
return (view == obj);
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
// Log.i(TAG, "startUpdate");
}
}
⑶ 為什麼說Android開發屏幕適配很難
1. 代碼方式 獲取屏幕的寬高 然後根據自己的設計圖 給控制項設置寬高
優點:能夠適配不同屏幕。 ?缺點:代碼較多,適合某些特殊需求。
2. 布局方式 ?比如layout-land(橫屏時候走這個裡面的布局) layout-port(豎屏時候走這里的布局)value-1080-width(名字好像是類似這樣忘記了, 這裡面可以定義一些 ?按鈕的大小,這樣屏幕寬度是1080時候就走這裡面的參數) hdpi ?xhdpi ?xxhdpi 等放不同解析度的圖片
優點: 簡單 不用修改代碼 ?缺點:資源文件比較大
一般都是採用1、 2混合的方式來適配。
⑷ 如何Android屏幕的純代碼界面適配
Android中一個layout想適配各種屏幕尺寸那麼你需要按以下規則去寫layout:
1. 盡量使用wrap_content、match_parent、weight 來規定layout的大小。
2. 要確保布局的靈活性並適應各種尺寸的屏幕,應使用 「wrap_content」 和 「match_parent」 控制某些視圖組件的寬度和高度。
3. 使用 「wrap_content」,系統就會將視圖的寬度或高度設置成所需的最小尺寸以適應視圖中的內容,而 「match_parent」(在低於 API 級別 8 的級別中稱為「fill_parent」)則會展開組件以匹配其父視圖的尺寸。
4. 如果使用 「wrap_content」 和 「match_parent」 尺寸值而不是硬編碼的尺寸,視圖就會相應地僅使用自身所需的空間或展開以填滿可用空間。此方法可讓布局正確適應各種屏幕尺寸和屏幕方向。
5. 如果某些地方必須要規定控制項的大小,那麼要使用dp 或者 dip單位。
6. 欄位必須使用 sp單位。
7. 將不同的圖片放到不同的drawable目錄下,解析度的匹配規則如下:
drawable-mdpi 320 * 480
drawable-hdpi 480*800
drawable-xhdpi 720 * 1280
drawable-xxhdpi 1080 * 1920
drawable-xxxhdpi 1080+
⑸ android適配器怎樣進行數據適配
顧名思義,就是把一些數據給弄得適當,適合以便於在View上顯示。適配器就像顯示器,把復雜的東西按人可以接受的方式來展現。也可以這樣來理解適配器,ListView通過適配器,理解我們要對ListView里加入什麼內容,而我們在適配器里@Override的方法,就是讓我們寫上我們要告訴這個ListView的一些基本內容。
可以說適配器就是數據和視圖之間的橋梁,學好適配器還是非常重要的。
讓我們先從各個方面理解適配器,然後看一些例子我想應該就可以徹底掌握它了!
適配器的工作原理:
適配器是怎麼處理得到的數據,並把它顯示出來的呢?其實很簡單,說白了適配器它也是一個類,在類裡面它實 現了父類的這幾個方法:
public int getCount() //得到數據的行數
public Object getItem(int position) //根據position得到某一行的記錄
public long getItemId(intposition) //的到某一條記錄的ID
還有最重要的:
publicView getView(intposition, View convertView, ViewGroup parent)
//相比於其它幾個方法這個方法是最重要的,它顯式的定義了適配器將要以什麼樣的方式去顯示我們所 填充的數據,在自定義的適配器裡面我們通常會給它寫個布局文件。
這些在最後的一兩個例子里會仔細講解,我們從簡單的看起:首先看看常用的適配器
我們常用的適配器一共有三個,當然不包含自定義的適配器:就是ArrayAdapter,SimpleAdapter,SimpleCursorAdapter 這三個,他們都是繼承於BaseAdapter 。
下面我會逐一介紹,我們在具體應用中來繼續學習Adapter:
說道Adapter不得不說道ListView,或者說用到ListView不得不提到Adapter
在android開發中ListView是比較常用的組件,它以列表的形式展示具體內容,並且能夠根據數據的長度自適應顯示。
而列表的顯示需要三個元素:
1.ListVeiw 用來展示列表的View。
2.適配器 用來把數據映射到ListView上的中介。
3.數據 具體的將被映射的字元串,圖片,或者基本組件。
根據列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最為簡單,只能展示一行字。SimpleAdapter有最好的擴充性,可以自定義出各種效果。SimpleCursorAdapter可以認為是SimpleAdapter對資料庫的簡單結合,可以方面的把資料庫的內容以列表的形式展示出來
我們從最簡單的ListView開始(ArrayAdapter):
我打算把這幾種適配器的例子放在一個app裡面,然後上傳到我的資源,再分享鏈接給大家。所以我打算由MainActivity里的Button來跳轉到各個例子,現在讓我們一步步的把這個Demo寫出來。
項目開始啦!
(1)首先,新建一個app ,名字叫做 AdapterDemo ,先在activity_main.xml里添加一個button,一會跳轉的時候使用。
(2)然後新建一個類ArrayAdapterDemo繼承自Activity作為我們第一個小例子的Activity,@Override 我們的onCreate方法
新建一個xml文件arrayadapterdemo.xml作為我們的布局文件,其中包含一個文本域和一個ListView,代碼如下:
arrayadapterdemo.xml:
?
1
2
3
4
5
6
7
8
9
10
<!--?xml version="1.0" encoding="utf-8"?-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="這是ArrayAdapter的一個例子">
</textview>
<listview android:id="@+id/arrayadapterdemolistview" android:layout_width="wrap_content" android:layout_height="wrap_content">
</listview>
</linearlayout>
(3)然後回到ArrayAdapterDemo,定義一個Listview暫且叫做lv,並且lv=(ListView)findViewById(R.id.arrayadapterdemolistview); ,setContentView()為剛才的xml布局,然後為lv設置一個適配器,這里使用的是安卓原生的ArrayAdapter(Context context, inttextViewResourceId, List objects)來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器 來兩者的適配工作。
ArrayAdapter的構造需要三個參數,依次為:this,布局文件(注意這里的布局文件描述的是列表的每一行的布局, android.R.layout.simple_list_item_1是系統定義好的布局文件只顯示一行文字,數據源(一個List集合)。同時用setAdapter()完 成適配的最後工作。
一般寫一個getData()方法來作為最後一個參數,最終代碼如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.example.adapterdemo;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ArrayAdapterDemo extends Activity {
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.arrayadapterdemo);
lv=(ListView)findViewById(R.id.arrayadapterdemolistview);
lv.setAdapter(new ArrayAdapter<string>(this,
android.R.layout.simple_expandable_list_item_1, getData()));
}
public List<string> getData(){
List<string> data = new ArrayList<string>();
data.add("測試數據1");
data.add("測試數據2");
data.add("測試數據3");
data.add("測試數據4");
return data;
}
}
</string></string></string></string>
再在AndroidManifest.xml中注冊Activity並在主界面中完成button監聽跳轉就可以了。
⑹ android源碼是適配nexus的嗎
源程序代碼是適配Visual Basic的。
在Visual Basic中的基本語句包括:
一、賦值語句。
賦值語句的語法如下:
變數名或對象.屬性=表達式
它的含義是把等號右邊的值賦給等號左邊的值。
二、判定結構。
一、If語句。
用If...Then結構有條件地執行一個或多個語句。單行語法和多行塊語法都可以使用:
If condition Then statement
If condition Then
Statements
End If
Condition 通常是比較式,但它可以是任何計算數值的表達式。Visual Basic 將這個值解釋為True或False:一個為零的數值為False,而任何非零數值都被看作True。若condition為True,則Visual Basic執行Then
關鍵字後面的所有statements。可以使用單行或多行語法有條件地執行一個語句。
注意:If...Then的單行格式不用End If語句。如果condition為True時要執行多行代碼,則必須使用多行塊If...Then...End If語法。
二、If...Then...Else語句。
用If...Then...Else塊定義幾個語句塊,執行其中一個語句:
If condition1 Then
[statementblock-1]
[ElseIf condition2 Then
[statementblock-2]] ...
[Else
[statementblock-n]]
End If
Visual Basic首先測試condition1。如果它為False,Visual Basic就測試
condition2,依次類推,直到找到一個為True的條件。當它找到一個為
True的條件時,Visual Basic就會執行相應的語句塊,然後執行End If後面的代碼。作為一個選擇,可以包含Else語句塊,如果條件都不是True,則Visual Basic執行Else語句塊。
If...Then…ElseIf只是If...Then...Else的一個特例。注意,可以使用任意數量的
ElseIf子句,或者一個也不用。可以有一個Else子句,而不管有沒有ElseIf
子句。
二、循環語句。
電腦最擅長的就是不厭其煩地重復做一項工作成千上萬遍(即重復執行幾行代碼),這就是通過循環結構來完成的。VB支持的循環結構有:Do…Loop和For…Next。
用Do循環重復執行一個語句塊,且重復次數不定。Do…Loop是以計算數值為條件以決定是否繼續執行。條件必須是一個數值或者值為True或False的表達式。
在下面的Do…Loop循環中,只要條件為真就執行循環。
Do While 循環條件
循環語句塊
Loop
當Visual Basic執行到這個Do循環時首先測試條件,條件為假時,跳過所有語句。如果條件為真,Visual Basic就會執行語句,退回到Do While語句測試條件。只要條件為真,循環可以隨意執行幾次。如果條件一開始便為假,則不會執行語句。
還有一種Do…Loop語句,是先執行語句,每次執行之後測試條件,循環中的語句至少執行一次。
Do
循環語句塊
Loop While 循環條件
在不知道循環要執行幾次語句時,用Do循環,知道循環次數時,可以使用For…Next循環。For循環使用一個叫做計數器的變數,重復一次循環之後,計數器的值會增加或減少。
For 計數器=初值To終止值Step增量
循環語句塊
Next 計數器
計數器、初值、終止值和增量為數值型。執行For循環時,設置計數器等於初值,測試計數器是否大於終止值,是則退出循環,執行循環語句,計數器增加增量後重復以上步驟。
用Exit語句可以退出For循環、Do循環,它的語法是Exit Do和Exit For,在循環中出現的次數無限制。
⑺ 用android studio怎麼做適配
一、關於布局適配 1、不要使用絕對布局 2、盡量使用match_parent 而不是fill_parent 。 3、能夠使用權重的地方盡量使用權重(android:layout_weight) 4、如果是純色背景,盡量使用android的shape 自定義。 5、如果需要在特定解析度下適配,可以...
⑻ 如何做到 一套代碼 安卓iOS都能適配
Android適配是一個大坑,你可能早有耳聞。但是別人告訴你坑,然後你也說坑,肯定是無法令人信服的。我們做學問,不能光知其然不知所以然,適配問題到底有多坑,為什麼坑,以及如何從坑裡爬出來,就是我們今天要探討的話題了。
這還得從Android的開放性說起。不同於iOS,Android的設備廠商可以生產任意屏幕大小的手機、平板和TV,谷歌對此並沒有做任何限制。直接後果就是設備越來越多,大大小小的屏幕尺寸也是層出不窮。另一方面,程序員都有一個夢想,就是一套代碼走天下,誰都不想把美好青春浪費在應付各種奇葩的屏幕適配上去。所以說程序員一談適配色變,尤其是Android的適配,簡直比產品經理改需求還要痛苦。這里有兩張圖,你可以看下當前形勢多麼嚴峻。
⑼ android代碼中設置大小時能用dimens適配嗎
android代碼中設置大小時能用dimens適配,具體操作:
1.單位全部用dp,優先使用包裹內容和填充父窗體和權重來完成布局。
2.通過dimens文件來適配,需要三套,不考慮橫屏。
2.1 默認的dimens.xml 放按hdpi適配的參數;
2.2 hdpi的dimens.xml 放按hdpi適配的參數;
2.3 xhdpi的dimens.xml 放按xhdpi適配的參數;
3.適配的時候只用完美的完成一套xhdpi的dimens文件,然後通過代碼生成hdpi的,因為就dp來說,他們有固定的比例關系,代碼如下:
ldpi 1dp = 0.75px 320*240 160dp = 120px
mdpi 1dp = 1px 480*320 160dp = 160px
hdpi 1dp = 1.5px 800*480 160dp = 240px
xhdpi 1dp = 2px 1280*720 160dp = 320px<360px 180dp = 360px
xxhdpi 1dp = 3px 1920*1080 160dp = 480px < 540px 180dp = 540px