Android开发笔记05:样式、主题、屏幕适配与点9图

目录

1 概述

1.1 样式与主题的异同

1.2 资源文件

2 主题与样式的定义与位置关系

2.1 主题定义位置

2.2 自定义主题及效果

2.3 自定义样式及其效果

2.4 Android中getResources().getDrawable() 过时的解决方法

3 屏幕适配

3.1 屏幕尺寸、分辨率和像素密度的概念

3.2 多屏幕适配的备选方式

3.2.1 明确声明应用程序支持的所有屏幕尺寸

3.2.2 为不同的屏幕尺寸提供不同的布局

3.2.3 为不向的屏幕尺寸提供不同的位图

4 图片拉伸 -- 点9图


 


1 概述

1.1 样式与主题的异同

  • 不同点:
    • Theme是应用于Activity或者是整个Application的,作用于单个Activity或者所有Activity,不能作用于某个控件的
    • Style是应用于某个(些)控件,Layout的,作用于控件级别的。
  • 相同点
    • 都位于values文件夹下的style.xml中,定义的方法一样,都是控制 UI 的一堆属性。
    • 两者总结一句就是∶相对而言Theme是作用于全局的,而Style是作用于局部的。定义方式一样,使用的地方不一样。

·注意:当一个Activity中的控件应用了Theme中的样式又应用了Style中的样式,那么Style中的样式优先于Theme

1.2 资源文件

Android系统对于字符、图片、布局和语言支持等资源的管理,使用了一种将资源外部化的模式,以文件形式,在项目的res/自录下进行统一管理。对于res/目录下的资源,应用程序可以通过引用资源ID号来调用。具体的资源ID号能够从R.java中查到。一个资源的ID号一般的组成如下:资源类型:每种资源都会被分组到一种特定的资源类型,例如string,drawable,和layout等,还有更多的资源类型,如raw,color等。资源名:同时也是文件名,不包括拓展名。

Android应用程序引用某个资源时,有两种方法。

  • (1)在Java应用程序代码中直接调用,通过调用Resources类中的方法来获取,某一特定的资源,通过getResources()方法得到Resources类的一个实例。
  • (2)在xML中调用,通过特殊的XML语法引用R.class文件中的相关资源ID。

2 主题与样式的定义与位置关系

2.1 主题定义位置

在Android视图下,找到app/res/values目录中,其中colors.xml记录的是主题的颜色信息;

style.xml则是将color定义的颜色与主题绑定,这里边也可以定义样式

引用主题是在manifest文件夹下,通过theme属性来定义

2.2 自定义主题及效果

在color.xml文件中定义主题颜色,

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#6200EE</color>
    <color name="colorPrimaryDark">#3700B3</color>
    <color name="colorAccent">#03DAC5</color>

    <!-- 定义灰色背景 -->
    <color name="colorPrimary_gray">#3B3B3B</color>
    <color name="colorPrimaryDark_gray">#909090</color>

</resources>

在style.xml中绑定主题颜色

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>


    <style name="AppTheme_gray" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary_gray</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark_gray</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

在manifest.xml中绑定主题

效果截图

2.3 自定义样式及其效果

在style.xml中添加代码:

    <style name="myFont" parent="TextAppearance.AppCompat.Medium">
        <item name="android:textSize"> 30sp </item>
        <item name="android:layout_width"> wrap_content </item>
        <item name="android:layout_height"> wrap_content </item>
        <item name="android:textColor"> #BBFF00 </item>
    </style>

在要采用该样式的布局空间中,使用该样式

效果

2.4 Android中getResources().getDrawable() 过时的解决方法

来源:https://www.jianshu.com/p/21558fe8b750

  • 当你这个Drawable不受主题影响时
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
  • 当你这个Drawable受当前Activity主题的影响时
ContextCompat.getDrawable(getActivity(), R.drawable.name);
  • 当你这个Drawable想使用另外一个主题样式时
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);

3 屏幕适配

3.1 屏幕尺寸、分辨率和像素密度的概念

屏幕尺寸:屏幕对角线的长度,以寸为单位

分辨率:高和宽的点数,如1920*1080是指在高度方向上有1920个像素点,在宽度上有1080个像素点

像素密度:对角线上的像素点数 除以 对角线的长度 

        

经典高宽比:

3.2 多屏幕适配的备选方式

3.2.1 明确声明应用程序支持的所有屏幕尺寸

在AndroidManifest.xml中通过属性<supports-screens>设置APP支持的屏幕尺寸,对于大于该尺寸的手机启用兼容模式自动缩放;如果在兼容模式下,应用程序不能很好的工作,就可以使用该属性来控制应用程序是否应该发布给屏幕较小的设备,或者使用系统的屏幕兼容模式,让UI放大以适应较大屏幕的要求。

    <supports-screens android:smallScreens="false"
        android:largestWidthLimitDp="1080"
        android:compatibleWidthLimitDp="320">

3.2.2 为不同的屏幕尺寸提供不同的布局

屏幕大小的相对定义,红底数字为宽度,红色数字为高度

同一个Activity不同的布局

3.2.3 为不向的屏幕尺寸提供不同的位图

同一个logo具有多个分辨率,在不同设备上显示与之相适应的分辨率位图

分别在drawable和mipmap目录下,存放不同分辨率的位图,安卓系统根据需要自选

在mipmap重存放着方形和圆形的图标

    

配置不同分辨率的方法:

  • 将相应分辨率的位图按照圆形和方形拷贝到相应的路径下
  • 在manifest.xml中,通过icon、roundIcon属性绑定图标,label属性可以修改应用的名称
  • 修改ic_launcher.xml和ic_launcher_round.xml文件,即可修改图标

4 图片拉伸 -- 点9图

在图片上点击右键,创建.9图

使用时报错冲突,删除不要的哪一个即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值