目录(点击标题即可下载):
 
一、新建DemoActivity:
  1. 在res/layout/下新建activity_demo.xml
  2. 在manifests/文件夹下的AndroidManifest.xml注册(可使用Alt+Enter快捷方式)
  3. 新建DemoActivity继承Activity,并覆写onCreate(),在里面添加setContentView指向资源文件夹下的DemoActivity
二、使用匿名类设置事件监听     
  1. findViewById()找到View资源,设置监听。调用View对象的一个方法setOnClickListener,该方法的参数为OnClickListener,但是该方法是一个接口,需要重写方法onClick。
三、使用Intent跳转不同的Activity
Intent intent = new Intent(MainActivity.this, DemoActivity.this);
startActivtiy(intent);
 

 
一、对Button注册鼠标点击事件
二、使用Intent实现点击操作的事件:打开指定网页、打开相机、打开电话页面、设置无线网等等。
//打开百度网页
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

Hello3:点击监听事件集中处理

一、通过findViewById()找到View资源,封装成findView()函数
二、对View资源设置点击监听器setOnClickListener,封装成setListener()函数
三、实现View.OnClickListener接口,并覆写onClick()方法.
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.helloWorld1:
Log.i("textView1","helloWorld1");
break;
case R.id.helloWorld2:
Log.i("textView2","helloWorld2");
break;
}
}

Hello4:登录注册界面布局

  使用RelativeLayout布局界面
 

一、使用RelativeLayout布局界面,将彩虹放在中央,android:layout_centerInParent="true"。
二、使用LinearLayout布局将View垂直放置,android:orientation="vertical"。
 

  使用RelativeLayout作为整体布局,分别用LinearLayout布局放置线性布局,用RelativeLayout布局放置相对布局。
 

  三类常用监听事件:View.OnLongClickListener、View.OnClickListener、View.OnFocusChangeListener
一、封装findViewById()找到对应的View资源
 
二、封装setListener()注册监听事件:长按事件、点击事件、焦点改变事件。
 
三、实现对应的监听接口,关键词implements
 
四、重写onClick()方法、onLongClick()方法、onFocusChange()方法和afterTextChanged()方法。
 
五、添加消息提示:Toast.makeText(this,"长按按钮-点击",Toast.LENGTH_SHORT).show();
 

  1. 新建Activity视图为activity_item.xml,进行页面布局并添加ListView
  2. 新建Activity的子类显示activity_item资源,并在manifests里面注册
  3. 新建ListAdpter继承BaseAdapter,并覆写主要的方法:getCount()和getView()
  4. 在ListAdpter添加List<String>对象,这是ListView的视图来源,在覆写getView()的方法时,使用LayoutInflater的inflater()方法将activity_item填充并可以设置TextView的文本。
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View view1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_item,viewGroup,false);
TextView textView = view1.findViewById(R.id.text);
textView.setText(mData.get(i));
return view1;
}

Hello9:UI线程与非UI线程之间的消息传递Handler

  线程安全机制:只有创建UI的线程能更改UI,并且UI线程不能进行耗时操作。
 
一、子线程进行耗时操作,操作完成后,使用Handler或Handler的子类的sendEmptyMessage()方法
 
private void download() {
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.sendEmptyMessage(1);
}
};
Thread thread = new Thread(runnable);
thread.start();
}
二、主线程完成Handler的对象建立,并覆写回调函数handleMessage()方法操作UI
 
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what == 1){
mBtDownload.setText(R.string.downloaded);
}
}
};

Hello10:使用SharedPerferences保存用户的“偏好设置”

一、获取SharedPerferences和editor的对象并设置权限等级(私有权限:Context.MODE_PRIVATE)
sharedPreferences = getSharedPreferences("count", Context.MODE_PRIVATE);
editor = sharedPreferences.edit();

二、向空间中添加键值对:

editor.putInt("count",count);
editor.apply();
三、取出空间中持久化的键值对:
count = sharedPreferences.getInt("count",0);
优点:简单易用。
缺点:效率比较低,不能存储大量数据和复杂数据结构。
 

一、输入输出流都是相对于内存来说的
    1. 写入文件,是从内存到文件,则是出去,即FileOutputStream
    2. 读取文件,是从文件到内容,则是进来,即FileInputSteam
二、Android文件的四种操作模式
FileOutputStream = openFileOutput(name,mode) 应用程序的数据文件夹下的文件对应的输入流
name为文件名,mode为Android文件的四种操作模式之一:
    1. Context.MODE_PRIVATE 默认操作模式,私有数据(只能应用本身访问),写入文件会被覆盖
    2. Context.MODE_APPEND 检验文件是否存在,存在就追加内容,不存在就先新建文件再添加内容
    3. Context.WORLD_READABLE 可以被其他应用读取
    4. Context.WORLD_WRITABLE 可以被其他应用写入
    5. 既可读又可写:Context.WORLD_READABLE + Context.WORLD_WRITABLE
三、写入文件
    1. 获取内存写入输出流fileOutputSteam,使用openFileOutput(fileName,mode)
    2. 字符串转换为字节数组,注意编码格式,默认getBytes()编码为UTF-8
    3. 写入,使用fileOutputSteam.write(),注意捕获异常
private void writeFile() {
FileOutputStream fileOutputStream = null;
try {
fileName = mEtName.getText().toString();
fileContext = mEtContent.getText().toString();
fileOutputStream = openFileOutput(fileName, MODE_APPEND); //1.获取内存输出流fileOutputSream
fileOutputStream.write(fileContext.getBytes()); //2.字符串转换为字节数组
Toast.makeText(this,"写入完成!",Toast.LENGTH_SHORT).show();
} catch (java.io.IOException e) {
e.printStackTrace();
Toast.makeText(this,"捕获IO异常!",Toast.LENGTH_SHORT).show();
} finally {
try {
if (fileOutputStream!=null)
fileOutputStream.close(); //无论捕获异常还是正常执行,都需要关闭fileOutputStream
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、读取文件
将文件读取到内存中,使用输入流FileInputStream
    1. 获取内存输入流:使用openFileInput()方法
    2. 获得字节数组:定义字节数组用于暂时保存数据,使用fileInputStream.read(bytes)方法获取,返回值为字节数组的大小size。
    3. 获得字符串:使用new String(bytes)的方法将字节数组转换为字符串,注意编码格式,默认编码格式为UTF-8。在使用中需要用完整填充的字节数组,所以这里还需要新定义一个刚好为size的字节数组用于正确地转换为字符串。
private void readFile() {
FileInputStream fileInputStream = null;
try {
fileName = mEtName.getText().toString();
fileInputStream = openFileInput(fileName); //1.获取内存输入流
byte[] bytes = new byte[1024];
int size = fileInputStream.read(bytes); //2.读入字节数组
byte[] data = new byte[size];
System.arraycopy(bytes,0,data,0,size); //3.转换为字符串,注意编码格式
String str = new String(data);
textView.setText(str);
Toast.makeText(this,"读取完成!",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this,"文件没有找到!",Toast.LENGTH_SHORT).show();
} finally {
try {
if (fileInputStream != null)
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

一、内部存储(InternalStorage)与外部存储(ExternalStorage)
    1. 内部存储与外部存储是相对于应用程序来说的,内部存储是应用程序私有的,可设置对可外访问。
    2. 内部存储主要用于存储应用的临时数据,空间十分有限,应用卸载时,该目录文件也被删除。
二、内部存储目录:data/data/包名
内部存储位置
存放数据类型
访问方法
data/data/包名/shared_prefs 
SharedPreferences将数据持久化到xml文件存放的目录
 
data/data/包名/databases  
数据库文件存放的目录
 
data/data/包名/files 
普通数据存放的目录
context.getFilesDir()
data/data/包名/cache
缓存文件存放的目录
context.getCacheDir()
 
三、mnt或storage外部存储
1.判断外部存储是否可用 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
外部存储分类
外部存储详细目录
使用方法
公共目录
十大公共目录
Environment.getExternalStorageDirectory().getPath()
私有目录
storage/sbcard/Android/data/包名/files
getExternalFilesDir()
storage/sbcard/Android/data/包名/cache
getExternalCacheDir()
 
2.有包名的路径都是调用Context中的方法获取,没有包名的路径都是通过Environment中的方法获取
 
四、补充
(1) 关于各种storage外部存储的路径:   
        其中sdcard/、mnt/sdcard、storage/sdcard0、storage/emulated/0、storage/emulated/legacy都是同一个路径的不同“指针”,指向的是同一个地方,只是不同Android版本的叫法不一样。如果大家想了解每个版本的外部存储路径,同学们可以通过获取getExternalStorageDirectory方法的打印结果进行对比。
 
(2)清除缓存与清除数据
    1. 清除缓存:APP运行过程产生的临时数据,为内部存储文件。
    2. 清除数据:内部存储/data/user/0/packname/和外部存储/storage/emulated/0/Android/data/packname/下的文件里面的数据会全部删除,包括cache,files,lib,shared_prefs等等。
(3)补充总结
    1. /data目录下的文件物理上存放在我们通常所说的内部存储里面 ,一般用于临时数据,比如头像,密钥文件(隐私,空间有限)。
    2. /storage目录下的文件物理上存放在我们通常所说的外部存储里面 ,裁剪用于文件保存,上传头像(空间比较大)。
    3. /system用于存放系统文件,/cache用于存放一些缓存文件,物理上它们也是存放在内部存储里面的
描述
代码
  获取内部存储的根路径
Environment.getDataDirectory() = /data  
  获取外部存储的根路径
Environment.getExternalStorageDirectory().getAbsolutePath() = /storage/emulated/0 
  系统的内部存储
Environment.getDownloadCacheDirectory() = /cache 
Environment.getRootDirectory() = /system 
(4)友情链接:
    1.  彻底了解android中的内部存储与外部存储  https://www.cnblogs.com/jingmo0319/p/5586559.html
    2. 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑 https://blog.csdn.net/u010937230/article/details/73303034/ 
    3. Android存储扩展学习-----应用的清除数据和清除缓存 https://blog.csdn.net/oudetu/article/details/78664514  

在Android初次的前期学习中的十二个小例子(附案例下载)的更多相关文章

  1. 在Android初次的前期学习中的二个小例子(2)

    Hello13:SQLite数据库 一.简述SQLite的概念和主要特性 SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,使用非常方便,支持SQL语法标准和数据库事务原则. 相对于Sh ...

  2. salesforce 零基础学习(四十二)简单文件上传下载

    项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...

  3. 我的MYSQL学习心得(十二) 触发器

    我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...

  4. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  5. 我的MYSQL学习心得(十二)

    原文:我的MYSQL学习心得(十二) 我的MYSQL学习心得(十二) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYS ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...

  7. Linux学习总结(十二)—— CentOS用户管理:创建用户、修改用户、修改密码、密码有效期、禁用账户、解锁账户、删除用户、查看所有用户信息

    文章首发于Linux学习总结(十二)-- CentOS用户管理,请尊重原创保留原文链接. 创建用户 useradd -g webadmin -d /home/zhangsan zhangsan pas ...

  8. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  9. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

随机推荐

  1. NORDIC 协议栈下使用硬件定时器

    在使能蓝牙协议栈后,RTC0.TIMER0被蓝牙协议栈使用,RTC1被软件定时器使用,所以才程序中使用定时器的时候需要避开.

  2. 区块链火爆,再不知道Golang就晚了

    Golang,也叫Go语言,是2009年刚刚被发发布的一门新语言. 区块链,是2019年我国提出的新战略. 一个不争的事实就是,大多数从事区块链开发的小伙伴都是用Golang,大多数招聘区块链技术工作 ...

  3. 第一份c语言作业

    2.1 你对软件工程专业或者计算机科学与技术专业了解是怎样? •答案: 软件工程专业是个年轻的专业,紧跟这个信息化的新时代.我学习它是因为感兴趣,经过一周的学习,我了解了一些 该专业课程主要是c语言程 ...

  4. [BZOJ 1146] [CTSC2008]网络管理Network(树状数组+主席树)

    题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高 ...

  5. vim + oh-my-zsh + git搭建开发环境

    vim + oh-my-zsh + git配置开发环境 vim配置 安装vundle 使用vundle作为插件管理器,使用前先安装vundle mkdir -p ~/.vim/bundle git c ...

  6. [jenkins] 启动错误 Failed to start LSB: Jenkins Automation Server.

    解决办法见https://blog.csdn.net/qq_34208844/article/details/87865672

  7. PHP mysqli_next_result() 函数

    定义和用法 mysqli_next_result() 函数为 mysqli_multi_query() 准备下一个结果集. 语法 mysqli_next_result(connection);   执 ...

  8. HTML JS 弹层后底部页面禁止滚动处理

    1.打开新页面时需要禁止鼠标滚轮,禁止页面滑动: 1 2 3 4 在调用显示层时加上这句js代码就可以了: document.documentElement.style.overflow = &quo ...

  9. JAVA实现四则运算的简单计算器

    开发环境eclipse java neon. 今天用JAVA的swing界面程序设计制作了一个四则运算的简易计算器.代码以及截图如下: computer.java: ///////////////// ...

  10. 部署自己的聊天系统 DuckChat(鸭信)

    之前在找一款能自己部署的聊天系统,要求含有手机端APP,最好部署过程能简单点的.看了几款稍嫌麻烦,有的还没有app.今天无意间发现了这款DuckChat,开源免费,有手机APP,部署非常简单.直接上传 ...