A. 安卓中如何設置listview 最後一個item距頂部高度,就是最後一個間距和其他不一樣
這個只是單個item實現的功能啊。 對於單個item,新建一個ViewHolder類來處理此item的事件。 左上角是一個標題,用單行的textView。內容就用一個固定高度的textView。 右下角就是一個imageButton. 建議此Item用RelativeLayout布局。 在點擊imageButton的時候觸發一個事件,設置內容textView的高度為自適應,然後imageButton的圖片換一個,刷新界面。 收起的時候同理。
B. android中常見的單位ppi,dp,dpi,sp,px
在android 開發過程中,我們使用的單位比較少,一般情況下在描述字體大小的時候我們通常用sp,而在設置間距的時候我們用dp,除此之外很少再用到其他單位,而且很多時候我們用著用著就習慣了,也不去探究為什麼這么寫,可不可以用其他單位,每個單位到底代表著什麼意思,所以說,習慣真的很可怕呀。今天,我們就來一探究竟,看看這些單位背後的含義。
像素即是屏幕上顯示數據的最基本的點,在PS裡面也是其最根本的單位,所有的圖形都是在此基礎上生成的,平時我們經常講的手機屏幕解析度就是以像素作為單位的,比如在android中我們經常說的手機像素是1080X1920,其實它所表達的意思是在該手機上面在橫向上面有1080個像素點,在縱向上有1920個像素點。
在android中用來形式字體大小的單位,正常情況下會按照手機系統設置的文本大小來顯示文字,但是同時也會與系統設置的文本保持一致,比如在有些老年機上面為了更好的操作手機有些人會將字體設置為較大字體,這個時候使用sp作為單位的字體也會隨之變大,但是如果將字體大小的單位設置為dp,則不會隨著系統字體的變化而變化。
在每次的手機廠商新品發布會上,我們都會聽到關於手機的介紹,比如手機的屏幕解析度,多大尺寸等等。而當我們知曉一個手機的屏幕分辯率和手機尺寸的時候,就可以計算出手機的物理像素密度,其計算公式為:
需要注意的是,PPI是Android手機物理像素密度,而非在Android開發過程中我們經常說到的像素密度。
屏幕密度與dpi密切相關,dpi是每英寸的點數。也就是說,密度越大,每英寸內容納的點數就越多。
在android.util包下有個DisplayMetrics類可以獲得密度相關的信息。最重要的是densityDpi這個成員,它有如下幾個常用值:
DENSITY_LOW = 120
DENSITY_MEDIUM = 160 //默認值
DENSITY_TV = 213 //TV專用
DENSITY_HIGH = 240
DENSITY_XHIGH = 320
DENSITY_400 = 400
DENSITY_XXHIGH = 480
DENSITY_XXXHIGH = 640
dpi的值主要是通過displayMetrics獲取的,獲取方式為:
val densityDpi = resources.displayMetrics.densityDpi。
dp和dip是一樣的,設備獨立像素,這個和設備硬體有關,不同設備有不同的顯示效果。而通常在做android項目的時候,為了適配市場上面眾多的手機屏幕分辯率,我們一般都會採用dp。dp是Android基於物理設備的PPI抽象出來的一個單位。它是以160dpi的屏幕為基準定義的,在160dpi的屏幕上1dp=1px,那麼由此我們就可以得出其計算公式:
換算公式:1dp = (屏幕ppi/160)px或者是px = (屏幕ppi/160)*1dp。舉個例子:假設ppi = 320,那麼1dp = 2px。
下面我們來演練一下:
如圖所示,手機的屏幕分辯率為1080X1920,尺寸為5寸,從而計算得出PPI的值為440,再通過PPI計算出1dp 約等於3px。假設現在美工給的圖上面有一個a圖標,距離頂部的距離為30px,那麼根據最終我們的換算結果可知,我們設置為10dp就可以達到完美的顯示效果。
C. Android 屏幕適配之bug 劉海屏、水滴屏
上述兩種屏幕都可以統稱為劉海屏,不過對於右側較小的劉海,業界一般稱為水滴屏或美人尖。
目前國內流行的手機廠商主要有:vivo、oppo、華為、小米。各廠商對劉海屏的適配都大不相同,各自有各自對劉海屏的適配API,具體的適配方法可以閱讀相應的官網:
VIVO: https://dev.vivo.com.cn/documentCenter/doc/103
OPPO: https://open.oppomobile.com/wiki/doc#id=10159
小米: https://dev.mi.com/console/doc/detail?pId=1293
華為: https://developer.huawei.com/consumer/cn/devservice/doc/50114 ?
具體的適配方法這里不作一一介紹,按照以上四大廠商官網所給出的適配方法,這里給出四大廠商判斷/獲取劉海屏的工具類:
}
根據四大廠商官網所提供的適配方案,其中需要在AndroidManifest中添加標簽(具體說明請瀏覽官網):
在對於Android P的適配中Google給出了統一的方案(基於Android API 28):
<meta-data android:name="android.vendor.full_screen" android:value="true"/>
在Build.VERSION.SDK_INT >= 28中提供了以下介面:
DisplayCutout類介面:主要用於獲取凹口位置和安全區域的位置等。
方法
介面 說明: 返回Rects的列表,每個Rects都是顯示屏上非功能區域的邊界矩形。
返回安全區域距離屏幕左邊的距離,單位是px。
返回安全區域距離屏幕右邊的距離,單位是px。
返回安全區域距離屏幕頂部的距離,單位是px。
返回安全區域距離屏幕底部的距離,單位是px。
模式:
模式說明:只有當DisplayCutout完全包含在系統欄中時,才允許窗口延伸到DisplayCutout區域。 否則,窗口布局不與DisplayCutout區域重疊
該窗口決不允許與DisplayCutout區域重疊。
D. android 控制項之間的間距怎麼調整
控制項之間的間距有兩種設置:
android:layout_margin="10dp" 外邊距
android:padding="10dp" 內邊距
有五個屬性控制控制項的間距,分別是
android:layout_marginLeft
android:layout_marginRight
android:layout_marginTop
android:layout_marginBottom
android:layout_margin
可以控制控制項之間的距離,分別是左間距,右間距,上間距,下間距,和四邊統一間距
android:layout_marginTop="25dip" //頂部距離 就這樣寫代碼
福建蜂鳥雲商為你解答