问题:Android开发环境(Android Studio)需安装什么?
Java JDK:Java开发环境,需配置环境变量;
Android Studio:Android Studio 是开发 Android 应用程序的官方 IDE,基于 Intellij IDEA;
Android SDK:对应版本的Android软件开发包;
问题:Android四大组件是什么?
Activity:用户可视化界面;
Service:后台运行服务,不提供界面呈现;
Broadcast Receive:接收广播;
Content Provider:支持多个应用中存储和读取数据;
问题:res文件夹的作用是什么?其有什么特殊性。
- res文件夹可存放项目的资源文件夹。如图片、文本等。
- res文件夹下的所有资源,都会在R.java文件下生成对应的资源ID(32位二进制)。
如:public static final int del=0x7f020002;
- 项目中对资源的访问,都需通过资源ID来完成。
问题:举例res文件夹中常见的资源文件夹
res/values/
存放值文件。可被编译成很多种类型的XML文件。如:
array.xml 定义数组资源
colors.xml 定义颜色资源
dimens.xml 定义尺寸资源。
strings.xml 定义字符串资源
问题:新建Activity时,默认会新建哪2个文件?作用是什么?
布局文件:activity_main.xml,决定界面显示效果
Java文件: MainActivity.java, 实现逻辑功能
问题:在布局文件中表示资源ID的方式是?
基本格式为:属性=“@****/*****”
android:drawableTop="@drawable/tab_menu_channel"
android:textColor="@color/tab_menu_text"
问题:在java文件中表示资源ID的方式是?
基本格式:R.*****.******(R.资源类型.资源名)
setContentView(R.layout.activity_main);
xml文件和java文件是怎么关联的?
setContentView(R.layout.activity_main);
问题:描述在布局文件中标记一个控件的基本方法?
- 输入<,后接控件的标记名称;
添加属性对控件进行修饰;例:TextView控件的标记方法
问题:描述在布局文件中标记一个控件的基本方法?
一般控件由/>结尾;容器由</容器标记>结尾。
问题:如何设置View的宽度和高度?
设置宽度(Width)和高度(Height);常用属性值:
wrap_content自适应内容;
match_parent匹配父容器;和父容器一样。
问题:如何给控件添加ID的别名?
android:id="@+id/submit"
如何在java文件中初始化控件?
先声明对象的类型和名字;
用findViewByID方法初始化对象;参数:R.id.布局文件中标记的别名;
左右类型不匹配,使用Alt+Enter修复错误,添加强制转换;
新版本可不用再写强制转换;
请列举一些TextView控件的常用属性。
android:text设置显示的文本内容
android:textSize设置字体大小
android:textColor设置字体颜色
android:background设置背景颜色
描述单选按钮(RadioButton)的使用方法
问题:描述ListView和Spinner的基本使用方法。
列表ListView控件和下拉列表Spinner控件和普通的UI控件最主要的区别在于,其数据需要通过静态或动态的方式绑定到控件上之后方可使用。
静态方式:在布局文件中设置数据来源。
动态方式:在java文件中设置数据来源。
问题:描述ListView和Spinner的基本使用方法。
静态方式:
- 在res/values文件夹中新建array.xml文件,用以存放所需的数组。
- 在array.xml文件中,新建数组,并添加所需的数据项。
- 在Spinner的entries属性中设置数据源。
问题:描述ListView和Spinner的基本使用方法。
动态方式:
- 初始化控件对象;
- 在java文件中准备所需要的数据,如:字符串数组、List;
- 初始化适配器(Adapter);
- 在对象上绑定适配器;
问题:描述gravity和layout_gravity的区别。
layout_gravity设置当前控件在父容器中的对齐效果
gravity设置当前控件中的内容的对齐效果
问题:描述padding和margin的区别。
padding设置内边距
margin设置外边距
问题:例举集中常用的布局,并描述其效果。
- 线性布局:LinearLayout
线性布局具有垂直方向与水平方向的布局方式
通过设置属性“android:orientation”控制方向,属性值垂直(vertical)和水平(horizontal),默认水平方向。
问题:例举集中常用的布局,并描述其效果。
- 表格布局:TableLayout
表格布局,适用于多行多列的布局格式,每个TableLayout是由多个TableRow组成,一个TableRow就表示TableLayout中的每一行,这一行可以由多个子元素组成。
问题:例举集中常用的布局,并描述其效果。
- 帧布局:FrameLayout
最简单的一种布局,从屏幕左上角按照层次堆叠方式布局,后面的控件覆盖前面的控件。没有任何的定位方式。
在只需要一个容器进行填充时,较为常用。
问题:例举集中常用的布局,并描述其效果。
- 相对布局:RelativeLayout
相对布局可以让子控件相对于兄弟控件或父控件进行布局,可以设置子控件相对于兄弟控件或父控件进行上下左右对齐。
当布局嵌套过多时,可使用此布局。
问题:如何在布局文件中修改TextView的显示文本?
在TextView控件中寻找合适的属性,以达到需要的目的:
android:text表示显示的文本内容
问题:如何在java文件中修改TextView的显示文本?
根据布局文件中所需的属性,寻找对应的java方法。
修改显示的文本对应属性:android:text,其对应方法为setText();
问题:如何在java文件中让RadioGroup在界面中不可见?
- 在布局文件中,找到可实现不可见的属性;
- 找到其对应的java方法;
- 根据方法的说明完成调用;
问题:如何在java文件中让RadioGroup在界面中不可见?
radioGroup.setVisibility(View.INVISIBLE);
问题:描述使用匿名内部类的方式实现按钮单击事件的过程?
- 初始化按钮控件;
- 按钮控件调用setOn*****Listener()方法实现单击事件;
问题:什么是Activity?
- Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互。
- Activity用于显示用户界面,用户通过Activity交互完成相关操作 , 一个App允许有多个Activity。
问题:什么是Activity的生命周期?
表示一个Activity从开始运行到最后销毁的过程。
问题:Activity的生命周期共有几种状态?
共有4种状态,如下所示:
- Resumed(运行状态):Activity处于前台,且用户可以与其交互。此时Activity位于返回栈的栈顶。
- Paused(暂停状态): Activity被在前台中处于半透明状态或者未覆盖全屏的其他Activity部分遮挡。 暂停的Activity不会接收用户输入,也无法执行任何代码。
- Stopped(停止状态):Activity被完全隐藏,且对用户不可见;被视为后台Activity。 停止的Activity实例及其诸如成员变量等所有状态信息将保留,但它无法执行任何代码。
- Destroy(销毁状态):当一个Activity从返回栈中移除后就变成了销毁状态。
问题:什么堆栈?
堆栈是一种后进先出(LIFO)的数据结构。
LIFO:Last In First Out 后进先出
问题:什么是Android返回栈?
每当启动一个新的Activity时,它会被放入返回栈中,并处于栈顶的位置。每当我们按下Back键或调用activity的finish()方法去销毁一个活动时,处于栈顶的Activity会出栈,这时前一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于栈顶的Activity给用户。
问题:Activity有几种回调方法,各是什么?
共有7种回调方法。
- onCreate():这个方法在每一个Activity类都会有,当新建一个Activity类时,一定会重写父类的onCreate方法,onCreate方法会在Activity第一次被创建时调用。应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。
- onStart():这个方法在OnCreate()方法之后调用,或在Activity由不可见变为可见时调用。
- onResume():在Activity准备好和用户交互的时候调用。
- onPause():在系统准备去启动或者恢复另一个Activity的时候调用。
- onStop():在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
- onDestory():在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
- onRestart():在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
问题:如何启动新的Activity?
在Activity与Activity中相互通信,即为Android的组件间的相互通信,必须通过Intent对象完成。
- 初始化Intent对象,设置当前界面和需启动的界面;
- 通过StartActivity方法启动界面;
问题:如何获得目标界面跳转回当前页面的返回结果?
- startActivity( ):仅仅是跳转到目标页面,若是想跳回当前页面,则必须再次调用startActivity( )。
- startActivityForResult( ) :当使用此方法从Activity_A跳转到Activity_B,当Activity_B调用了finish()方法以后,程序会自动跳转回Activity_A,并调用Activity_A中的onActivityResult( )方法。
具体调用顺序如下:
- 在Activity_A跳转到Activity_B时采用startActivityForResult(intent, 0);
- 在Activity_A中重写onActivityResult方法,用来接收处理Activity_B回传的数据。
- 在Activity_B中回传数据时采用setResult方法,并且之后调用finish方法。(调用setResult()方法必须在finish()之前)
resultCode常用两个常量:RESULT_CANCELED 和 RESULT_OK
问题:列举几种常见的消息输出方式?
Toast类:以短小信息的形式通知给用户,在一段时间之后会自动消失。
Log类:Android Studio中的日志工具类。Log可以通过过滤器来进行筛选,方便用户查看。
Log.v():打印一些最为繁琐、意义不大的日志信息。
Log.d():打印一些调试信息(输入小技巧:logd+Tab)
Log.i():打印一些比较重要的数据,可分析用户行为数据(输入小技巧:logi+Tab)
Log.w():打印一些警告信息,提示程序该处可能存在的风险(输入小技巧:logw+Tab)
Log.e():打印程序中的错误信息(输入小技巧: loge+Tab)
Log中Tag标签输入小技巧:
反复输入Tag标签很麻烦,可在OnCreate()方法外输入:logt+Tab,添加Tag常量。
问题:SharedPreferences 的数据存储形式是什么?数据存在哪儿?
key-value pairs
primitive data: booleans, floats, ints, longs, and strings.
Xml文件的形式,存放在data/data/包名/shared_prefs
问题:SharedPreferences 的使用过程?
To get a SharedPreferences object for your application, use one of two methods:
- getSharedPreferences()
- getPreferences()
问题:Android文件存储包括哪两种?
- 内部文件存储
- 外部文件存储
问题:内部文件存储的主要过程?
一、写操作:
(1)通过openFileOutput方法(需给出文件名及操作模式),初始化FileOutputStream;;
(2)使用write()方法,以字节的方式写入数据;
(3)清除缓存;flush();
(4)关闭输出流;close();
问题:Android文件存储包括哪两种?
- 内部文件存储
- 外部文件存储
问题:内部文件存储的主要过程?
一、写操作:
(1)通过openFileOutput方法(需给出文件名及操作模式),初始化FileOutputStream;;
(2)使用write()方法,以字节的方式写入数据;
(3)清除缓存;flush();
(4)关闭输出流;close();
(1)通过openFileInput方法(需给出文件名),初始化FileInputStream;
(2)使用read()方法,以字节的方式读数据;
(3)关闭输入流;close();
问题:提供操作SQLite数据库API的类是什么?其具有什么方法?
SQLiteDatabase类,相关方法包括:
(1)onCreate(SQLiteDatabase db)创建数据库时调用
(2)onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)版本更新时调用
(3)getReadableDatabase()创建或打开一个可读写数据库
(4)getWritableDatabase()创建或打开一个可读写数据库
区别:
n getReadableDatabase()方法中会调用getWritableDatabase()方法
如数据库的磁盘空间满了, getWritableDatabase()方法会打开失败,而getReadableDatabase() 打开失败后会尝试以只读方式打开数据库
问题:Cursor类是什么类,有哪些差用方法?
Cursor类为游标类,可以认为是数据集。
moveTo***** ()移动指针的相关方法;
get*****(int i)返回第几列的***类型的数据;
getCount()返回记录的数量;
getColumnCount()返回共几列;
getColumnIndex(String s)根据列名返回第几列;
问题:操作SQLite数据库的过程是什么?
(1)自定义类,继承SQLiteOpenHelper类;并重写onCreate()和onUpdate()方法、构造方法;
SQLiteOpenHelper为SQLiteDatabase的辅助类。
(2)使用execSQL()方法,直接执行无需返回值的SQL语句完成操作。
(3)用query()或rawQuery()方法执行查询语句。结果记录在Cursor对象中。
(4)通过Cursor对象来对游标进行操作,以获取需要的数据
问题:SQLite数据库存放路径?
data/data/包名/database
问题:调试SQLite数据库可用什么工具?
可用SDK目录下platform-tools中的sqlite3.exe
在cmd的命令行提示符下,使用adb shell可以快速进入模拟器的文件系统进行调试。中文乱码,在cmd下输入:chcp 65001
广播分为哪些类型?
标准广播:完全异步执行的广播,所有广播接收器都会收到该广播消息,无法终止广播。
有序广播:同步执行的广播,根据广播接收器的优先级的先后顺序来接收广播消息。只有这个广播接收器的逻辑执行完成后才可以继续传递广播。
广播的发送步骤?
1、创建Intent对象。
2、向Intent对象中添加执行的动作、传递的数据等信息。
3、调用相应的方法发送Intent。
sendBroadcast() 发送普通广播
sendOrderedBroadcast() 发送有序广播
广播的接收步骤?
1、创建广播接收器类BroadcastReceiver,并重写OnReceive()方法。
2、在Android系统中注册广播接收器,分为静态和动态两种注册方式。
静态注册:
在AndroidManifest文件中进行注册
在<Application>节点中添加标签<Receiver>,并设置过滤器<intent-filter>
添加感兴趣的广播的<action>
注:注册广播时,可能需要添加权限
动态注册:
在Java文件中指定广播地址并进行注册。
1、定义Intent-Filter对象。
2、调用Context.registerReceiver()方法进行注册。
取消注册:Context.unregisterReceiver()方法。
动态注册需要App启动后才可以接收广播,静态的不用启动亦可接收。