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" //顶部距离 就这样写代码
福建蜂鸟云商为你解答