Android学习
Posted 20189214李熹桥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习相关的知识,希望对你有一定的参考价值。
学号 20189214 《android程序设计》第六周学习总结
教材学习内容总结
Android stdio 结构
- .idea:AS生成的工程配置文件,类似Eclipse的project.properties。
- app:AS创建工程中的一个Module。
- gradle:构建工具系统的jar和wrapper等,jar告诉了该工程如何与系统安装的gradle构建联系
- build:构建目录
- libs:依赖包,包含jar包和jni等包。
- src:源码
- main:主文件夹
- java:Java代码,包含工程和新建是默认产生的Test工程源码。
- res:资源文件
- layout:App布局及界面元素配置
- menu:App菜单配置
- values:
- dimens.xml:定义css的配置文件。
- strings.xml:定义字符串的配置文件。
- styles.xml:定义style的配置文件。
- ......:arrays等其他文件。
- ......:assets等目录
- AndroidManifest.xml:App基本信息(Android管理文件)
- ic_launcher-web.png:App图标
- build.gradle:Module的Gradle构建脚本
res目录结构
res目录下所有的资源文件都会在R.java文件下生成对应的资源id,我们可以直接通过资源id访问到对应的资源;这个R文件可以理解为字典,res下每个资源都都会在这里生成一个唯一的id。
- 图片资源
- 布局资源
- 菜单资源
- values目录
- raw目录(原生资源)
- 动画
活动
- Android程序逻辑和视图分离,每个活动都能对应一个布局。
- 所有的活动都要在AndroidManifest.xml中进行注册才能生效,主活动还需要在标签内加入
- Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以知名当前组件想要执行的动作,还可以在不同组件之间传递数据。分为显式Intent和隐式Intent。
Intent和onSaveInstanceState()方法一样,结合Bundle对象可以来传递数据。
Android的活动机制
- Android在默认情况下,每当启动一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。
- 每当按下Back或调用finish()方法销毁活动时,处于栈顶的活动会出栈。
每个活动都有以下四种状态: - 运行状态
- 暂停状态
- 停止状态
- 销毁状态
日常使用时,当切换一些应用的过程,有时会有一些应用自动返回到初始状态。其原因就是应用处于停止状态,这种活动保存相应的状态和成员变
量。但当其他地方需要内存时,这些活动由于内存不足会被系统回收。当Back回来的时候,执行onCreate()而不是onRestart()方法。
Activity类中定义了7个回调方法,覆盖活动周期的每一个环节。可将活动分为3种生存期。
- 完整生存期(onCreate,onDestroy)
- 可见生存期(onStart,onStop)
- 前台生存期(onResume,onPause)
Android官方活动生命周期示意图:
UI
- android:icon ="@drawable/ic_launcher" 的含义是引用了位于res/drawable目录下一个drawable对象。
- android:id是元素的唯一标识符,wrap_contentbiao表示当前元素的高度只要能包含里面的内容就行。
- ViewGroup是一个特殊的视图,它可以包含其他的视图,可以在一个布局文件中声明布局,或者在运行时通过编程添加布局。比如:LinearLayout(线性对齐),RelativeLayout(相对布局),FrameLayout,TableLayout(行列布局),GridLayout(栅格布局)。
- Toast是一个小的弹出对话框,用于显示一条消息作为给用户的反馈,并且不会替代当前的活动。
- AlertDiglog是一个为用户提供反馈的窗口。与Toast不同的是会一直显示,直到失去焦点。
- LayoutInflater的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
监听器
接口 | 方法 |
---|---|
OnClickListener | OnClick() |
OnLongClickListener | OnLongClick() |
onFocusChangeListener | OnFocusChange() |
OnKeyListener | OnKey() |
OnTouchListener | OnTouch() |
一旦创建一个监听器接口的实现,可以将其传递给你想要监听的视图的相应的setOnXXXListener方法,其中XXX是事件名称。
实现监听器有四种方式:
-
使用匿名内部类的方式实现监听
b1.setOnClickListener(new OnClickListener(){
@Override public void onClick(View v) { // TODO Auto-generated method stub Intent intet = new Intent(MainActivity.this,seekbar.class); startActivity(intet); //finish(); } });
-
使用外部类的方式实现监听事件
-
使用接口方式实现监听事件
-
直接绑定到标签
教材学习中的问题和解决过程
问题1:Android中Activity和AppcompatActivity的区别
问题1解决方案:AppcompaActivity相对于Activity的主要的两点变化:
- 主界面带有toolbar的标题栏;
- theme主题只能用android:theme=”@style/AppTheme (appTheme主题或者其子类),而不能用android:style。 否则会提示错误: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
代码调试中的问题和解决过程
- 问题1:多活动Toast显示不出
- 问题1解决方案:一个控件只能有一个Listener,如果绑定多个点击事件,前面的事件会被覆盖。
代码托管
上周考试错题总结
问题1:下面代码中共有()个线程?
public class ThreadTest {
public static void main(String args[]){
MyThread myThread =new MyThread();
Thread t1=new Thread(myThread);
Thread t2=new Thread(myThread);
t1.start();
t2.start();
}
}
class MyThread extends Thread {
...
}
问题1解决方案:主函数也算一个线程,所有一共三个线程。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 150/200 | 2/2 | 20/20 | |
第二周 | 200/400 | 1/3 | 20/40 | |
第三周 | 100/500 | 1/4 | 10/50 | |
第四周 | 200/700 | 1/5 | 15/65 | |
第五周 | 1486/2186 | 1/6 | 15/80 | |
第六周 | 1400/3586 | 1/7 | 18/98 |
-
计划学习时间:15小时
-
实际学习时间:18小时
参考资料
以上是关于Android学习的主要内容,如果未能解决你的问题,请参考以下文章
Android课程---Android Studio使用小技巧:提取方法代码片段
Kotlin学习之旅解决错误:kotlin.NotImplementedError: An operation is not implemented: Not yet implemented(代码片段