日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

屏幕适配经验

發布時間:2025/7/25 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 屏幕适配经验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

橫屏和豎屏的切換,以及分辨率大小不同。

一、橫豎屏切換:

1、Android應用程序支持橫豎屏幕的切換,android中每次屏幕的切換動會重啟Activity,所以應該在Activity銷毀(執行onPause()方法和onDestroy()方法)前保存當前活動的狀態;在Activity再次創建的時候載入配置,那樣,進行中的游戲就不會自動重啟了!有的程序適合從豎屏切換到橫屏,或者反過來,這個時候怎么辦呢?可以在配置Activity的地方進行如下的配置android:screenOrientation="portrait"(landscape是橫向,portrait是縱向)。這樣就可以保證是豎屏總是豎屏了。

2、而有的程序是適合橫豎屏切換的。如何處理呢?首先要在配置Activity的時候進行如下的配置:

android:configChanges="keyboardHidden|orientation",

另外需要重寫Activity的onConfigurationChanged方法。

實現方式如下:

@Override

publicvoidonConfigurationChanged(ConfigurationnewConfig){

super.onConfigurationChanged(newConfig);

if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){

//landdonothingisok

}elseif(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){

//portdonothingisok

}

}

?

二、分辨率問題:

對于分辨率問題,官方給的解決辦法是創建不同的layout文件夾,這就需要對每種分辨率的手機都要寫一個布局文件,雖然看似解決了分辨率的問題,但是如果其中一處或多處有修改了,就要每個布局文件都要做出修改,這樣就造成很大的麻煩。那么可以通過以下幾種方式解決:

一)使用layout_weight

目前最為推薦的Android多屏幕自適應解決方案。

? ? 該屬性的作用是決定控件在其父布局中的顯示權重,一般用于線性布局中。其值越小,則對應的layout_width或layout_height的優先級就越高(一般到100作用就不太明顯了);一般橫向布局中,決定的是layout_width的優先級;縱向布局中,決定的是layout_height的優先級。

? ? 傳統的layout_weight使用方法是將當前控件的layout_width和layout_height都設置成fill_parent,這樣就可以把控件的顯示比例完全交給layout_weight;這樣使用的話,就出現了layout_weight越小,顯示比例越大的情況(即權重越大,顯示所占的效果越小)。不過對于2個控件還好,如果控件過多,且顯示比例也不相同的時候,控制起來就比較麻煩了,畢竟反比不是那么好確定的。于是就有了現在最為流行的0px設值法。看似讓人難以理解的layout_height=0px的寫法,結合layout_weight,卻可以使控件成正比例顯示,輕松解決了當前Android開發最為頭疼的碎片化問題之一。

先看下面的styles(style_layout.xml)

<?xml version="1.0" encoding="utf-8"?>

<resources>?

?

<!-- 全屏幕拉伸-->

? <style name="layout_full">?

??? <item name="android:layout_width">fill_parent</item>?

??? <item name="android:layout_height">fill_parent</item>?

? </style>

??

<!-- 固定自身大小-->

? <style name="layout_wrap">?

??? <item name="android:layout_width">wrap_content</item>?

??? <item name="android:layout_height">wrap_content</item>?

? </style>

?

<!-- 橫向分布-->

? <style name="layout_horizontal" parent="layout_full">?

??? <item name="android:layout_width">0px</item>?

? </style>

???

<!-- 縱向分布-->

? <style name="layout_vertical" parent="layout_full">?

??? <item name="android:layout_height">0px</item>?

? </style>

????????

</resources>

可以看到,layout_width和layout_height兩個屬性被我封裝成了4個style,?根據實際布局情況,選用當中的一種,不需要自己設置

二)清單文件配置:【不建議使用這種方式,需要對不同的界面寫不同的布局】

需要在AndroidManifest.xml文件的<manifest>元素如下添加子元素

<supports-screensandroid:largeScreens="true"

android:normalScreens="true"

android:anyDensity="true"

android:smallScreens="true"

android:xlargeScreens="true">

</supports-screens>

以上是為我們的屏幕設置多分辨率支持(更準確的說是適配大、中、小三種密度)。

Android:anyDensity="true",這一句對整個的屏幕都起著十分重要的作用,值為true,我們的應用程序當安裝在不同密度的手機上時,程序會分別加載hdpi,mdpi,ldpi文件夾中的資源。相反,如果值設置為false,即使我們在hdpi,mdpi,ldpi,xdpi文件夾下擁有同一種資源,那么應用也不會自動地去相應文件夾下尋找資源。而是會在大密度和小密度手機上加載中密度mdpi文件中的資源。

有時候會根據需要在代碼中動態地設置某個值,可以在代碼中為這幾種密度分別設置偏移量,但是這種方法最好不要使用,最好的方式是在xml文件中不同密度的手機進行分別設置。這里地圖的偏移量可以在values-xpdi,values-hpdi,values-mdpi,values-ldpi四種文件夾中的dimens.xml文件進行設置。

?

三)、其他:

說明:

?????? 在不同分辨率的手機模擬器下,控件顯示的位置會稍有不同

?????? 通過在layout中定義的布局設置的參數,使用dp(dip),會根據不同的屏幕分辨率進行適配

?????? 但是在代碼中的各個參數值,都是使用的像素(px)為單位的

技巧:

1、盡量使用線性布局,相對布局,如果屏幕放不下了,可以使用ScrollView(可以上下拖動)

ScrowView使用的注意:

在不同的屏幕上顯示內容不同的情況,其實這個問題我們往往是用滾動視圖來解決的,也就是ScrowView;需要注意的是ScrowView中使用layout_weight是無效的,既然使用ScrowView了,就把它里面的控件的大小都設成固定的吧。

2、指定寬高的時候,采用dip的單位,dp單位動態匹配

3、由于android代碼中寫的單位都是像素,所有需要通過工具類進行轉化

4、盡量使用9-patch圖,可以自動的依據圖片上面顯示的內容被拉伸和收縮。其中在編輯的時候,灰色區域是被拉伸的,上下兩個點控制水平方向的拉伸,左右兩點控制垂直方向的拉伸

?????? 工具在adt-bundle-windows-x86-20130522\sdk\tools目錄下的draw9patch.bat

?

?

?

三、手機分辨率px和dp的關系:

dp:是dip的簡寫,指密度無關的像素。

?????? 指一個抽象意義上的像素,程序用它來定義界面元素。一個與密度無關的,在邏輯尺寸上,與一個位于像素密度為160DPI的屏幕上的像素是一致的。要把密度無關像素轉換為屏幕像素,可以用這樣一個簡單的公式:pixels=dips*(density/160)。舉個例子,在DPI為240的屏幕上,1個DIP等于1.5個物理像素。

強烈推薦你用DIP來定義你程序的界面布局,因為這樣可以保證你的UI在各種分辨率的屏幕上都可以正常顯示。

/**

???? * 根據手機的分辨率從 px(像素) 的單位 轉成為 dp

???? */?

??? public static int px2dip(Context context, float pxValue) {?

??????? final float scale = context.getResources().getDisplayMetrics().density;?

??????? return (int) (pxValue / scale + 0.5f);?

??? }?

?

/**

???? * 根據手機的分辨率從 dip 的單位 轉成為 px(像素)

???? */?

??? public static int dip2px(Context context, float dpValue) {?

??????? final float scale = context.getResources().getDisplayMetrics().density;?

??????? return (int) (dpValue * scale + 0.5f);?

??? }?

轉載于:https://www.cnblogs.com/dubo-/p/6676241.html

總結

以上是生活随笔為你收集整理的屏幕适配经验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。