Android初识--你所应知道的Android Studio操作

前言

  • 本文主要介绍一些易忽略或者易忘的AndroidStudio操作,以及一些Android入门前应该对开发工具的必要了解
  • 实际上Android Studio为开发者提供了许多很方便的工具,只要我们能有效的利用,不论是对于初学者,还是说对于一个成熟开发者对产品的快速迭代,都是非常有好处的;正所谓工欲善其事,必先利其器,在入门之前对我们的开发工具有一个大致的了解,将会使我们少走很多弯路.
  • 另一方面是,Android Studio中也有很多优秀的示例(由Google官方提供的),这些也可以让我们一览Google官方所提倡的UI设计和界面交互等理念,而这些对于我们今后的学习入门和进阶都是具有指导意义的
  • 更详细的可参见 Android文档

AndroidStudio初探

导入项目

  • File > New > Project from Version Control可以导入github上的项目,但是首先应该先在AndroidStudio上登录

创建Android Library(AAR)

作用

  • 当多个APP中使用了相同的部分时,可以将相同部分封装为一个模块(包括ActivityServiceLayout等)
  • APP需要运行在多个APK版本中时,并且需要同样的组件时

创建

  • File > New > New Module,选择Android Library
  • 在该界面还可以创建Java Library(即平时的jar文件),但是二者的区别是,AAR还可以包含一些Android资源文件和Manifest文件
  • 有时可能需要手动在App Modulebuild.gradle中导入implementation project(":my-library-module")(但是通常都可以通过ASAlt+Enter自动导入)
  • 如何将一个APP Module转换为Library Module呢: 首先打开Module级别的build.gradle文件(注意和另一个Project级别的build.gradle文件相区分),然后删除其中的applicationId(这是只有一个app module才能拥有的东西);然后将首部的apply plugin: 'com.android.application'改成apply plugin: 'com.android.library';最后Sync Projcet

导入AAR

  • 导入已经编译过的ARR(一般在[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar目录下)或者JAR文件,首先File > New > New Module,选择Import .JAR/.AAR Package;如果是没有编译过的模块,直接File > New > Import Module即可
  • 之后在setting.gradle中添加:include ':app', ':my-library-module'(一般会自动添加)
  • 最后在APP Module中添加
dependencies {
    compile project(":my-library-module")
}

使用模板

Basic Activity

  • 从该模板代码中可以借鉴的是,将中间要显示的内容与外部的布局框架分离,其实文档中也有介绍Two layout files: one for the activity and one to separate out text content;大意就是说,该Activity包含了两个布局文件,将内容和布局分开
  • 还有就是应该将所有的常量写成资源文件,比如说组件的margin属性,可以定义在resource/dimen文件中
  • 另一个就是FloatingActionButton的响应事件,如果要用一个类似底部的Toast的话,可以借鉴其写法(这种是会在消息显示的时候FloatingActionButton会自动向上让出合适位置)
  • 借鉴在底部显示Toast的方法
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();

Bottom Navigation Activity(底部导航栏)

  • 底部导航栏设计文档
  • 注解的使用onNavigationItemSelected(@NonNull MenuItem item)
  • 底部导航切换的时候,文字会变大的动画效果
  • 使用vector制作icon

Fullscreen Activity(全屏)

  • 使用FrameLayout来设置组件的layout_gravity属性
  • 使用Handler实现,但是应该注意的是在每次隐藏和显示的时候应该取消前面任务队列中的显示和隐藏任务,这是为了防止用户连续点击时出现问题
mHideHandler.removeCallbacks(mHidePart2Runnable);
mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);

Login Activity(登录界面)

  • 这里可以学到的是,在LinearLayoutvertical布局中,对前一个组件设置的layout_marginBottom属性实际上是对其后的紧邻组件起作用;同理在horizontal布局中对左边的组件使用layout_marginRight属性实际上也是对紧邻其右边的组件起作用
  • 当输入框获得输入焦点的时候,hint的提示文字会自动上浮的动画,其实这个是TextInputLayout的动画效果,使用该布局的时候必须包含一个EditText或者其子类,而且只能是一个布局包含一个EditText;同时也推荐使用该布局加EditText来编写登录和输入密码组件,特别时输入密码的时候还可以通过设置setPasswordVisibilityToggleEnabled(boolean)来设置密码是否可以在明文之间切换
  • 使用TextUtils工具类对字符串进行操作,包括判null
  • 使用AutoCompleteTextView来设置自动提示(类似与输入历史记录)
  • 使用EditText.setError()方法来设置错误提示,这个其实是TextView的方法,只是EditText继承了TextView;该方法会在EditText的末尾显示一个带IconpopupWindow,还可以自己通过该方法设置Icon;(所以以后就不要用什么Toast这种low的东东咯)

Master/Detail Flow(主列表与详细信息)

  • 借鉴在代码中指定layoutManagerapp:layoutManager="LinearLayoutManager"
  • 将布局文件模块化和分离,同时在布局文件中指定RecyclerViewItem项和context
tools:context="com.example.yuanping.temp.templates.ItemListActivity"
tools:listitem="@layout/item_list_content"
  • 对于使用RecyclerView展示列表时,使用FrameLayout来封装
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<include layout="@layout/item_list" />
</FrameLayout>

Navigation Drawer Activity(侧滑菜单)

  • 菜单与主界面布局分离,也要注意界面布局的模块化,可以将一些复杂的布局拆分成为模块,然后封装为不同的layout资源文件,用include引用即可

Tabbed Activity(支持左右滑动)

  • 一个使用ViewPagerFragment创建的支持左右滑动界面;该模板也提供了ViewPagerFragment的基本使用

正确添加资源文件

使用AS提供的面板拖拽控件

  • 官方推荐使用ConstraintLayout来与之配合使用,这样可以减少直接用代码画XML
  • 拖拽的时候需要对每一个组件至少设置垂直和水平约束,对于没有约束的组件,在实际运行的时候会默认跑到左上角

使用AS实现多语言

  • 即将平时项目中的string都写为资源文件string.xml,然后利用AS自带的翻译工具进行翻译,也可以自备多语言的string.xml文件

使用Image Asset Studio制作ICON

  • 支持制作的ICONLauncher icons(在res/mipmap-density/中),Action bar and tab icons(res/drawable-density/中),Notification icons(res/drawable-density/中)等;该工具可以自动生成支持多种不同密度的图标,同时在运行时,系统会自动根据当前屏幕密度来适配不同的图标
  • 可以自己导入图片制作图标,但是需要注意的是导入图片时推荐使用png格式的,jpg格式的图片在文档的描述是acceptable即可接受的
  • 可以通过右击res目录,选择New > Image Asset即可得到下图所示;可以根据自己的需要创建不同类型的图标
Image_Asset_Studio.png
  • 还可以通过该工具创建文本图标,只需要在Asset Type处选择Text就可以了
  • 至于在xml中引用图片就不多说了,这里提一下通过代码获得资源图片的引用
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);
  • 或者在代码中设置图片资源
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

添加多密度矢量图Vector Asset Studio

  • 使用矢量图(SVG)可以减小APK的体积大小,因为同一张矢量图就可以转换为适配不同屏幕密度的图片,而且还不会失真,所以就避免了导入适配不同屏幕密度的bitmap(Android 4.4 (API level 20)及一下不支持矢量图)
  • 在代码中和xml文件中引用svg资源的时候同普通的图片引用一样
  • 该工具使用方法基本同上,也支持自己导入SVGPSD图片,
  • 可以使用在线矢量图编辑工具制作好矢量图后导入

改变资源文件的位置

  • 一般而言资源文件的位置都在module-name/src/source-set-name/res/目录下,但是也可以在Module级别的build.gradle文件中更改资源文件位置,如下
android {
    sourceSets {
        main {
            res.srcDirs = ['resources/main']
        }
        debug {
            res.srcDirs = ['resources/debug']
        }
    }
}
  • 如果想要使用多资源文件目录,也可以在同一个文件中进行配置;但是要注意的时在不同的资源文件目录中不要有相同的资源文件名
android {
    sourceSets {
        main {
            res.srcDirs = ['res1', 'res2']
        }
    }
}

创建9.png图片

  • 所谓的9.png图片就是一张可拉伸的位图,因而适应不同的内容
  • 在一张需要制作的png图片右击,选择Create 9-patch file,然后打开生成的对应的9.png图片就可以进行编辑了,AndroidStudio3中可以通过鼠标拖拉一层像蒙版形式的边界来绘制9.png图片的可拉伸区域(其他版本没试过)

FireBase

  • 这个是Google提供的一个免费的云端服务,需要翻墙才能使用,一般用于面向海外的APP;详细信息可见官网

Lint(代码检查工具)

  • 类似于静态代码检查工具,可以避免写测试代码而进行代码检查
  • 具体用法参见博客

使用注解

  • Annotation(注解)可以帮助检测更细微的代码问题,作为tag添加到变量,参数,返回值中,来帮助检测传递的参数,返回值,局部变量和字段
  • 注解示例

布局文件中的Tools属性

  • 首先需要添加命名空间,在根节点添xmlns:tools="http://schemas.android.com/tools"
  • 这里指出几个比较重要的几个:
  • tools:context:适用于任何根View,用于指定默认的关联Context;示例:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
  • tools:listitem/tools:listheader/tools:listfooter: 适用于AdapterView或者其子类如ListView,用于静态指定默认的Item,需要注意的是RecyclerView不是AdapterView子类,所以无法使用咯;示例:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/sample_list_item"
tools:listheader="@layout/sample_list_header"
tools:listfooter="@layout/sample_list_footer" />

调试

  • 网上教程比较多,参见博客

录制屏幕

  • Android Studio也提供录制屏幕的工具,在手机或者模拟器上运行好APP后,可以在Logcat界面左边找到一个Screen Record选项,点击之后;弹出一个对话框,直接点击Start Recording即可进行录制(也可以进行简单设置,见下图;其中的Resolution选项指的是设置录制视频的分辨率,默认为7280x720);需要注意的是有时候在模拟器上运行时,Logcat面板(Alt+6可以打开)上录制屏幕的选项不可点击,可以换一个模拟器或者直接使用手机
    Screen_Record.png
  • 还需要注意的最多录制三分钟
  • Logcat面板左边还有一个Screen Capture,用于截屏

adb(Android Debug Bridge)

  • 在下载的Android SDK中可以找到,即platform_tools中可以找到;adb的作用有:运行设备的shell,管理模拟器或设备的端口映射,计算机和设备之间上传/下载文件,将本地apk软件安装至模拟器或android设备
  • 为了能够使用adb,需要使设备允许USB调试

常用命令

  • adb devices -l: 列出所有已连接设备;大致输出信息如下:其中,上面那个我通过USB连接的手机,下一个是开启的模拟器;输出的格式为serial_number stateserial_numberadb创建的标识设备的唯一标识符(如下CYEQO7SSLJN7DMLV),state表示的是设备的连接状态,有三种状态:offline(实例未连接到adb或不响应);device(实例现在已连接到adb服务器);no device(未连接模拟器/设备)

    adb.png

  • 需要注意的是,如果有多个设备连接到adb,那么使用adb命令行发送命令的时候需要指定设备,即上面所说的唯一标识符,格式为:adb -s serial_number command

  • adb install path_to_apk: 安装apk文件

  • adb pull remote localadb push local remote:将设备上的文件拉取(pull)和复制到(push)到相应的目录(其中remote表示连接的Android设备目录,local表示本地文件目录);如:adb push foo.txt /sdcard/foo.txt

  • 使用adb shell进入shell,之后可以使用shell命令(见下文档)

  • 更多常用命令参见文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容