Android开发基础之屏幕显示

Android开发基础之屏幕显示

老子 ——– 天下难事必作于易,天下大事必作于细.

  • 像素
  • 颜色
  • 屏幕分辨率

像素

Android中支持的像素单位有: px(像素), in(英寸), mm(毫米), pt(英镑,1/72英寸), dp(与设备无关的现实单位), dip(就是dp), sp(用于设置字体大小).
其中常用的有: px, dpsp 三种.

    px: 手机屏幕上可显示的最小单位,与物理设备的显示屏有关,像素密度越高,以 px 计量的分辨率越大,屏幕越清晰;
    dp: 与物理设备无关,只与屏幕尺寸有关,一般来说,同尺寸的屏幕,以 dp 计量的分辨率是一样的,无论这个手机屏幕是哪个手机厂家生产的, dp 大小都一样;
    sp: 原理与 dp 差不多,专门用于设置字体大小,但是 dp 与系统设置的字体大小没有关系, sp 会随着系统设置的字体大小变大或者变小.所以,系统设置普通字体大小时,同数值的 dp 和 sp 的文字看起来一样大

dp 和 px 的联系取决于具体设备上的像素密度, 像素密度就是 DisplayMetrics 里的 density 参数. 当 density = 1.0 时, 表示一个 dp 值对应一个 px值; 当 density = 1.5 时, 表示 两个 dp 值对应 三个 px值, 具体转换函数如下:

/**
 * Created by Mr.Fu on 2018/2/27 0027.
 * dp(dip) 与 px 之间相互转换
 */

public class Utils {

    /**
     * 根据手机的分辨率从 dp 的单位转成 px(像素)
     * @param context
     * @param dpValue
     * @return
     */
    public static int dip2px (Context context, float dpValue) {

        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从 px(像素)转成 dp 的单位
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip (Context context, float pxValue) {

        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}

使用:
1. 在 XML 布局文件中, 为了让不同的设备屏幕拥有统一的显示效果, 除了 sp 用于设置字体大小以外, 其他使用大小的地方都是用 dp.
2. 在代码中情况又有所不同, Android 中用于设置大小的函数都是以 px 为单位的, 所以要在代码中设置布局的大小或间距, 都需要先把 dp 值转换成 px 值 (设置字体大小时不用进行转换,直接使用 sp 的数值),
示例代码如下:

        TextView tv_padding = findViewById(R.id.tv_padding);
        TextView tv_hello = findViewById(R.id.tv_hello);

        int padding = Utils.dip2px(this, 8.0f);
        tv_padding.setPadding(padding, padding, padding, padding);     // 设置内间距

        tv_padding.setTextSize(20);     // 设置字体大小
        float size = tv_padding.getTextSize();
        Log.i(TAG, "padding 字体大小: " + size);    // size = 60.0
        float size2 = tv_hello.getTextSize();
        Log.i(TAG, "hello 字体大小: " + size2);     // size2 = 60.0 在 xml布局文件中设置 textSize = 20

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.fu.mr.screendisplay.MainActivity">

    <TextView
        android:id="@+id/tv_hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:background="@color/colorPrimary"
        android:textSize="20sp"
        android:text="Hello World!" />

    <TextView
        android:id="@+id/tv_padding"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:text="Hello World!" />
</LinearLayout>

运行效果:
这里写图片描述

颜色

在 Android 中,颜色值由透明度 alphaRGB (红, 绿, 蓝) 三原色组成, 有八位十六进制数和六位十六进制数两种编码
1. 八位编码, 如 FFEEDDCC, 其中 FF 表示透明度, EE 表示红色浓度, DD 表示绿色浓度, CC 表示蓝色浓度 (透明度为 FF, 表示完全不透明, 为 00 表示完全透明, RGB 三原色的数值越大颜色越浓也就越亮, 数值越小颜色越暗, 亮到极致就是白, 暗到极致就是黑);
2. 六位编码有两种情况, 在 XML 布局文件中默认不透明 (透明度为 FF), 在代码中默认透明(透明度为 00),所以在代码中使用六位编码看不到任何背景(颜色)

在 Android 中,使用颜色有下列 3 种方式:

  1. 使用系统已定义的颜色常量(12种, android.graphics.Color 类中)

    Color.BLACK 黑色
    Color.BLUE 蓝色
    Color.CYAN 青绿色
    Color.DKGRAY 灰黑色
    Color.GRAY 灰色
    Color.GREEN 绿色
    Color.LTGRAY 浅灰色
    Color.MAGENTA 红紫色
    Color.RED 红色
    Color.TRANSPARENT 透明
    Color.WHITE 白色
    Color.YELLOW 黄色
    
  2. 使用十六进制的颜色编码

    在布局文件中设置颜色需要在色值前面加 **"#"**, 如 android:textColor="#FF34fd45"
    在代码中设置颜色, 可以直接使用八位十六进制数值, 如 tv_padding.setTextColor(0xff00ff00); 
    因为六位编码在代码中设置默认为透明,所以一般不使用六位编码
    
  3. 使用 colors.xml 中定义的颜色

    res/values 目录下有个 colors.xml 文件,是颜色常量的定义文件, 
    在布局文件中使用 XML 颜色常量, 可引用 "@color/ 颜色常量名", 如: 
    android:background="@color/colorAccent" , 
    在代码中使用 XML 颜色常量, 可通过这样代码获取:
    tv_hello.setBackgroundColor(getResources().getColor(R.color.colorAccent));
    

(未完, 待续 … …)

屏幕分辨率

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值