SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
- This constructor was deprecated in API level 11. This option is discouraged, as it results in Cursor queries being performed on the application’s UI thread and thus can cause poor responsiveness or even Application Not Responding errors. As an alternative, use LoaderManager with a CursorLoader.
SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags)
- Standard constructor.
项目 res/
目录内支持的资源目录:
| 目录 | 资源类型 |
| — | — |
| animator/ | 用于定义属性动画的 XML 文件。 |
| anim/ | 定义渐变动画的 XML 文件。(属性动画也可以保存在此目录中,但是为了区分这两种类型,属性动画首选 animator/ 目录。) |
| mipmap/ | 适用于不同启动器图标密度的 Drawable 文件 |
| raw/ | 要以原始形式保存的任意文件。要使用原始 InputStream
打开这些资源,请使用资源 ID
(即 R.raw.filename
)调用 Resources.openRawResource()
。但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/
目录下(而不是 res/raw/
)。因 assets/
中的文件没有资源 ID,只能使用 AssetManager
读取这些文件D。 |
| color/ | 用于定义 颜色状态列表 的 XML文件。 |
| xml/ | 可以在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。 |
**注意:**切勿将资源文件直接保存在 res/
目录内,这会导致出现编译错误。
创建别名资源
如果您想将某一资源用于多种设备配置(但是不想作为默认资源提供),则无需将同一资源放入多个备用资源目录中。 相反,您可以(在某些情况下)创建备用资源,充当保存在默认资源目录下的资源的别名。
注:并非所有资源都会提供相应机制让您创建指向其他资源的别名。 特别是,
xml/
目录中的动画资源、菜单资源、原始资源以及其他未指定资源均 不提供 此功能。
例如,假设您有一个应用图标 icon.png,并且需要不同区域设置的独特版本。 但是,加拿大英语和加拿大法语这两种区域设置需要使用同一版本。 您可能会认为需要将相同的图像复制到加拿大英语和加拿大法语对应的资源目录中,但事实并非如此。 相反,您可以将用于二者的图像另存为 icon_ca.png
(除 icon.png
以外的任何名称),并将其放入默认 res/drawable/
目录中。然后,在 res/drawable-en-rCA/
和 res/drawable-fr-rCA/
中创建 icon.xml
文件,使用 <bitmap>
元素引用 icon_ca.png
资源。这样,您只需存储 PNG 文件的一个版本和两个指向该版本的小型 XML 文件。(XML 文件示例如下:)
1. Drawable
要创建指向现有 Drawable 的别名,请使用 元素。例如:
<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android=“http://schemas.android.com/apk/res/android”
android:src=“@drawable/icon_ca” />
如果将此文件另存为 icon.xml
(例如,在备用资源目录中,另存为 res/drawable-en-rCA/
),则会编译到可作为 R.drawable.icon
引用的资源中,但实际上它是 R.drawable.icon_ca
资源(保存在 res/drawable/
中)的别名。
2. 布局
要创建指向现有 布局的别名,请使用包装在 <merge>
中的 <include>
元素。例如:
如果将此文件另存为 main.xml
,则会编译到可作为 R.layout.main
引用的资源中,但实际上它是 R.layout.main_ltr
资源的别名。
3. 字符串和其他简单值
要创建指向现有字符串的别名,只需将所需字符串的资源 ID 用作新字符串的值即可。例如:
<?xml version="1.0" encoding="utf-8"?>Hello
@string/hello
R.string.hi
资源现在是 R.string.hello
的别名。
其他简单值的原理相同。 例如,颜色:
<?xml version="1.0" encoding="utf-8"?>#f00
@color/red
访问资源
编译应用时,aapt
会生成 R
类,其中包含您的 res/
目录中所有资源的资源 ID。 每个资源类型都有对应的 R
子类(例如,R.drawable
对应于所有 Drawable 资源),而该类型的每个资源都有对应的静态整型数(例如,R.drawable.icon
)。这个整型数就是可用来检索资源的资源 ID。
注意: 从 res/
读取资源的唯一方法是使用资源 ID
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID
getWindow().setTitle(getResources().getText(R.string.main_title));
// Set a slide in animation by getting an Animation from the Resources object
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in));
引用样式属性
您可以通过样式属性资源在当前应用的风格主题中引用某个属性的值。 通过引用样式属性,您可以不采用为 UI 元素提供硬编码值这种方式,而是通过为 UI 元素设置样式,使其匹配当前风格主题提供的标准变型来定制这些元素的外观。引用样式属性的实质作用是,“在当前风格主题中使用此属性定义的样式”。
要引用样式属性,名称语法几乎与普通资源格式完全相同,只不过将 at 符号 (@
) 改为问号 (?
),资源类型部分为可选项。 例如:
?[<package_name>:][<resource_type>/]<resource_name>
例如,您可以通过以下代码引用一个属性,将文本颜色设置为与系统风格主题的“主要”文本颜色匹配:
<EditText id=“text”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:textColor=“?android:textColorSecondary”
android:text=“@string/hello_world” />
在以上代码中,android:textColor
属性表示当前风格主题中某个样式属性的名称。Android 现在会使用应用于 android:textColorSecondary
样式属性的值作为 android:textColor
在这个小工具中的值。由于系统资源工具知道此环境中肯定存在某个属性资源,因此您无需显式声明类型(类型应为 ?android:attr/textColorSecondary
)— 您可以将 attr
类型排除在外。
使用Lint排除潜在的问题
Lint是Google专门为Android推出的代码检查工具,可以在编译期发现APP中潜在的问题。
菜单栏中Analyze -> Inspect Code 开始检查代码,项目越大耗时越长。
检查完成会自动打开Inspection窗口并显示结果,如下图所示:
我们重点来看一下Android Lint:
build.gradle文件
build.gradle文件结构
AS中APP所有的配置尽在一个build.gradle文件中,打包的时候也是解析build.gralde文件来打包的。结构如下所示:
apply plugin
用来指定用的是哪个插件
-
com.android.application
:Android APP插件(打包得到的是.apk文件) -
com.android.library
:Android库插件(打包得到的是.aar文件)
android
用来指定Android打包插件的相关属性
-
compileSdkVersion(apiLevel)
:设置编译时用的Android版本 -
buildToolsVersion(buildToolsVersionName)
:设置编译时使用的构建工具的版本 -
defaultConfig
:设置一些默认属性,其可用属性是buildTypes
和ProductFlavors
之和 -
sourceSets
:配置相关源文件的位置,当你的项目的目录结构跟默认的有区别但又不想改的时候sourceSets就派上用场了 -
aidl
设置aidi的目录 -
assets
设置assets资源目录 -
compileConfigurationName
The name of the compile configuration for this source set. -
java Java
源代码目录 -
jni
JNI代码目录 -
jniLibs
已编译好的JNI库目录 -
manifest
指定清单文件 -
name
The name of this source set. -
packageConfigurationName
The name of the runtime configuration for this source set. -
providedConfigurationName
The name of the compiled-only configuration for this source set. -
renderscript
Renderscript源代码目录 -
res
资源目录 -
setRoot(path)
根目录 -
signingConfigs
:配置签名信息 -
keyAlias
签名的别名 -
keyPassword
密码 -
storeFile
签名文件的路径 -
storePassword
签名密码 -
storeType
类型 -
buildTypes:配置构建类型,可打出不同类型的包。默认有
debug
和release
两种,你还可以在增加N种。 -
applicationIdSuffix
用于修改applicationId
,在默认applicationId
的基础上加后缀。在buildType
中修改applicationId
时只能加后缀,不能完全修改。 -
debuggable
设置是否生成debug版的APK -
jniDebuggable
设置生成的APK是否支持调试本地代码 -
minifyEnabled
设置是否执行混淆 -
multiDexEnabled
Whether Multi-Dex is enabled for this variant. -
renderscriptDebuggable
设置生成的APK是否支持调试RenderScript代码 -
renderscriptOptimLevel
设置RenderScript优化级别 -
signingConfig
设置签名信息 -
versionNameSuffix
修改版本名称,在默认版本名称的基础上加后缀。在buildType中修改版本名称时只能加后缀,不能完全修改 -
zipAlignEnabled
设置是否对APK包执行ZIP对齐优化 -
proguardFile(proguardFile)
添加一个混淆文件 -
proguardFiles(proguardFileArray)
添加多个混淆文件 -
setProguardFiles(proguardFileIterable)
设置多个混淆文件 -
productFlavors
:配置不同风格的APP,在buildTypes
的基础上还可以让每一个类型的APP拥有不同的风格,所以最终打出的APK的数量就是buildTypes
乘以productFlavors
-
applicationId
设置应用ID -
multiDexEnabled
Whether Multi-Dex is enabled for this variant.signingConfig Signing config used by this product flavor. -
testApplicationId
设置测试时的应用ID -
testFunctionalTest
See instrumentation. -
testHandleProfiling
See instrumentation. -
testInstrumentationRunner
Test instrumentation runner class name. -
versionCode
设置版本号 -
versionName
设置版本名称 -
minSdkVersion(int minSdkVersion)
设置兼容的最小SDK版本 -
minSdkVersion(String minSdkVersion)
设置兼容的最小版本 -
proguardFile(proguardFile)
添加一个混淆文件 -
proguardFiles(proguardFileArray)
添加多个混淆文件 -
setProguardFiles(proguardFileIterable)
设置多个混淆文件 -
targetSdkVersion(int targetSdkVersion)
设置目标SDK版本 -
targetSdkVersion(String targetSdkVersion)
设置目标SDK版本 -
testOptions
:设置测试相关属性 -
reportDir
设置测试报告的目录 -
resultsDir
设置测试结果的目录 -
aaptOptions
:设置AAPT的属性
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
上述高清技术脑图以及配套的架构技术PDF可以点击我的GitHub免费获取
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!
大家展示一部分。
相信它会给大家带来很多收获:
[外链图片转存中…(img-gguSK84G-1710768325743)]
上述高清技术脑图以及配套的架构技术PDF可以点击我的GitHub免费获取
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!