icon-cookie
The website uses cookies to optimize your user experience. Using this website grants us the permission to collect certain information essential to the provision of our services to you, but you may change the cookie settings within your browser any time you wish. Learn more
I agree
Yanan Wang
24 articles
My Web Markups - Yanan Wang
  • 如果您将可绘制对象放到布局 XML 中的任何属性上,Resource Manager 会将该属性值替换为对该可绘制对象的引用。
  • 您也可以直接拖放到布局的 XML 上,
  • 您可以将可绘制对象从 Resource Manager 直接拖放到布局中。将资源放到布局上时,Resource Manager 会为该可绘制对象创建相应的 ImageView,
  • 以下示例说明了导入后输入路径如何转换为资源路径:
  • 下表列出了受支持的不同密度在 Android 和 iOS 系统中的表示方法:
  • 定符。Resource Manager 可以解析 Android 的密度限定符和 iOS 的缩放比例。
  • 当您导入文件或文件夹时,如果其路径包含密度限定符,Resource Manager 会自动在导入过程中应用密度限定符
  • 如果您要提供同一资源的多个版本,请务必添加设备配置限定符,以描述资源支持的特定配置。
  • 将图片直接拖放到 Android Studio 的 Resource Manager 窗口中
  • 主要内容区域会显示资源的预览效果。右键点击某项资源可打开上下文菜单,您可以通过该菜单重命名资源、在应用中搜索使用了该资源的位置,以及执行其他操作。
  • 使用过滤器按钮,可以查看来自本地依赖模块、外部库和 Android 框架的资源。您还可以使用该过滤器来显示主题背景属性。
  • Resource Manager 按类型对资源进行分组。使用这些标签页可在各种资源类型之间切换。点击溢出图标 可显示其他资源类型。
  • 使用搜索栏在项目的所有模块中搜索资源。
  • 点击 Add 图标 可向项目添加新的资源。您可以添加图像资源、矢量资源、字体、资源文件和值,也可以将资源导入到项目中。
14 annotations
  • List (也被称为 Array) Map Set
  • List (也被称为 Array)
  • 如果需要在编译时就固定变量的值,可以使用 const 类型变量。
  • final name = 'Bob'; // Without a type annotation final String nickname = 'Bobby';
  • 使用过程中从来不会被修改的变量, 可以使用 final 或 const, 而不是 var 或者其他类型
  • 在生产环境代码中 assert() 函数会被忽略,不会被调用。 在开发过程中, assert(condition) 会在非 true 的条件下抛出异常
  • 未初始化的变量默认值是 null。即使变量是数字 类型默认值也是 null,因为在 Dart 中一切都是对象,数字类型 也不例外。
  • 本页局部变量遵守 风格建议指南 使用 var。 没有使用指定类型的方式。
  • 为了简化将 JavaScript 代码移植到 Dart 的工作
  • Dart 语法中包含 表达式( expressions )(有运行时值)和 语句( statements )(没有运行时值)
  • 与 Java 不同,Dart 没有关键字 “public” , “protected” 和 “private” 。 如果标识符以下划线(_)开头,则它相对于库是私有的。
  • Dart 支持泛型,如 List <int> (整数列表)或 List <dynamic> (任何类型的对象列表)
  • 不需要任何类型, 需要使用特殊类型 dynamic 。
  • 尽管 Dart 是强类型的,但是 Dart 可以推断类型,所以类型注释是可选的
  • 任何保存在变量中的都是一个 对象 , 并且所有的对象都是对应一个 类 的实例。 无论是数字,函数和 null 都是对象。
  • $variableName (或 ${expression}) 字符串插值: 包括字符串文字内部的变量或表达式的字符串。
  • , List , 和 bool 。
  • var nu
  • 使用 DartPad 可以体验 Dart 的大部
  • art 核心库, 参考 Dart 库概览. 想了解更多有关语言功能的详细信息, 参考 Dart 编程语言规范.
20 annotations
  • 在 Resources 对话框中,通过浏览列表或在顶部的搜索栏中输入字体来选择字体。如果您选择 Downloadable 下的某种字体,则可以点击 Create downloadable font 以在运行时加载该字体作为可下载字体,或点击 Add font to project 以将 TTF 字体文件打包到 APK 中。请注意,Android 系统提供了 Android 下列出的字体,因此这些字体不需要下载,也不需要打包到 APK 中。
  • 在 Attributes 窗口中,展开 textAppearance,然后展开 fontFamily 方框。 滚动到列表底部,然后点击 More Fonts,以打开 Resources 对话框
  • 使用 Android 8.0(API 级别 26)或 Android 支持库 26.0.0 或更高版本时,您可以按照以下步骤从数百种字体中进行选择:
  • 在 RecyclerView 中,您可以在一组包含示例图片和文本的模板之间进行选择。使用这些模板时,Android Studio 会将 recycler_view_item.xml 文件添加到 res/layout 目录,该文件中包含示例数据的布局。Android Studio 还会将元数据添加到 RecyclerView,以正确显示示例数据
  • 在 ImageView 中,您可以在不同的示例图片之间进行选择。当您选择示例图片后,Android Studio 会填充 ImageView 的 tools:src 属性(如果使用支持库,则会填充 tools:srcCompat)
  • 您可以右键点击其中某种视图类型,然后选择 Set Sample Data 以显示 Design-time View Attributes 窗口,
  • 每个属性值右侧的图标指示属性值是否为资源引用。当属性值是资源引用时,指示器是非中空的 ,当属性值是硬编码时,指示器是空的 。这些指示器可帮助您一目了然地识别硬编码值。点击指示器(无论其处于哪种状态)会打开 Resources 对话框窗口,您可以在其中选择相应属性的资源引用
  • 如需查看视图或视图组的 Material Guidelines 文档,请右键点击 Palette 中的界面元素,然后从上下文菜单中选择 Material Guidelines。对于相应内容,如果不存在任何特定条目,则此命令会打开 Material Guidelines 文档的首页。
  • 从 Palette 中打开文档 如需打开视图或视图组的 Android 开发者参考文档,请在 Palette 中选择界面元素,然后按 Shift + F1
  • 如需将现有布局转换为 ConstraintLayout,请执行以下操作: 在 Android Studio 中打开现有布局,然后点击编辑器窗口右上角的 Design 按钮。 在 Component Tree 中,右键点击该布局,然后点击 Convert your-layout-type to ConstraintLayout。
  • 将布局转换为 ConstraintLayou
  • 转换视图或布局 您可以将一种视图转换为另一种视图,也可以将一种布局转换为另一种布局。 点击编辑器窗口右上角的 Design 按钮。 在 Component Tree 中,右键点击相应视图或布局,然后点击 Convert view...。 在显示的对话框中,选择新类型的视图或布局,然后点击 Apply
  • 打开原始布局文件,点击窗口右上角的 Design () 图标。 点击工具栏中的 Orientation for Preview 图标 。 在下拉列表中,选择 Create Other...。
  • 创建自己的布局变体
  • 点击工具栏中的 Orientation for Preview 图标 ()。 在下拉列表中,选择建议的变体,例如 Create Landscape Variant。
  • 使用建议的布局变体
  • ,还可以按 D 循环浏览设备列表。
  • 更改预览外观
  • (例如夜间模式)。
  • 您还可以按 B 循环浏览这些视图类型。
  • Blueprint 可仅查看每个视图的轮廓
  • 提示:您只需按 Alt + Shift + Right/Left arrow(在 Mac 上按 Control + Shift + Right/Left arrow),即可在设计编辑器和文本编辑器之间切换
  • 使用 ConstraintLayout 构建布局时,布局编辑器的功能尤其强大
  • 资源合并
  • 构建变体 > build 类型 > 产品变种 > 主源代码集 > 库依赖项
  • main {                res.srcDirs = ['res1', 'res2']            }
  • 您还可以为一个源代码集指定多个资源目录,构建工具会将它们合并在一起。例如:
  • }            debug {                res.srcDirs = ['resources/debug']            }
  • 不过,您可以使用 sourceSets {} 块中的 res.srcDirs 属性将这些路径更改为任何其他位置(
  • 提示:右键点击 res 文件夹中的现有资源目录,然后依次选择 New > type-name resource file。这会打开简化版本的 New Resource File 对话框,该对话框特定于您所需的资源类型。
  • 停用对 Java 8 语言功能的支持 如果您遇到与 Java 8 语言功能支持相关的问题,您可以通过将以下代码添加到 gradle.properties 文件来停用该支持: android.enableDesugar=false
  • Java 8 语言功能 兼容的 minSdkVersion Lambda 表达式 全部。请注意,Android 不支持 lambda 表达式的序列化。 方法引用 全部。 类型注解 全部。不过,类型注解信息在编译时可用,但在运行时不可用。此外,在 API 级别 24 及更低级别中,平台支持 TYPE,而不支持 ElementType.TYPE_USE 或 ElementType.TYPE_PARAMETER。 默认和静态接口方法 全部。 重复注解 全部。
  • ,Android 不支持 lambda 表达式的序列化
  • compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8      }
  • 您也可以直接在相应的 build.gradle 文件中进行配置:
  • 在 Project Structure 对话框(依次点击 File > Project Structure)中将 Source Compatibility 和 Target Compatibility 更新为 1.8,
  • 要开始使用受支持的 Java 8 语言功能,请将 Android 插件更新为 3.0.0(或更高版本)。然
  • AnnotationType 文件模板
  • 类文件模板
  • 接口文件模板
  • 枚举文件模板
  • VISIBILITY - 相应类是否具有公开访问权限。其值可以为 PUBLIC 或 PACKAGE_PRIVATE
  • File > New > Java Class
  • 。您在 Create New Class 对话框中提供的值将成为模板中的变量值
  • 单例文件模板
  • 对于 Windows 或 Linux,依次选择 File > Settings > Editor > File and Code Templates > Files。
  • 要查看模板、查找自定义内容和修改模板,请按以下步骤操作:
  • 然后,滚动浏览右侧窗格以查找在所选示例中使用的突出显示的代码行。
  • 从上下文菜单中,选择 Find Sample Code
  • 在代码中突出显示某个变量、类型或方法。
  • 当您找到所需的示例时,突出显示该示例并查看预览。
  • 依次选择 File > New > Import Sample。
  • 此模板可以创建一个带多个部分、滑动导航和应用栏的应用。这些部分以 Fragment 形式定义,您可以在两个 Fragment 之间左右滑动进行导航
  • 此模板可以为应用创建一个显示用户偏好设置或设置的 Activity。它扩展了 PreferenceActivity 类,用作 Activity 模板的频率要比用作应用模块模板的频率高。
  • 两个布局文件:一个用于 Activity,另一个用于将文本内容分离到 NestedScrollView 中
  • 折叠式工具栏,用于替代常规的 AppBar
  • 此模板可以创建一个带折叠式工具栏和长文本内容滚动视图的应用。在页面中向下滚动时,工具栏(可以作为标题)将自动缩短,并且浮动操作按钮将
  • 带 DrawerLayout、对应事件处理程序和示例菜单选项的抽屉式导航栏实现
  • 此模板可以创建一个带抽屉式导航栏菜单的基本 Activity。导航栏可以从应用的左侧或右侧展开,作为对常规应用栏的补充。
  • 列表显示画面和单独项目详情显示画面的应用
  • 用于项目详情屏幕的折叠式工具栏
  • 网络操作的进度指示器
  • AsyncTask 实现,用于独立于主界面线程处理网络操
  • 能够在主要全屏视图与带有标准界面控件的视图之间切换的应用。全屏视图是默认视图,用户可以通过触摸设备屏幕激活标准视图。
  • 当您的应用有 3-5 个顶级目标时,可以使用此模板。如需了解详情,请参阅底部导航组件设计准则
  • 底部导航 Activity
  • 某些模板为常用环境(例如抽屉式导航栏或登录屏幕)提供了起始代码
67 annotations
  • 应用添加
  • 在 Dart 语言中使用下划线前缀标识符,会强制其变成私有
  • ListView 的 builder 工厂构造函数允许您按需建立一个懒加载的列表视图。
  • 在这一步,你将添加一个 stateful widget(有状态的控件)—— RandomWords,它会创建自己的状态类 —— RandomWordsState,然后你需要将 RandomWords 内嵌到已有的无状态的 MyApp widget。
  • 注意一下 State<RandomWords> 的声明。这表明我们在使用专门用于 RandomWords 的 State 泛型类。应用的大部分逻辑和状态都在这里 —— 它会维护 RandomWords 控件的状态。
  • 泛型类。
  • 如果你没有把 Center 前面的修饰词从 const 改成 new 的话,系统就会报错,因为这个时候它的子对象已经不是常量,那就不能再用 const 了,
  • 「大驼峰式命名法」也称为 upper camel case 或 Pascal case,
  • assets(资源,如图片、package等)
  • 你可以 在 pub.dartlang.org 上找到 english_words 软件包以及其他许多开源软件包。
  • body 的 widget 树中包含了一个 Center widget,Center widget 又包含一个 Text 子 widget,Center widget 可以将其子 widget 树对其到屏幕中心。
  • Scaffold
  • Scaffold 是 Material library 中提供的一个 widget,它提供了默认的导航栏、标题和包含主屏幕 widget 树的 body 属性。widget 树可以很复杂。
  • 'package:flutter/material.dart';
  • 在 Flutter 中,大多数东西都是 widget
  • 第一次真机运行的时候可能会需要更多的等待时间,但是这是值得的,因为接下来你就可以使用热重载(hot reload)功能,真正的为下次运行时更新的预览节省更多时间。
  • 然后替换为下面的代码
  • 热重载
  • Flutter 可以在 Android 和 iOS 系统里自动适应不同的 UI 体系
19 annotations