android dp sp px_第一百零四回:Android中View的坐标二

各位看官们,大家好,上一回中咱们说的是Android中View坐标的例子,这一回中咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,在上一回结束的时候,有看官对程序的运行结果提出了疑问,这一回中我们将解决这个疑问。其实,数值不同的原因在于数值的单位不同,比如一美元不等于一元人民币。同样是一,但是单位不同,它们代表的价值也不同。

现在回到我们上一回的程序中,大家再看看布局文件中Button的各种位置数值单位都是dp,而且程序代码中使用getTop()等函数返回的数值单位都是px。以Button到它所在布局的顶部为例,我们在布局将其设置为180dp:

android:layout_marginTop="180dp"

而程序代码getTop()运行返回的值为540。它们相差三倍,大家再看看其它的程序运行结果,是不是也是布局文件中各种数值的三倍呢。是的,为什么是三倍呢?有看官提问了,接下来我们解答该问题。

看官们,我们使用的手机屏幕大小不同,屏幕的分辨率也不相同,这个无法统一,为此Android提出了屏幕密度的概念,也是就DPI(Dots Per Inch)。它表示屏幕上每英寸的像素点。同时还规定几种固定的DPI,请参考下图:

19e8876f0c9a716da0d21f5b7fc2f4b2.png

该图是从官方文档中截取的:图中的mdpi是基线密度,此时1dp=1px,其它密度以基线为参考进行换算,换算公式:px=dp*(dpi/160),而我在程序中使用的是xxhdpi密度的屏幕,dpi为480,我们把它用于换算公式中可以得到px=3dp,这便是三倍的来源。大家可以试试,不同dpi的屏幕得到的程序运行结果是不同的,不过程序的运行结果都是符合换算公式的。

这时有看官说,直接使用px不是更好吗,省得进行换算呀。其实dp才是我们要推荐的,因为它可以让相同尺寸的东西在不同分辨率的屏幕中达到相同的显示效果。还有一个与dp类似的尺寸单位是sp,它用来设置字体的大小,用来确保相同大小的字体在不同分辨率的屏幕中有相同的显示效果。

各位看官,关于Androd中View坐标的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给ListView的item加入边框,需要在自定义Adapter的getView()方法设置item的背景。 1. 首先,在XML布局文件设置item的背景,例如我们在list_item.xml的根布局LinearLayout添加一个背景: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" android:padding="16dp" android:background="@drawable/list_item_bg"> ``` 其,@drawable/list_item_bg是一个定义了边框的自定义Drawable文件,我们需要在res/drawable目录下创建这个文件。 2. 在res/drawable目录下创建一个名为list_item_bg.xml的文件,定义边框的样式: ```xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="1dp" android:color="#CCCCCC" /> <corners android:radius="4dp" /> </shape> ``` 其,我们设置边框宽度为1dp,颜色为#CCCCCC,圆角半径为4dp。 3. 在自定义Adapter的getView()方法,不需要再设置背景,因为我们已经在XML布局文件设置了。只需要返convertView即可: ```java @Override public View getView(int position, View convertView, ViewGroup parent) { // 创建或复用一个View if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false); } // 获取控件并设置数据 TextView textView = convertView.findViewById(R.id.text_view); textView.setText(mData.get(position)); return convertView; } ``` 这样,ListView的每个item就都有了边框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值