目录
2.4 Android中getResources().getDrawable() 过时的解决方法
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图
使用时报错冲突,删除不要的哪一个即可