项目结构介绍
- src:存放所有java源代码
- gen:系统自动生成的配置文件
- Android x.x.x:包括构建程序所需的x.x.x版本的安卓SDK、APIs
- assets:存放资源图片,未使用时不会生成id且不会加入到apk包里面占大小
- res:所有用到的资源,如图片、布局等
- drawable-xxx:不同分辨率的图片资源
- layout:布局文件
- values:字符串、主题、颜色、样式等资源文件(values-v11/14 是现在版本出现的 v-11是3.0版本14是4.0版本)
- AndroManifest.xml:清单文件,配置应用的相关的主要信息(包名、权限、程序组件等)
控件概述
-
<b>TexView:</b>只能做显示框
- 控件属性(id-id,layout_width-宽度,高度,text-内容,textSize-字体大小(单位:一般是sp),textColor-颜色,background-背景)
- 控件宽度:warp_content-和文本宽度一样,match_parent-铺满父容器(在2.3的api之后添加的属性),fill_parent-填充父容器(在2.3之前的属性)
-
跑马灯效果:当页面中只有一个textView时,
多个时,需要自定义一个继承于textView类,在里面定义一个isFocused()方法且返回true,然后再xml里面使用自定义控件(包名.类名)
-
<b>EditText</b>:输入框
- 控件属性(比显示框多出了 hint-提示文本,inputType-文本类型 这2个属性)
- 修改样式
-
<b>AutoCompleteTextView</b> 动态匹配输入的内容(输入东西,出现相应的列表以供选择)
- 控件属性(completionThreshold:设置输入多少个字符开始匹配)
-
1.在activity里面找到对应控件,2.创建一个适配器,3.初始化数据源,4.用setAdapter将适配器和控件关联起来
-
<b>MultiAutoCompleteTextView</b> 相较于autocom...可以多设置一个分隔符的属性
初始化
- <b>ImageView</b>:显示图片
- 控件属性(src-图片,background -背景图片、颜色)
- <b>Button、ImageButton</b>
- 获取xml中的按钮:btn = (Button) findViewById(R.id.button的id);
- 控件属性: ImageButton无text属性,Button无src属性
- 按钮onClick事件来监听按钮点击(所有控件都有这个事件),
-
监听事件实现的几种写法:1.匿名内部类 setOnClickListener(new OnClickLen...这里将会是一个bolck回调),2.独立类(相当于弄一个父类出来
-
,3.实现接口的方式 需要在类实现OnClickListener接口(使用implements关键词调用),会在当前类实现onClick方法(会自动生成)btn.setOnClickListener(this)调用
-
<b>ToggleButton</b> 开关按钮-相当于switch控件,默认是关闭的
- 控件属性: checked-是否为开,textOff-关闭显示什么,textOn-打开显示什么
-
使用:给按钮设置监听器,需要类实现CheckedChangeListener接口
-
<b>CheckBox</b> 复选框
-
控件属性:
-
使用:
-
-
<b>RadioGroup和RadioButton</b> 单选列表
-
属性:
-
String的使用
在string文件里面写入 <string name="xxx(用英文)">调用后获取的字符串</string>
implements关键字代表让一个类拥有另一个类的属性
六大布局(布局中可以包含其他布局,可相互套用)
线性布局(LinerLayout)
是线性布局控件,决定它包含的子控件是水平-Hor 还是垂直-Ver 排布方式。
layout_weight这个属性赋值 代表所有控件的属性都加起来后占得比例。例如:控件a的该属性=1,控件b的该属性=2,那么到时候a的比例就是1/3.
相对布局(RelativeLayout)
控件的位置设置是相对的,它包含的子空间将以控件之间相对位置或子类控件相对于父类容器的位置的方式排列。
常用属性:
相对父类容器的属性
相对于子类控件的属性
约束布局(ConstraintLayout)
ConstraintLayout是Android Studio 2.2中主要的新增功能之一,也是Google在去年的I/O大会上重点宣传的一个功能。非常适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来进行编写。当然,可视化操作的背后仍然还是使用的XML代码来实现的,只不过这些代码是由Android Studio根据我们的操作自动生成的。还可以有效地解决布局嵌套过多的问题
-
添加约束-拖动右边视图中的点来确定约束对应哪个,可以是底部视图,也可以是其他控件
-
控件对根视图添加约束
-
控件之间的约束添加
-
-
删除约束
-
单个约束删除
-
单个控件所有约束删除
-
当前页面所有约束删除
直接选中顶部的这个按钮就OK
-
帧布局(FrameLayout)
所有的元素都不能被指定放置的位置,它们都在父视图的左上角,并且后面的子元素在前面子元素之上。 可以用来做加载进度条和文字。
当你想设置前景图时,可以使用foreground将当前控件放在最前面来。
绝对布局(AbsoluteLayout)
坐标布局,直接指定子元素的绝对位置。
不常用。了解下就OK
表格布局(TableLayout)
相当于tableview 每一行为一个TableRow对象,继承自View。
自身的属性
<b>当想要所有控件都调用的话,直接用 = "*";</b>
下面这2个属性是使用在TableRow内部控件的属性中的
Activity(相当于OC的VC)
什么是Activity? 视图控制器
创建到销毁的生命周期:
onCreate()----创建
onStart()-----运行
onResume()----获取焦点
onPause()-----失去焦点
onStop()------暂停
onDestory()---销毁
onRestart()---重新运行
st=>start: onCreate
e=>end: onDestory
op1=>operation: onStart
op2=>operation: onResume
op3=>operation: onPause
op4=>operation: onStop
op5=>operation: onRestart
cond=>condition: 不重新启动?
st->op1->op2->op3->op4->cond
cond(yes)->e
cond(no)->op1
从启动到后台,再到前台的生命周期:
从启动到失去焦点,再到获取到焦点的生命周期:
Intent-意图
它可以启动一个activity、Service、Broadcasts(广播)
- 属性:Action-动作(常用),Data-数据(常用),Category-分类,Type-类型,Compent-组件,Extra-扩展信。
-
Action-是一个字符串常量,系统自己定义了一些常量,例如:ACTION_CALL-启动电话、ACTION_BATTERY_LOW-发送一个电池过低的警告等等。
- 常见的Action
- ACTION_CALL activity 启动一个电话.
- ACTION_EDIT activity 显示用户编辑的数据.
- ACTION_MAIN activity 作为Task中第一个Activity启动
- ACTION_SYNC activity 同步手机与数据服务器上的数据.
- ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.
- ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告
- ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.
- ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.
- Data-
组件名称 | 方法名称 |
---|---|
Activity-视图 | startActivity(intent) , startActivityForResult(intent,requestCode) |
Servic-服务 | startService(Intent service) , bindService(Intent service, ServiceConnection conn,int flags) |
Broadcasts-广播 | sendBroadcast()-该方法有很多的方式调用,sendOrderedBroadcasts-有2个函数,根据情况使用 |
其中广播的Intent参数的 RequiresPermission 修饰符表示需要许可,即要权限。
拿到别人的项目需要配置的地方(协同开发)
Android Studio正确打开项目只需要两步,或者说找到两个文件进行简单的修改就好,最好在打开之前进行修改
- gradle-wrapper.properities
查找路径:/gradle/wrapper/ gradle-wrapper.properities
,打开后可以看到最后一行是一个地址链接,重点是链接的最后部分gradle-2.10-all.zip,AS不同版本对应的GradleWrapper版本号也不一样,想知道自己当前的是多少,可以在As命令行如gradlew -v
查看,也可以新建一个项目到该路径下查看,修改完成后保存。
- build.gradle
第二个需要修改的文件更好找,就是我们常用的Project下的build.gradle,打开后找到如图所示位置,把classpath的gradle版本号
也改成当前对应的就行,至于当前的版本号是多少,随便打开一个自己在本地创建的project就能知道了
错误
遇见这种错误:1) Error:(199) *** Android NDK: Aborting... . Stop.
2)Error:Execution failed for task ':app:compileDebugNdk'. >com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException: Process 'command 'C:\Users\vishal\android-ndk-r10d\ndk-build.cmd'' finished with non-zero exit value 2
解决方法
LogCat调试 Debug
1,长什么样子?
2,一般常见的输出信息
红色的表示错误信息,以及错误的原因
OptionsMenu选择菜单(点击系统菜单按钮弹出)
一个Activity只能有一个菜单
- 创建需要重写onCreateOptionsMenu()
- 可用代码动态设置,调用menuadd()方法
- xml固定设置,使用MenuInflater.infalte()方法引用
- 监听菜单项的点击,重写onOptionsItemSelected()方法
上下文菜单 (一般是长按某个东西弹出的菜单)
一个View可以拥有一个菜单,常见于文件夹长按后弹出操作菜单
- 创建需要先使用 registerForContextMenu() 注册上下文菜单 重写onCreateContextMenu()
- 可用代码动态设置,调用menuadd()方法
- xml固定设置,使用MenuInflater.infalte()方法引用
- 监听菜单项的点击,重写onContextItemSelected()方法
还有很多需要学习,加油!