第一个月交互式视觉设计
第一单元
常用的ADB命令
1:adb start-server 启动adb进程
2:adb kill-server 杀死adb进程
3:adb devices 显示当前运行的全部模拟器
4:adb install -r 应用程序.apk 安装应用程序
5: adb uninstall 包名 卸载软件
6:adb help 查看adb帮助信息、
7:adb logcat -s 标签名 在命令中查看log信息
8:adb root 获取管理员权限
9:adb push 路径 /sdcard/123/abc.txt; 从电脑传文件到模拟器
10:adb pull /sdcard/123/abc.txt 路径

四大组件
Activity 界面
BroadcastReceiver 广播接收者
Server 服务
ContentProvider 内容提供者
属于Android的四层结构的是哪个、
应用程序
系统运行库
应用程序框架
:内核层

第二单元
LinearLayout 线性布局 控制其中的控件或者组件横向和纵向排列
android:layout_width="" 宽度dp match_parent与父控件一致
android:layout_height="" 高度dp
android:orientation=“vertical” 设置布局中控件的摆放方向,默认水平方向摆放:horizontal
Vertical 竖直摆放 每一个控件占一行
Horizontal 水平摆放 每一个控件占一列

visibility=“gone” invisible 不可见 占位置gone不可见 不占位置 visible可见默认值

sp针对字体大小
Gravity 设置内容的对齐方式

如果水平方向上设置权重,就把layout_width属性值设置为0dp
如果垂直方向上设置权重,就把layout_height属性值设置为0dp
权重值越大, 所占的空间则越大

EditText 输入编辑文本框
hint提示文本 提示用户输入
InputType 文本输入为密码
Line 输入的字数

FrameLayout 帧布局

Foreground 前景图片
foregroundGravity 前景图像

TextView
singleLine一行显示
textAllCaps 自动大小写
Autolink 自动连接
imeOptions 改变键盘回车键的内容
Textstyle 文本样式 bold加粗 italic斜体
Ellipsize 省略号位置

设置图片出现的位置 drawable

设置跑马灯格式
singleLine true单行显示
Ellipsize marquee超出内容显示
Focusable true 设置该控件得到焦点
focusableInTouchMode true设置该控件在触摸模式下是否可以得到焦点
marqueeRepeatLimit marquee_forever跑马灯循环次数(只能设置永久)

快捷创建 alt+回车

EditText是TextView的子类
Background 继承TextView 去除按钮颜色@null

imageView 图片文本
adjustViewBounds 设置是否保持原图的长宽比
Scaletype 设置图片显示模式

Day5单元
ProgressBar 进度条

Max 设置进度值
progress一级进度值
secondaryProgress 二级进度值

Seekbar 拖动条
style设置条度样式

Ratingbar 评分条
numStars 显示星星的数量(必须是整数)
Rating 评分((默认1.5 并且只能是小数)
Stepsize 评分的步长(必须是浮点型)
Isindicator 是否只是展示
minheight最小高度

自定义进度条
Layer-list
Item 改背景和进度条

Toast 简易消息框 用来显示消息的一种机制
Toast.setGravity(显示位置,0,0); 指定位置Toast
toast.setDuration(Toast.LENGTH_LONG); 设置持续时间

监听器
点击事件监听器 OnClickListener
状态改变监听器 OnCheckedChangeListener
滚动监听器 OnScrollListener
SeekBar 拖拽监听器 OnSeekBarChangeListener

第六单元 Activity

Activity是提供全屏界面,实现与用户交互的应用程序组件
AndroidManifest.xml 清单文件中,注册Activity
Name 指定当前注册的activity
Label 指定标题
screenOrientation指定屏幕方向 landscape 横屏 portrait 竖屏

Content 上下文
Context是一个用来为应用程序提供环境信息的全局对象
Intent是用于各组件或应用之间通讯时携带信息的对象。
Intent intent = new Intent(当前activity.this,目标activity.class);
启动startactivity(intent);

Activity 七个方法
Oncreate 当activity第一次被创建的时候 初始化
Onstart 当用户可见时调用的方法
onResume activity获取用户焦点的时候
onPause 当activity失去焦点的时候
onRestart  当处于非栈顶状态的活动需要再次返回栈顶,展现给用户的时候,触发该方法。也就是说执行了onStop()且没有执行onDestroy()的Activity被重新激活时,就会调用onRestart()方法
onStop 当用户不可见的时候调用的方法
onDestory 当activity被销毁的时候调用的方法 资源释放的操作

Task 任务 把某些为了完成某个或某些应用程序功能的集合称之为Task

android:configChanges=”keyboardHidden|orientation”属性)。 横竖屏转换不让重新启动activity设置

启动模式的好处,优化内存和提高用户的体验
launchMode
Standard 默认模式 每一次启动Activity都会创建一个新的实例
singleTop拒绝堆叠模式
特点:1、可以实例化多次,但是栈顶只能出现一个
2、当栈中不存在要启动的Activity实例, 系统会创建一个Activity实例
3、当栈顶存在要启动动的Activity实例,系统会调用onNewIntent(),把Intent对象传递给已经存在的Activity实例,重用栈顶的Activity

singleTask 独立门户模式
特点: 1、只能创建一个Activity实例
2、当栈中不存在要启动的Activity实例, 系统会创建一个Activity实例, 放在栈顶
3、当栈中存在要启动的Activity实例, 会调用已经存在的Activity实例的onNewIntent()方法,把Intent对象传递给已经存在的Activity实例
4、并且不允许栈的上方出现其他的Activity实例, 他上方的Activity实例会pop栈中,并且销毁

singleInstance孤独寂寞模式
特点:
1、当使用这种模式启动Activity时,系统会单独
分配一个Task,并把这个实例放到栈底。
2、不允许其他的Activity实例和他共享一个栈

第七单元
Intent 分为 显式意图 隐式意图
隐式意图在清单文件内部
添加intent-filter过滤器
过滤器内部 第一个 action属性 name 可以为任意字母,必须唯一
第二个category属性 name=”android.intent.category.DEFAULT” 结尾只能是default
调用格式 new intent(属性必须和第一个action的name值相同);
Intent 传值
第一种直接传值
基本写法
Intent.putExtra(键,值);
启动startactivity(intent)
传递过来的对象 intent intent = getIntent();
Intent.get…(“键”)获取数据
第二种Bundle传值 打包数据
存储基本数据类型、数组、对象
基本写法
Intent intent = new Intent(this,InfoActivity.class);
声明Bundle bundle = new Bundle();
bundle .put数据类型(健,值);
intent.putExtras(bundle);
接收页面
Intent intent = getIntent();
Bundle bundle = intent.getExtras();

第三种 传递对象
类实现Serializable接口
new对象 传递对象
intent.putExtra(“user”,user);
接收页面
Intent intent = getIntent();
User user = (User)intent.getSerializableExtra(“user”);

第四种全局变量传递数据
创建类,继承Application 类 声明存储数据的变量
代表全局的应用
传递消息类名 myApp = (类名) getApplication();
类名.data.add(map);
启动activity
接收消息
MyApp myApp = (MyApp) getApplication();

Map<String,Object> map =myApp.data.get(0);

启动activity 返回数据
传递数据
startActivityForResult(intent,意图对象,请求码(任意数字,必须唯一));
重写onActivityResult()方法,接收返回的数据

返回数据
Intent data = new Intent();
data.putExtra(“imageId”,imageId);
setResult( 结果吗,data);
Finish();

Activity.this.finish()关闭当前界面

第八单元

滚动视图 ScrollView 是一种垂直滚动的容器视图。
ScrollbarSize 设置滚动条宽度
scrollbarThumbVertical 设置滚动条颜色
Scrollbars 设置滚动条是否显示
fadeScrollbars 设置滚动条自动隐藏

ScrollView的常用方法
设置ScrollView滚动条的显示或隐藏 : setVerticalScrollBarEnabled(false);
为ScrollView添加子视图:addView()
ScrollView的setOnScrollChangeListener监听器

ScrollView的特点
1:ScrollView是一种FrameLayout布局,需要在其中间放入要显示的子元素。
2:ScrollView子元素可以包含多个控件,但是直接子元素只能有一个。
3:ScrollView只支持垂直方向的滚动。

HorizontalScrollView 水平滚动视图 (方法同ScrollView)
HorizontalScrollView 的特点
1:HorizontalScrollView是一种FrameLayout布局,需要在其中间放入要显示的子元素
2:HorizontalScrollView子元素可以包含多个控件,但是直接子元素只能有一个
3:HorizontalScrollView只支持水平方向的滚动

Assets 存储资源文件Mp4,视频
特点:1:assets可以有二级目录
assets是一种特殊目录,用于放置APP所需的固定文件,这些文件被打包到APK中时,不会被编译成二进制文件
2:会保留文件的原始格式
assets中的资源文件, 不会在R.java文件中生成对应的属性,会保持文件的原始格式
3:可以存放多种格式的文件
assets中的文件只可以读取而不能写

常用格式读取图片:AssetManager assets = getAssets();
InputStream open = assets.open(“timg.jpg”);
Bitmap bitmap = BitmapFactory.decodeStream(open);
ImageView img = new ImageView(this);
img.setImageBitmap(bitmap);

常用格式读取文件:InputStream is = getAssets().open(“json.txt”);
StringBuffer stringBuffer = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String str="";
while((str=reader.readLine())!=null)
{
stringBuffer.append(str);
}

第九单元
spinner下拉列表
entries="@array/city" 设置数据源
spinnerMode 设置显示样式
Prompt 设置对话框的标题 属性必须引用res/values/strings下的资源文件,不能直接填入字符串
setAdapter(SpinnerAdapter adapter):设置适配器
第一种获取角标内容方法
匿名内部类实现setOnItemSelectedListene
getItemAtPosition(position).toString(); 内部类根据角标获取内容
第二种获取角标内容方法
让MainActivity 实现OnItemSelectedListener接口
重写onItemSelected和onNothingSelected方法

Adapter 适配器 适配器是将各种数据以合适的形式显示在视图中的对象。
第一种: ArrayAdapter(数组适配器)
是将字符串数组或集合以单行文字显示在视图中的适配器。不用自定义item的布局文件,当Spinner列表的每个列表项中只有一行字符串时,Arrayadapter是最佳的选择。
常用格式:
ArrayAdapter adapter = new ArrayAdapter<>(上下文,item的布局文件,数据源 );
spinner.setAdapter(adapter);

第二种: SimpleAdapter(简单适配器)
SimpleAdapter是通过映射关系实现图文混排的适配器。
List集合中放map集合,
SimpleAdapter simpleAdapter = new SimpleAdapter(上下文,数据源,items的布局,数据源中的Key的数组,item布局页面中id的数组);

第三种: SimpleCusorAdapter(简单游标适配器)

第十单元 webView与js的交互
WebView是显示网页的控件。
WebView的声明周期
onResume():WebView为活跃状态时回调,可以正常收到网页的响应
onPause():WebView被切换到后台时回调, 页面失去焦点, 变成不可见状态
onDestroy():关闭Activity时回调, 销毁webview

常用方法:.loadUrl(url);打开对应的网址
清单文件中添加网络权限
SetWebViewClient(new WebViewClient())在自己APP中打开
canGoBack()检测网页是否可以后退
goBack()WebView后退
canGoForward()检测网页是否可以前进
goForward() WebView前进
stopLoading()停止网页的加载
reload()刷新网页
loadData(地址,“text/html”,null) 加载指定内容的网页
loadDataWithBaseURL(null,地址, “text/html”, “UTF-8”,null);
加载指定带有中文内容的网页
clearCache(true)清除缓存文件夹下的缓存信息
clearHistory()清除历史信息
clearFormData()清除webView 缓存的信息
webView.loadUrl(“file:///android_asset/index.html”); 加载assets中内容

WebViewClient的常用方法
onPageStarted()网页开始加载的时候执行
onPageFinished()网页加载完成的时候执行
onReceivedError()网页加载错误时执行
shouldOverrideUrlLoading()重定向url时执行(Fragment中常用)

WebChromeClient 是辅助WebView处理界面功能的类。
常用方法:onProgressChanged(WebView view, int newProgress)
加载进度发生变化的回调方法
onJsAlert(WebView view, String url, String message, JsResult result)
拦截alert()函数
onJsConfirm(WebView view, String url, String message, JsResult result)
拦截confirm()函数
onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) 拦截prompt()函数
onConsoleMessage(ConsoleMessage consoleMessage)打印 console 信息

加载网页时,显示加载进度值
布局建立ProgressBar 样式设置为水平格式
开始加载时,显示进度条;加载完成后,隐藏进度条
在webView.setWebViewClient(new WebViewClient()方法中
进度条.setVisibility(View.VISIBLE);显示进度条
progressBar.setVisibility(View.INVISIBLE);隐藏进度条
实时显示加载的进度
格式webView.setWebChromeClient(new WebChromeClient()
{
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
progressBar.setProgress(newProgress);
}
});

WebSettings 是对WebView进行配置和管理的类
常用方法
setJavaScriptEnabled(true);使当前的WebView 支持javaScript
setJavaScriptCanOpenWindowsAutomatically(boolean flag)设置脚本是否允许自动打开弹窗,默认false,不允许
setSupportZoom(boolean support) 设置WebView是否支持使用屏幕控件或手势进行缩放,默认是true,支持缩放。
setDisplayZoomControls(true);设置WebView使用内置缩放机制时,是否展现在屏幕缩放控件上,默认true,展现在控件上。
setBuiltInZoomControls(true);支持缩放缩放工具
setDefaultTextEncodingName(String encoding)设置WebView加载页面文本内容的编码,默认“UTF-8”
setUseWideViewPort(true)设置WebView是否使用viewport
setLayoutAlgorithm(LayoutAlgorithm l)设置WebView底层的布局算法,新生成WebView布局
LayoutAlgorithm.SINGLE_COLUMN --单行索引
setLoadWithOverviewMode(boolean overview)设置WebView是否使用预览模式加载界面。
setDefaultFontSize(int size)设置WebView默认值字体值,默认值16,取值1到72
setCacheMode(int mode)重写缓存,基于Navigation Type
加载普通的页面,会检查缓存同时重新验证是否需要加载,如果不需要重新加载,将直接从缓存读取数据,允许客户端通过指定LOAD_DEFAULT、LOAD_CACHE_ELSE_NETWORK、LOAD_NO_CACHE、LOAD_CACHE_ONLY其中之一重写该行为方法,默认值LOAD_DEFAULT

常用格式:
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);设置支持js
自适应屏幕:{
webSettings.setUseWideViewPort(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setLoadWithOverviewMode(true);}

点击按钮,显示js的内容
mWebView.loadUrl(“javascript:callJs()”);

第十一单元 json
JSON是轻量级的基于JavaScript编程语言,使用键值对封装数据的数据交换格式
JSONObject是以键值对方式存储数据的Json对象。
JSONArray是多个Json对象组成的Json数组。
json基本格式 JSONObject jsonObject = new JSONObject(string);
JSONArray data = jsonObject.getJSONArray(“data”);
JSONObject object = data.getJSONObject(i);
String title = object.getString(“title”);
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的Java 类库。
常用方法
fromJSON():将JSON字符串转化为Java对象或集合
toJSON() :将对象转化为JSON字符串
基本格式: Gson gson = new Gson();
JsonBean gsonBean = gson.fromJson( json, JsonBean.class );

FastJSON是阿里巴巴提供的,用Java语言编写的高性能的JSON类库。
FastJson使用简单,解析速度快,性能高,当JSON数据量比较大时,FastJson是理想的解析方式。
基本格式:JsonBean jsonBean = JSON.parseObject( json,JsonBean.class );
第十二单元Http与Https网络访问
TCP传输控制协议
面向连接
安全可靠的
效率低下的
UDP
数据报协议
面向无连接的
效率高
HTTP是位于网络应用层的超文本传输的协议。

HTTP的组成
1:HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文
2:HTTP消息报头由四部分组成,分别为普通报头、请求报头、响应报头、实体报头
3:HTTP响应由三部分组成,分别是:状态行、消息报头、响应正文

URL是用于访问和获取网络资源的唯一的标识。
HttpURLConnection是客户端和服务端数据传输的对象 。
connection.setRequestMethod(“GET”);请求类型,默认为GET
connection.setConnectTimeout(51000);请求连接超时时间
connection.setReadTimeout(5
1000);请求读取时间
connection.connect();开始连接
响应码分类:
1XX:需要请求者继续执行
2XX:网络请求成功
3XX:需要进一步操作。状态代码用来重定向
4XX:请求可能出错,妨碍了服务器的处理
5XX:服务器内部错误

请求类型为POST
/是否从httpUrlConnection读入connection.setDoInput(true);
是否向httpUrlConnection输出connection.setDoOutput(true);
connection.getResponseCode()获取响应吗

第十三单元 Handler的基本使用
Handler 是Android中主线程和子线程通信的消息处理机制。
主线程 ( UI线程 )
可以显示或更新UI界面
不能被阻塞
不能执行耗时的操作
不能执行网络操作

子线程( 非UI线程 )
可以被阻塞
可以执行耗时的操作
可以 执行网络请求
不能显示或更新UI界面

Post 方式
post(Runnable) 发送Runnable对象
postAtTime(Runnable, long)在指定的时间发送Runnable对象, 时间的单位为毫秒
postDelayed(Runnable, Object, long)
延迟发送Runnable对象, 时间的单位为毫秒

Send 方式
sendEmptyMessage(int)发送空消息
sendMessage(Message)发送消息
sendMessageAtTime(Message, long)在指定的时间发送消息, 时间的单位为毫秒
sendMessageDelayed(Message, long)延迟方消息, 时间的单位为毫秒

用于下载图片
Bitmap bitmap = BitmapFactory.decodeStream(bis);
Message是封装了需要传递的数据交由Handler 处理的对象。
Message message= Message.obtain();消息对象池
recycle()用来回收当前Message
getTarget()用来获取Handler 对象,setTarget()用来设置Handler 对象。

MessageQueue是Handler消息处理机制中用于存放待处理消息的消息队列
插入消息的方法enqueueMessage()
读取消息的方法next()

Looper 是循环取出消息队列中的消息并交给对应Handler 处理的对象。
Looper.prepare();初始化looper
Looper.loop();启动looper循环

getLayoutInflater().inflate(R.layout.activity_apk, null)获取布局文件的视图

第十五单元

AsyncTask是在子线程中执行任务,把执行进度和最终结果传递给
主线程的任务类。
启动异步任务 new MyTask().execute(imageUrl);
类继承AsyncTask<String, Void, Bitmap> 无参数类型,使用Void
doInBackground()方法内部,下载网络图片,并且返回
onPostExecute()方法内部,将返回的Bitmap位图,显示在图片控件上

实时更新进度步骤
onPreExecute()方法内部myProgressBar.setVisibility(View.VISIBLE);
doInBackground()方法内部,下载网络图片,并且更新进度
if (connection.getResponseCode() == 200){
InputStream inputStream = connection.getInputStream();
long maxLen = connection.getContentLength();//定义数据的总长度
long curLen = 0;//定义当前加载的长度
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer))!=-1) {
baos.write(buffer,0,len);
Thread.sleep(100); //线程休眠
curLen+=len;//叠加每次下载的总量
int progress = (int)(curLen100/maxLen); // progress = 当前读取的长度100/总长度
publishProgress(progress);
}
byte[] result = baos.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(result,0,result.length);
return bitmap;

onProgressUpdate() 更新进度,
myProgressBar.setProgress(values[0]);实时更新进度
onPostExecute()方法更新UI
myProgressBar.setVisibility(View.GONE);
if (bitmap!=null){
mIv.setImageBitmap(bitmap);
}

隐藏进度条和设置图片

ProgressDialog是显示进度的对话框
ProgressDialog progressDialog = new ProgressDialog(this);
创建ProgressDialog
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);水平直线样式
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
环形模糊样式(不显示具体的进度)
progressDialog.setCancelable(false);//点击屏幕或物理返回键dialog不消失
progressDialog.setIcon(R.mipmap.ic_launcher);设置对话框图标
progressDialog.setTitle(“下载进度”);//设置对话框标题
progressDialog.setMessage(“正在拼命为您下载…”);设置对话框标题下面提示内容
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, “确定”,new DialogInterface.OnClickListener() {}设置确定按钮文字、点击事件
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, “取消”,new DialogInterface.OnClickListener() {}设置取消按钮文字、点击事件
第十六单元
ListView是垂直显示列表项并可上下滚动的控件
常用属性:
entries: 指定ListView item的数据
divider :指定item之间分界线的颜色
deviderHeight :指定item之间分界线的高度
scrollbars :指定是否显示滑动条
常用方法:
setSelection(int position)设置滑动到某一个item
setDivider(Drawable divider)和 setDividerHeight(int height)设置分割线背景和高度
addHeaderView(View v)/removeHeaderView(View v)添加头布局、移除头布局
addFooterView(View v)/removeFooterView(View v)添加尾布局、移除尾布局

BaseAdapter是按照任意方式排列视图的适配器。
public int getCount() { return data.size(); }返回listView有多少item
public Object getItem(int position) { return data.get(position); }返回listView中
第position条item数据
public long getItemId(int position) { return position; }返回listView中
第position个的id
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = new TextView(Main3Activity.this);
textView.setText(data.get(position));
return textView ;
}显示第position条数据到TextView控件中

convertView 的复用
item 布局页面的复用,减少了页面的创建数量, 减低了内存的消耗 复用
页面数量 = 当前一屏显示的页面数量+1
宽度和高度属性值,必须设置为match_parent,减少宽度和高度的测量
ViewHolder 的使用将item页面中的控件封装,达到重用,减少了findViewById 的次数
ViewHolder viewHolder;
if(convertView==null){
convertView = LayoutInflater.from(context).inflate(R.layout.item,null); 加载每个Item 的视图页面
viewHolder = new ViewHolder();初始化ViewHolder
viewHolder.mImageView = convertView.findViewById(R.id.icon_id);初始化页面中的控件
viewHolder.mTextView = convertView.findViewById(R.id.title_id);
convertView.setTag(viewHolder); convertView 和ViewHolder 绑定到一起
}else{
viewHolder = (ViewHolder) convertView.getTag();convertView中得到绑定的ViewHolder对象
}
viewHolder.mImageView.setImageResource(R.mipmap.ic_launcher);
viewHolder.mTextView.setText(data.get(position).getTitle());为控件赋值
return convertView;
}
class ViewHolder{
ImageView mImageView;
TextView mTextView;
}

第十七单元 ListView 高级
OnItemClickListener是每个条目单击事件的监听器
OnItemLongClickListener是每个条目长按事件的监听器
OnScrollListener是监听列表或网格滚动事件的监听器
两个方法:onScrollStateChanged()
SCROLL_STATE_TOUCH_SCROLL正在滚动,并且手指依然在屏
SCROLL_STATE_FLING惯性滑动
SCROLL_STATE_IDLE由滑动到静止

Picasso是Square公司出品的开源的图片加载库
常用方法:Picasso.with(this).load(path).placeholder(R.mipmap.loading).error(R.mipmap.error).into(mImageView);
networkPolicy(NetworkPolicy.NO_CACHE);设置网络策略
resize(100,100)设置图片大小
rotate(45)图片旋转
centerInside()和 centerCrop()图片尺寸
config(RGB_565)设置像素点

第十八单元ListView的多布局和GridView的使用
GridView是二维滚动网格(行和列)显示列表项的控件。
属性:
numColumns设置列的数量
horizontalSpacing设置水平方向上列与列的间隔
gravity设置每个单元格内的重力
columnWidth设置每列的固定宽度
第二个月次世代数据存储思维与技术

第一单元Dialog
1:普通对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage(“你吃饭了没:”);//设置消息
builder.setCancelable(true);//点击其他区域是否可以退出
builder.setIcon(R.drawable.ic_launcher_background);//设置图片
builder.setTitle(“早上:”);//设置标题
builder.setPositiveButton(“ok”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, “你点击了确定按钮”, Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton(“back”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, “你点击了取消按钮”, Toast.LENGTH_SHORT).show();
}
});
builder.setNeutralButton(“中性”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, “你点击了功能按钮”, Toast.LENGTH_SHORT).show();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();//显示对话框
2:多选对话框 builder.MultiChoiceItems
3:单选对话框builder .SingleChoiceItems
4:列表对话框 设置适配器builder .setAdapter
5:进度对话框ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle(“下载图片”);
progressDialog.setMax(100);
progressDialog.setMessage(“正在加载”);
progressDialog.setProgress(0);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.show();
new CountDownTimer(11000,1000){

@Override
public void onTick(long millisUntilFinished) {progressDialog.setProgress(c+=10);
}@Override
public void onFinish() {progressDialog.setMessage("已完成");progressDialog.dismiss();
}

}.start();
6:自定义视图对话框 设置builder.setView(inflate);:
7:时间对话框java.util.Calendar instance = java.util.Calendar.getInstance();
new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

}

},instance.get(Calendar.HOUR),instance.get(Calendar.MINUTE),true).show();
8:日期对话框java.util.Calendar instance = java.util.Calendar.getInstance();
new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

}

},instance.get(Calendar.YEAR),instance.get(Calendar.MONTH),instance.get(Calendar.DAY_OF_MONTH)).show();
9:自定义对话框类继承dialog
第二单元 menu和PopupWindow

1:系统菜单
步骤:1.在res下面创建一个menu文件夹,并新建一个xml文件作为OptionMenu的布局文件
2.Activity重写onCreateOptionsMenu加载资源文件
3.Activity重写onOptionsItemSelected加设置事件监听
注意:一个Activity只有一个系统菜单
2:上下文菜单
步骤:1.在res下面创建一个menu文件夹,并新建一个xml文件作为ContextMenu的布局文件,我们复用上面的menu布局(指系统菜单)
2.Activity重写onCreateConextMenu加载资源文件
3.Activity重写onConextItemSelected设置事件监听
4.为控件添加长按属性并将菜单绑定到这个控件上:registerForContextMenu(控件)
长按绑定的控件+可以为任意一个view设置上下文菜单
3:弹出式菜单
步骤1:在res下面创建一个menu文件夹,并新建一个xml文件作为PoupMenu的布局文件。
步骤2:把PopupMenu相关逻辑封装到showPopupMenu()方法中,包含PopupMenu的实例化、布局设置、显示、添加MenuItem的点击监听及响应等
步骤3:为控件设置事件监听直接调用showPopupMenu()方法

PopupWindow
一.PopupWindow介绍
PopupWindow弹出窗体可以在任意位置弹出窗体,而对话框只能出现屏幕最中间。
二.如何自定义窗体
(1)构造方法:public PopupWindow (Context context):context上下文对象
(2)必须设置的3大要素:
setContentView():设置自定义布局
setWidth():设置宽度
setHeight():设置高度
(3)显示窗体:
a。显示在某个指定控件的下方
showAsDropDown(View anchor):
showAsDropDown(View anchor, int xoff, int yoff);//xoff和yoff都是偏移量
b。指定父视图,显示在父控件的某个位置(Gravity.TOP,Gravity.RIGHT等)
showAtLocation(View parent, int gravity, int x, int y);
//gravity可以是Gravity.TOP、Gravity.BOTTOM、Gravity.LEFT、Gravity.RIGHT

给窗体设置半透明
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
2.设置透明度为0.5f,半透明状态
layoutParams.alpha=0.5f;
//3.为窗体设置新属性
getWindow().setAttributes(layoutParams);
第三单元 通知Notification
1:普通通知
//TODO 1:获得通知管理者:发送通知 取消通知
NotificationManager manager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //TODO 2:创建构造者 Notification.Builder builder = new Notification.Builder(this); //TODO 3:设置属性 setSamllIcon该属性必须设置 builder.setSmallIcon(R.mipmap.ic_launcher);//设置小图标 builder.setContentTitle(“我是标题”); builder.setContentText(“我是内容”); //其他属性 builder.setTicker(“我是提示信息”); builder.setContentInfo(“我是附加信息”);
2:自定义通知
RemoteViews remoteViews=new RemoteViews(getPackageName(),R.layout.layout_customer_notification);
3:进度条通知

第四单元fragment
一.Fragment的回退栈
Fragment2 f2 = new Fragment2();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.replace(R.id.fl, f2);
//将当前的事务添加到了回退栈
tx.addToBackStack(null);
tx.commit();

Android获取相关权限
1:通话记录
ContentResolver contentResolver;
Uri callUri = CallLog.Calls.CONTENT_URI;
String[]coumns=newString[]{CallLog.Calls._ID,CallLog.Calls.NUMBER,CallLog.Calls.DATE};
Cursor cursor=contentResolver.query(callUri ,coumns,null,null,null);
2:获取手机图片
ContentResolver contentResolver;
Uri callUri =MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[]coumns=newString[]{MediaStore.Images.Media.DATA,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.SIZE}
Cursor cursor=contentResolver.query(callUri ,coumns,null,null,null);

3:联系人
ContentResolver resolver = getContentResolver();
Uri uri= ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[]strs={ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor cursor=resolver.query(uri,strs,null,null,null);
4:手机短信
ContentResolver resolver = getContentResolver();
Uri uri= Telephony.Sms.CONTENT_URI;
String[] strs={Telephony.Sms.BODY,Telephony.Sms.ADDRESS};
Cursor cursor=resolver.query(uri,strs,null,null,null);
5:读取视频
ContentResolver resolver = getContentResolver();
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URL;
String[] projections = {MediaStore.Video.Media.DISPLAY_NAME,//名称
MediaStore.Video.Media.DURATION,//时长
MediaStore.Video.Media.SIZE,//大小
MediaStore.Video.Media.DATA,//路径
};
Cursor cursor=resolver.query(uri,projections ,null,null,null);
6:读取音乐
ContentResolver resolver = getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projections = {
ID所在列MediaStore.Audio.Media._ID//
歌名MediaStore.Audio.Media.TITLE,//
歌手MediaStore.Audio.Media.ARTIST,//
歌曲时长MediaStore.Audio.Media.DURATION//
歌曲大小MediaStore.Audio.Media.SIZE
绝对路劲MediaStore.Audio.Media.DATA,
专辑MediaStore.Audio.Media.ALBUM
};
Cursor cursor=resolver.query(uri,projections ,null,null,null);

BroadCastReceiver广播
广播 分为静态和动态注册
静态注册:在清单文件中
广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局的广播

动态注册:在代码中注册(注册和解除注册)
(1)广播会跟Activity的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
IntentFilter intentFilter=new IntentFilter();
//TODO 2:调频:
intentFilter.addAction(“android.bawei.action.customer”);
//TODO 3:注册: 给这个Activity注册
registerReceiver(receiver,intentFilter);
unregisterReceiver(receiver);//解除注册

1:注册广播在onresume()
2:销毁广播在onPause()

动态注册广播需要的系统
Intent.ACTION_BATTERY_CH 充电状态,或者电池的电量发生变化 电荷级别改变,只能在代码注册
Intent.ACTION_BATTERY_LO 电池电量低  
Intent.ACTION_BATTERY_OK 电池电量充足  
Intent.ACTION_AIRPLANE_MODE_CHANGED 关闭或打开飞行模式  
Intent.ACTION_BATTERY_CHANGED 充电状态,或者电池的电量发生变化 电荷级别改变,只能在代码注册
Intent.ACTION_BATTERY_LOW 电池电量低  
Intent.ACTION_BATTERY_OKAY 电池电量充足 从电池电量低变化到饱满时会发出广播
Intent.ACTION_BOOT_COMPLETED 在系统启动完成后,这个动作被广播一次 只有一次
Intent.ACTION_CAMERA_BUTTON 按下照相时的拍照按键时发出的广播 硬件按键
Intent.ACTION_CLOSE_SYSTEM_DIALOGS 当屏幕超时进行锁屏时,当用户按下电源按钮,长按或短按(不管有没跳出话框),进行锁屏  
Intent.ACTION_CONFIGURATION_CHANGED 设备当前设置被改变时发出的广播 界面语言,设备方向,等 请参考Configuration.java
Intent.ACTION_DATE_CHANGED 设备日期发生改变时  
Intent.ACTION_DEVICE_STORAGE_LOW 设备内存不足时发出的广播 此广播只能由系统使用,其它APP不可用
Intent.ACTION_DEVICE_STORAGE_OK 设备内存从不足到充足时发出的广播 此广播只能由系统使用,其它APP不可用
Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE 移动APP完成之后,发出的广播 移动是指:APP2SD
Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE 正在移动APP时,发出的广播 移动是指:APP2SD
Intent.ACTION_GTALK_SERVICE_CONNECTED Gtalk已建立连接时发出的广播  
Intent.ACTION_GTALK_SERVICE_DISCONNECTED Gtalk已断开连接时发出的广播  
Intent.ACTION_HEADSET_PLUG 在耳机口上插入耳机时发出的广播  
Intent.ACTION_INPUT_METHOD_CHANGED 改变输入法时发出的广播  
Intent.ACTION_LOCALE_CHANGED 设备当前区域设置已更改时发出的广播  
Intent.ACTION_MANAGE_PACKAGE_STORAGE 表示用户和包管理所承认的低内存状态通知应该开始  
Intent.ACTION_MEDIA_BAD_REMOVAL 未正确移除SD卡 扩展卡已经从SD卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)
Intent.ACTION_MEDIA_BUTTON 按下”Media Button” 按键时发出的广播 有”Media Button” 按键的话(硬件按键)
Intent.ACTION_MEDIA_CHECKING 插入外部储存装置 比如SD卡时,系统会检验SD卡,此时发出的广播
Intent.ACTION_MEDIA_EJECT 已拔掉外部大容量储存设备发出的广播 不管有没有正确卸载
Intent.ACTION_MEDIA_MOUNTED 插入SD卡并且已正确安装 扩展介质被插入而且已经被挂载
Intent.ACTION_MEDIA_NOFS 拓展介质存在,但使用不兼容FS(或为空)的路径安装点检查介质包含在Intent.mData领域  
Intent.ACTION_MEDIA_REMOVED 外部储存设备已被移除,扩展介质被移除 不管有没正确卸载,都会发出此广播
Intent.ACTION_MEDIA_SCANNER_FINISHED 已经扫描完介质的一个目录  
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 请求媒体扫描仪扫描文件并将其添加到媒体数据库  
Intent.ACTION_MEDIA_SCANNER_STARTED 开始扫描介质的一个目录  
Intent.ACTION_MEDIA_SHARED 扩展介质的挂载被解除 (unmount) 它已经作为 USB 大容量存储被共享
Intent.ACTION_PACKAGE_ADDED 成功的安装APK 数据包括包名(最新安装的包程序不能接收到这个广播)
Intent.ACTION_PACKAGE_CHANGED 一个已存在的应用程序包已经改变 包括包名
Intent.ACTION_PACKAGE_DATA_CLEARED 清除一个应用程序的数据时发出的广播 清除包程序不能接收到这个广播
Intent.ACTION_PACKAGE_INSTALL 触发一个下载并且完成安装时发出的广播 比如在电子市场里下载应用
Intent.ACTION_PACKAGE_REMOVED 成功的删除某个APK之后发出的广播 正在被安装的包程序不能接收到这个广播
Intent.ACTION_PACKAGE_REPLACED 替换一个现有的安装包时发出的广播(不管现在安装的APP比之前的新还是旧  
Intent.ACTION_PACKAGE_RESTARTED 用户重新开始一个包 重新开始包程序不能接收到这个广播
Intent.ACTION_POWER_CONNECTED 插上外部电源时发出的广播  
Intent.ACTION_POWER_DISCONNECTED 已断开外部电源连接时发出的广播  
Intent.ACTION_REBOOT 重启设备时的广播  
Intent.ACTION_SCREEN_OFF 屏幕被关闭之后的广播  
Intent.ACTION_SCREEN_ON 屏幕被打开之后的广播  
Intent.ACTION_SHUTDOWN 关闭系统时发出的广播  
Intent.ACTION_TIMEZONE_CHANGED 时区发生改变时发出的广播  
Intent.ACTION_TIME_CHANGED 时间被设置时发出的广播  
Intent.ACTION_TIME_TICK 当前时间已经变化(正常的时间流逝) 每分钟都发送,只能通过来注册
Intent.ACTION_UID_REMOVED 一个用户ID已经从系统中移除发出的广播  
Intent.ACTION_UMS_CONNECTED 设备已进入USB大容量储存状态时发出的广播  
Intent.ACTION_UMS_DISCONNECTED 设备已从USB大容量储存状态转为正常状态时发出的广播  
Intent.ACTION_WALLPAPER_CHANGED 设备墙纸已改变时发出的广播  
Intent.ACTION_USER_PRESENT 用户唤醒设备  
Intent.ACTION_NEW_OUTGOING_CALL 拨打电话

Okgo
OkGo.post(“https://www.wanandroid.com/user/register").params(“username”,ed1.getText().toString()).params(“password”,ed2.getText().toString()).params("repassword”,ed3.getText().toString()).execute(new StringCallback() {
@Override
public void onSuccess(Response response) {

    Log.i("aaa", "onSuccess: "+response.body());}

});

蓝牙设备
权限

//调用系统开关蓝牙弹窗->用户手动允许 Intent intent = new Intent(); intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);//开启蓝 intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//允许蓝牙被搜索 intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);//设置允许被搜索时间200s内可以被搜索到 startActivityForResult(intent,100); bluetoothAdapter.disable();//强制关闭蓝牙 bluetoothAdapter.startDiscovery();//搜索附近蓝牙 bluetoothDevice.createBond();//发起配对 adapter.getBondedDevices();获得已经配对的蓝牙

Android基本组件及使用相关推荐

  1. android组件化架构 书,Android MVVM组件化架构方案

    MVVMHabitComponent 关于Android的组件化,相信大家并不陌生,网上谈论组件化的文章,多如过江之鲫,然而一篇基于MVVM模式的组件化方案却很少.结合自身的调研和探索,在此分享一篇基 ...

  2. 深圳腾讯内部Jetpack宝典意外流出!极致经典,堪称Android架构组件的天花板

    简介 Jetpack是一套库.工具和指南,可以帮助开发者更轻松地编写优质应用.这些组件可以帮助开发者遵循最佳做法.让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上. ...

  3. Android Jetpack组件之Hilt使用

    前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. And ...

  4. Android Jetpack组件App Startup简析

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  5. Android Jetpack组件之WorkManger使用介绍

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  6. Android Jetpack组件之Navigation使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  7. Android Jetpack组件之 Room使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  8. Android Jetpack组件之 Paging使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  9. Android Jetpack组件之 LiveData使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  10. Android Jetpack组件之ViewModel使用

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

最新文章

  1. 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章
  2. 为什么学习Python数据分析,python数据分析有什么用?
  3. c语言随机数表,C语言随机数
  4. react-navigation createBottomTabNavigator 刷新问题
  5. 基于JAVA实现的客户信息管理软件(简易)
  6. 开发一个Java项目的完整流程(附2600套Java项目源码+视频)
  7. 用vs2008编写和调试linux程序 ----VisualGDB 使用教程
  8. Excel2010中打开Smartview时报不能设置类Addin的installed属性
  9. linux用独显运行steam,修复在Linux系统上与Nvidia不兼容的Steam游戏
  10. 小米笔记本android,小米笔记本同步助手下载
  11. Mysql sql执行错误#1436 Thread stack overrun:
  12. 工作缺点和不足及措施_【工作中存在的问题和不足及改进措施】_工作中的不足与改进_工作中不足及改进措施...
  13. 用十条命令在一分钟内检查Linux服务器性能[转]
  14. 思维导图:从Xmind到docsify博客
  15. cut out数据增强_数据增强:Mixup,Cutout,CutMix | Mosaic
  16. 【Linux】单网卡设置双ip的方法
  17. 中国 CA 市场 分析
  18. android韩国代理,韩国Android手机市场占有率达70%
  19. FGMap学习之--天气预报
  20. android 头像简称,Android环信显示头像及昵称的简单方法

热门文章

  1. workflow工作流类型及其区别
  2. VLC全部详细参数,libvlc_new函数参数,VLC SDK开发
  3. 设计一个形状类(接口)Shape,方法:求周长和求面积
  4. CSDN技术主题月:实战解读移动信息安全技术
  5. 解决雷电模拟器上Xposed框架不能用的问题。
  6. c语言游泳是怎么钓鱼的,钓鱼怎么找水层?看完这篇你就懂!
  7. 【实战】如何抓住Facebook天秤币的机会
  8. python编程实例 下载-Python编程从入门到实践PDF下载高清完整扫描原版
  9. 巴西龟饲养日志----养龟第二年开始
  10. 基于策略梯度的强化学习方法及算法理论基础