導航:首頁 > 操作系統 > android橫屏適配

android橫屏適配

發布時間:2023-12-11 04:52:03

① 安卓手機怎樣換為橫屏

方法一:在androidManifest.xml中配置

假設不想讓軟體在橫豎屏之間切換,最簡單的辦法就是在項目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation屬性。他有下面幾個參數:

"unspecified":默認值 由系統來推斷顯示方向.判定的策略是和設備相關的,所以不同的設備會有不同的顯示方向.
"landscape":橫屏顯示(寬比高要長)
"portrait":豎屏顯示(高比寬要長)
"user":用戶當前首選的方向
"behind":和該Activity以下的那個Activity的方向一致(在Activity堆棧中的)
"sensor":有物理的感應器來決定。假設用戶旋轉設備這屏幕會橫豎屏切換。
"nosensor":忽略物理感應器。這樣就不會隨著用戶旋轉設備而更改了("unspecified"設置除外)。

方法二:在java代碼中設置

設置橫屏代碼:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//橫屏

設置豎屏代碼:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//豎屏

由於橫屏有兩個方向的橫法,而這個設置橫屏的語句,假設不是默認的橫屏方向,會把已經橫屏的屏幕旋轉180°。

所以能夠先推斷是否已經為橫屏了。假設不是再旋轉,不會讓用戶認為轉的莫名其妙啦!代碼例如以下:
if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

三:

1.直接新建兩個布局文件,剩下的就什麼也不用管了:右鍵單擊『res』文件夾 -> 'new' -> 'Android resource directory'; 將 Directory name 填寫 layout-land,Resource type 選擇layout,這是建立了一個橫屏的布局文

② 一種非常好用的Android屏幕適配

網上關於屏幕適配的文章已經鋪天蓋地了,為什麼我還要講?因為網上現在基本都是使用 屏幕解析度限定符 進行適配,即每種屏幕解析度的設備需要定義一套 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

參考資料:

③ 安卓手機如何開啟橫屏模式

1.先找到並打開設置或辯旦

拓展資料

Android 設置橫屏模式顯示,橫屏模式大部分情況能彌補豎屏的不足——字體小、鍵盤小、畫幅比例不合適,而且橫屏模式下能提供更華麗、更流暢的感官體驗,android 橫屏衫擾,android landscape mode ,android 強制橫屏,android 強制豎屏,android 橫灶橘屏布局,android 設置全屏模式。

④ Android-屏幕適配全攻略(絕對詳細)(一)

關鍵字: 屏幕適配 px dp dpi sp large限定符 .9.png

前言: 這篇文章依然是我在 [慕課網 ][h]學習 凱子哥 的同名視頻 Android-屏幕適配全攻略 ,所記錄下來的筆記---凱子哥講得真的超詳細。
[h]: http://www.imooc.com/ "MOOC"

從上圖可以看出,主流的解析度是前六種:1280×720、1920×1080、800×480、854×480、960×540、1184×720,不過我們有解決方案。看完這篇文章,想必你就可以解決常見的屏幕適配問題。

接下來正式進入正題。

介紹幾個在Android屏幕適配上非常重要的名詞:

屏幕尺寸 是指屏幕對角線的長度。單位是英寸,1英寸=2.54厘米
屏幕解析度 是指在橫縱向上的像素點數,單位是px,1px=1像素點,一般是縱向像素橫向像素,如1280×720
屏幕像素密度 是指每英寸上的像素點數,單位是dpi,即「dot per inch」的縮寫,像素密度和屏幕尺寸和屏幕解析度有關

dip: Density Independent Pixels(密度無關像素)的縮寫。以 160dpi 為基準,1dp=1px
dp: dip
dpi: 屏幕像素密度的單位,「dot per inch」的縮寫

px: 像素,物理上的絕對單位

sp: Scale-Independent Pixels的縮寫,可以根據文字大小首選項自動進行縮放。Google推薦我們使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,最好不要使用奇數和小數。

用於區分不同的像素密度。

在Google官方開發文檔中,說明了 ** mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 ** 的尺寸比例進行縮放。例如,一個圖標的大小為48×48dp,表示在mdpi上,實際大小為48×48px,在hdpi像素密度上,實際尺寸為mdpi上的1.5倍,即72×72px,以此類推。

我們可以通過以下幾種方式來支持各種屏幕尺寸:

wrap_content: 根據控制項的內容設置控制項的尺寸
math_parent: 根據父控制項的尺寸大小設置控制項的尺寸
weight: 權重,在線性布局中可以使用weight屬性設置控制項所佔的比例

例如,我們要實現下圖所顯示的效果:當屏幕尺寸改變時,new reader控制項兩邊的控制項大小不變,new reader控制項會占完剩餘的空間。

具體布局文件如下:

小插曲: 關於 android:layout_weight 屬性

一般情況,我們都是設置要進行比例分配的方向的寬度為0dp,然後再用權重進行分配。如下:

效果為:

效果為:

button1寬度=L+(L-2L)×1/3=2/3L
button2寬度=L+(L-2L)×2/3=1/3L

當然,還有其他的方式,都可以運用此公式進行計算。
在實際開發中,我們一般使用0dp的方式,而不使用其他方式。

簡單的布局一般都使用 線性布局 ,而略微復雜點的布局,我們使用 相對布局 ,大多數時候,我們都是使用這兩種布局的嵌套。

我們使用 相對布局 的原因是, 相對布局 能在各種尺寸的屏幕上保持控制項間的相對位置。

res/layout/main.xml 單面板:

res/layout-large/main.xml 雙面板:

如果這個程序運行在屏幕尺寸大於7inch的設備上,系統就會載入 res/layout-large/main.xml 而不是 res/layout/main.xml ,在小於7inch的設備上就會載入 res/layout/main.xml 。

需要注意的是,這種通過 large 限定符分辨屏幕尺寸的方法,適用於android3.2之前。在android3.2之後,為了更精確地分辨屏幕尺寸大小,Google推出了最小寬度限定符。

res/layout-sw600dp/main.xml ,雙面板布局: Small Width 最小寬度

這種方式是不區分屏幕方向的。這種最小寬度限定符適用於android3.2之後,所以如果要適配android全部的版本,就要使用 large 限定符和 sw600dp 文件同時存在於項目 res 目錄下。

這就要求我們維護兩個相同功能的文件。為了避免繁瑣操作,我們就要使用布局別名。

由於後兩個文具文件一樣,我們可以用以下兩個文件代替上面三個布局文件:

res/layout/main.xml 單面板布局
res/layout/main_twopanes.xml 雙面板布局

然後在 res 下建立
res/values/layout.xml 、
res/values-large/layout.xml 、
res/values-sw600dp/layout.xml 三個文件。

默認布局
res/values/layout.xml :

Android3.2之前的平板布局
res/values-large/layout.xml :

Android3.2之後的平板布局
res/values-sw600dp/layout.xml :

這樣就有了 main 為別名的布局。
在activity中 setContentView(R.layout.main);

這樣,程序在運行時,就會檢測手機的屏幕大小,如果是平板設備就會載入 res/layout/main_twopanes.xml ,如果是手機設備,就會載入 res/layout/main.xml 。我們就解決了只使用一個布局文件來適配android3.2前後的所有平板設備。

如果我們要求給橫屏、豎屏顯示的布局不一樣。就可以使用 屏幕方向限定符 來實現。
例如,要在平板上實現橫豎屏顯示不用的布局,可以用以下方式實現。
res/values-sw600dp-land/layouts.xml :橫屏

res/values-sw600dp-port/layouts.xml :豎屏

自動拉伸點陣圖,即android下特有的 .9.png 圖片格式。

當我們需要使圖片在拉伸後還能保持一定的顯示效果,比如,不能使圖片中的重要像素拉伸,不能使內容區域受到拉伸的影響,我們就可以使用 .9.png 圖來實現。

要使用 .9.png ,必須先得創建 .9.png 圖片,androidSDK給我們提供了的工具就包含 .9.png 文件的創建和修改工具。雙擊 SDK安裝目錄 oolsdraw9patch.bat ,就會打開下圖所示的窗口。

下面是一個例子:

Button屬性設置:

如果我們選擇的內容區域偏差太大,可能就不會顯示出text值 BUTTON 。

好了,這篇文章寫的有點多了,剩下的內容放在 下篇文章 記錄吧。
內容提要:
解決方案-支持各種屏幕密度
解決方案-實施自適應用戶界面流程

未完待續

⑤ android 的界面布局 怎麼適應不同解析度的手機 以及橫豎屏間的切換

各種Android操作系統的手機簡直就是琳琅滿目,屏幕解析度的差異可想而知。目前比較主流的有WVGA=800x480,HVGA=480x320,另外的還有QVGA=320x240。當然還有魅族M9的DVGA=960x640,還有蛋疼的摩托羅拉的FWVGA=854x480。

其實,在你layout的xml文件中,編寫的時候是不是用了許多的padding呢?如果是,那你就蛋疼了。因為這樣的布局永遠是無法適應所有手機屏幕的。

正確的做法應該是使用的是weight屬性。將你控制項的layout中的width、height設置為fill-parent,不要使用wrap——content。因為wrap-content的大小是不固定的。而weight(權重)這個屬性很好的解決了這個問題。

當包裹在控制項外面的Layout的width、height屬性都設置為fill-parent時,可以利用weight的反比特性。即如果控制項A設置weight為5,控制項B設置weight為7,那麼A所佔的空間為5/(5+7),B所佔的空間為7/(5+7)。這樣的反比屬性對任何解析度下的手機都是合適的。

當然,字體就不行了。那怎麼保證字體能夠跟布局一樣能夠自適應呢?
呵呵,很簡單,就是在你的res文件夾中創建一個文件夾,叫做values-320x240。其中320x240是你手機屏幕的解析度,根據你手機屏幕的情況做不同的命名,例如values-800x480。在該文件夾下創建一個dimens.xml文件,定義各種字體的大小。那麼系統就會自動根據你手機屏幕的解析度去調用響應的文件夾。

另外,值得提醒的是,記得在你默認的values文件下的dimens.xml文件中也要寫上相應的字體大小哦,因為當系統無法認識你手機屏幕大小的時候,它會自動去找你默認文件中的

東西,沒有寫的話程序會崩潰。

************************************************************分割線************************************************************

在看下面內容之前首先請看你SDK文檔中以下這篇文章

其實google在解析度適應性的東西已經寫的很清楚了,只是我們很多人沒去看而已

以下是結論:
屏幕解析度:1024x600
density:1(160)
文件夾:values-mdpi-1024x600

屏幕解析度:1024x600
density:1.5(240)
文件夾:values-hdpi-683x400 由1024/1.5 600/1.5得到,需要四捨五入。

屏幕解析度:800x480
density:1(160)
文件夾:values-mdpi-800x480

屏幕解析度:800x480
density:1.5(240)
文件夾:values-hdpi-533x320 由800/1.5 480/1.5得到,需要四捨五入。

以此類推
一般情況下需要創建出values 、values-mdpi 、 values-hdpi文件夾,以備在一些沒有規定的尺寸屏幕上找不到資源的情況。

然後在裡面使用不同的dimens文件,Layout中不要使用顯示的數字,所有的尺寸定義全都援引dimens裡面的內容。

這樣能夠保證深度UI定製的情況

另外在工程的default.properties中如果split.density=false,則解析度適配的時候文件夾命名不需要與scale相除


屏幕解析度:800x480
density:1.5(240)
文件夾:values-hdpi-800x480

************************************************************分割線************************************************************

關於dimens

位置:res\values
單位:px Pixel 以畫面的像素為單位;
in Inches以畫面的多少英寸為單位;
mm Millimeter以畫面的多少毫米為單位;
pt Points 一點為1/72英寸;
dp或dip Density-indepentdent 為160dpi屏幕的一個pixel;
ap Scale-independent Pixels 隨屏幕尺寸改變的一個pixel;

1.drawable: 存放不同解析度對應圖片

在2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是為了支持多解析度。

drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:

(1)drawable-hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)

(2)drawable-mdpi裡面存放中等解析度的圖片,如HVGA (320x480)

(3)drawable-ldpi裡面存放低解析度的圖片,如QVGA (240x320)

系統會根據機器的解析度來分別到這幾個文件夾裡面去找對應的圖片。

在2.1之前的版本可以通過drawable-800x480, drawable-480x320 等方式實現。

2:layout:放置對應不同解析度的布局

創建不同的layout文件夾, layout-800x480,layout-480x320, 系統會根據屏幕的大小自己選擇合適的layout進行使用。

另外:可以在res目錄下建立layout-port和layout-land兩個目錄,裡面分別放置豎屏和橫屏兩種布局文件。

下面列出主流的android機型有:

240x320低端,國產入門級採用,例如HTC G4,G8
320x480中端,大部分基於此解析度,例如HTC G1,G2,G3,G6, MOTO ME600, SAMSUNG I7500
480x800中高端,大部分基於此解析度,例如HTC G5,G7, MOTO MT810
480x854MOTO特有的,例如Droid, Milestone, XT800
960x640, 魅族M9

閱讀全文

與android橫屏適配相關的資料

熱點內容
安卓上的谷歌地圖怎麼用 瀏覽:181
安卓命令行打包 瀏覽:514
編程文字與數字教學視頻 瀏覽:815
如何看手機號碼注冊哪些app 瀏覽:411
linux查看總內存 瀏覽:850
python進程間共享 瀏覽:436
js如何獲取本地伺服器地址 瀏覽:68
gfx什麼時候支持安卓十一系統 瀏覽:939
壓縮機90兆帕 瀏覽:928
程序員調侃語句 瀏覽:579
不是php函數的是 瀏覽:998
壓縮文件好處 瀏覽:785
3d266期神童三膽計演算法 瀏覽:189
通過愛思助手怎麼下載app 瀏覽:323
vi命令將文件創在桌面上 瀏覽:923
程序員做競價 瀏覽:696
江蘇中小學編程納入課程 瀏覽:730
單純形法包括動態規劃演算法 瀏覽:951
cpdf百度網盤 瀏覽:671
綜合布線工程中配線架的演算法 瀏覽:926