android起步渣渣基础笔记

这篇博客主要介绍了Android开发的基础知识,包括Activity的四种启动模式:standard、SingleTop、SingleTask和SingleInstance,详细解释了它们的行为。此外,还讲解了如何在XML和Java代码中定义界面控件,以及数据持久化的多种方式,如SharedPreferences、文件存储和SQLite数据库存储。SQLite部分提到了其特性以及数据查询和事务处理。
摘要由CSDN通过智能技术生成

第二章

1. Activity程序的生命周期
在这里插入图片描述
2. 活动的启动模式:

1、standard :
默认启动模式,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用该模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例
2、SingleTop:
在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。
3、 SingleTask:
单一任务。每次启动该活动时系统首先会在返回栈中检查是否存在该 活动的实例,如果发现已经存在则直接使用该实例, 并把在这个活动之上的所有活动统统出栈,如果没有 发现就会创建一个新的活动实例。
4、SingleInstance:
单一实例。此时有三个activity,ActivityA,ActivityB,ActivityC,除了ActivityB的启动模式为singleInstance,其他的启动模式都为默认的。startActivity了一个ActivityA,在ActivityA里startActivity了一个ActivityB,在ActivityB里startActivity了一个ActivityC。此时在当前的任务栈中的顺序是,ActivityA->ActivityB->ActivityC。照理来说在当前ActivityC页面按返回键,finish当前界面后应当回到ActivityB界面。但是事与愿违,奇迹出现了,页面直接回到了ActivityA。这是为什么呢?其实想想就能明白了,上面已经说过,singleInstance模式是存在于另一个任务栈中的。也就是说ActivityA和ActivityC是处于同一个任务栈中的,ActivityB则是存在另个栈中。所以当关闭了ActivityC的时候,它自然就会去找当前任务栈存在的activity。当前的activity都关闭了之后,才会去找另一个任务栈中的activity。也就是说当在ActivityC中finish之后,会回到ActivityA的界面,在ActivityA里finish之后会回到ActivityB界面。
此时有两个个activity,ActivityA,ActivityB,ActivityA的启动模式为默认的,ActivityB的启动模式为singleInstance。当在ActivityA里startActivity了ActivityB,当前页面为ActivityB。按下home键。应用退到后台。此时再点击图标进入APP,按照天理来说,此时的界面应该是ActivityB,可是奇迹又出现了,当前显示的界面是ActivityA。这是因为当重新启动的时候,系统会先去找主栈(我是这么叫的)里的activity,也就是APP中LAUNCHER的activity所处在的栈。查看是否有存在的activity。没有的话则会重新启动LAUNCHER。

此部分内容摘取来自

第三章

  1. 定义界面控件方式:

a. 用XML代码定义:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/other_tv_str" />

b. 用java代码定义

TextView tv = new TextView(this);//new一个标签控件
tv.setText("Hello World");//设置显示的文本
setContentView(tv);//将该控件设置为窗口显示内容


2. 控件设置

查找文件中的ID值实例化控件 TextView text = (TextView) super.findViewById(R.id.mytext);
获取控件中的字符串 String text=tv.getText().toString();
设置控件中的字符串 text.setText(“今天天气真好");

  1. 常用控件

① EditText控件

android:text="请输入内容:"
在这里插入图片描述
获取光标后,text是默认内容

android:hint="请输入内容:
在这里插入图片描述

hint是提示内容

android:text="请输入内容:" android:selectAllOnFocus="true"默认全选中默认内容
在这里插入图片描述

android:inputType="textPassword"(限制输入类型)

如果输入文本不会显示出来

android:enabled="false"(设置不可编辑 只读)

② RadioButton

通常放在一个RadioGroup中和多个RadioButton一起用

<!-- 单选按钮 -->
    <RadioGroup
        android:id="@+id/yesorno"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:checkedButton="@+id/yes"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/yes"
            android:text="是" />

        <RadioButton
            android:id="@+id/no"
            android:text="否" /
    </RadioGroup>

checkedButton 默认选中按钮
在这里插入图片描述

③ CheckButton 多选按钮

<!-- 复选框 -->

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="篮球" />

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="足球" />

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="羽毛球" />

在这里插入图片描述

④ ImageView
(更换图片)

<!-- 图片显示 -->

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="图片"
        android:src="@drawable/img01" />

    <Button
        android:id="@+id/img_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="更换图片" />
        

//获取ImageView控件
		final ImageView img = (ImageView)findViewById(R.id.img);
		Button btn = (Button)findViewById(R.id.img_btn);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				img.setImageResource(R.drawable.ic_launcher);
				
			}
		});

在这里插入图片描述

点击更换图片按钮后在这里插入图片描述

⑤ ImageButton 图片按钮

⑥ TimePicker 时间选择器
用法类似

// 获取时间选择器
		TimePicker tp = (TimePicker) findViewById(R.id.tp);
		tp.setIs24HourView(true);// 设置为24小时制
		tp.setCurrentHour(12);// 设置当前显示的小时
		tp.setCurrentMinute(30);// 设置当前显示的分钟

在这里插入图片描述

⑦ DatePicker 日期选择器

⑧ Spinner 下拉列表框

⑨ ProgressBar 进度条
表示程序正在加载一些数据

 if (proBar.getVisibility() == View.VISIBLE) {// 获取进度条显示状态判断是否显示
 proBar.setVisibility(View.GONE);// 设置进度条显示状态为隐藏

显示 View.VISIBLE 隐藏 View.GONE (不占用控件空间) 或View.INVISIBLE (占用控件空间只是没显示)

<ProgressBar
style="?android:attr/progressBarStyleHorizontal"//设置进度条的样式
android:max="100"/>//给进度条设置一个最大值,然后在代码中动态更改进度条进度

4、数组的定义
在values目录中定义数组文件,文件中根节点表示以下的内容为数组,<string-array name=“ 数组名”>节点中的属性name为数组名 节点表示数组中的数据

<string-array name="citys">
        <item>北京市</item>
        <item>上海市</item>
        <item>广州市</item>
        <item>长沙市</item>
    </string-array>

5、对话框

警告框

// 警告框
Dialog dialog = new AlertDialog.Builder(this).setTitle("警告框".setIcon(R.drawable.ic_launcher).setMessage("今天天气真好").create();
dialog.show();

在这里插入图片描述

// 创建对话框

AlertDialog.Builder ab = new AlertDialog.Builder(ViewActivity.this);
//设置对话框信息
ab.setIcon(R.drawable.ic_launcher);
ab.setTitle("删除信息");
ab.setMessage("确定删除吗?");
// 确定按钮
ab.setPositiveButton("删除", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
	Toast.makeText(ViewActivity.this, "删除成功!", Toast.LENGTH_LONG).show();
			}
		});
// 普通按钮
ab.setNeutralButton
// 取消按钮
ab.setNegativeButton

效果圖:
6、ListView控件 列表视图
使用垂直列表的方式显示多个选项,每个列表项独占一行,每行的布局都相同
查看詳細用法

SimpleAdapter简单适配器
类的主要功能是将LIst集合的数据转换为ListView可以支持的数据

7.布局管理器

  • LinearLayout(线性布局):所有组件成单一的方向,即垂直或水平的(默认)
android:orientation="horizontal";//vertical垂直
android:layout_weight="1"//该属性控制水平和垂直方向某个控件所占的比例,可实现类似网页中框架布局的效果
  • FrameLayout(框架布局):容器为每个加入其中的控件创建一个空白的域,所有的组件放在左上角,一个覆盖一个。
  • RelativeLayout(相对布局):控件之间的位置是相对兄弟控件的位置或容器的位置。
  • TableLayout(表格布局):表格布局采用行列的形式来管理UI中的控件。
    要使用TableRow进行表格行的控制,之后所有组件要在TableRow中增加

第四章 数据的持久化

1、保存在内存中的数据是处于瞬时状态的,而保存在硬盘等存储设备中的数据是持久状态的
一、Android中数据持久化的方式
1、SharedPreferences存储
①一个轻量级的存储类,特别适合用于保存软件配置参数。(是用xml文件存放数据,文件存放在/data/data//shared_prefs目录下)提供一些基础的信息保存功能,所有信息按照“key=value”形式进行保存,保存信息是一些基本的数据类型,例如:int、boolean、float、long、String、StringSet

②得到SharedPreferences对象的方法:
a.Context类中的getSharePreferences()方法
此方法接收两个参数,第一个用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存在/data/data/< package name>/share_prefs/目录下的。第二个参数用于指定操作模式,目前只有MODE_PRIVATE一种可选,默认,和直接传入0效果相同,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。

b.Activity类中的getPreference()方法
这个方法和第一个相似,不过它只接收一个操作模式参数,因为使用这个方法会自动将当前活动的类名作为SharedPreferences文件名。

c.PerferenceManager类中getDefaultSharePreferences()方法
这是一个静态方法,它只接收一个Context参数,并自动使用当前程序的包名作为前缀来命名SharedPreferences文件。

③存储数据的步骤:
a.调用SharedPreferences()对象的edit()方法来获取一个SharedPreferences.Editor对象
b.向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用putString()方法…
c.调用commit()方法将添加的数据提交,从而完成数据存储操作

	// 保存信息
	Button btnS = (Button) findViewById(R.id.btnS);
	btnS.setOnClickListener(new OnClickListener() {

		@Override
		public void onClick(View v) {
			// 获取Context中的SharedPreferences.Editor对象
			SharedPreferences.Editor editor = getSharedPreferences(
						"editor", MODE_PRIVATE).edit();
			editor.putString("name", "张三丰");
			editor.putInt("age", 00);
			editor.putBoolean("married", true)
			// 提交数据
			editor.commit();
			Toast.makeText(SpreActivity.this, "保存成功", Toast.LENGTH_LONG)
						.show();
			}
		});
	// 读取信息
	Button btnL = (Button) findViewById(R.id.btnL);
	btnL.setOnClickListener(new OnClickListener() {

		@Override
		public void onClick(View v) {
			SharedPreferences editor = getSharedPreferences("editor",
						MODE_PRIVATE);
			// 读取数据
			String name = editor.getString("name", " ");
			int age = editor.getInt("age", 00);
			boolean married = editor.getBoolean("married", false);
			String info = "姓名:" + name + " 年龄:" + age + " 是否已婚:" + married;
			Toast.makeText(SpreActivity.this, info, Toast.LENGTH_LONG)
						.show();
			// 获取文本显示框,将信息显示到其中
			TextView tv = (TextView) findViewById(R.id.tv);
			tv.setText(info)
			}
		});

2、文件存储(I/O流存储)
Android在Context类中提供了存取文件的方法
public FileInputStream openFileInput(String name)设置要打开的文件输入流
public FileOutputStream openFileOutput(String name,int mode)

name:指定的文件名,不可以包含路径,所有文件都默认存储到data/data/(packgename)/files/目录下

mode:设置操作的模
MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可 以使用Context.MODE_APPEN
MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

除此之外,Context还提供了如下几个重要的方法:

getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目
File getFilesDir():获取该应用程序的数据文件夹得绝对路径    
String[] fileList():返回该应用数据文件夹的全部文件

3、SQLite数据库存储
①特点: SQLite的每个数据库都是一个文件
SQLite支持绝大部分SQL92命令,并提供简单事务功能

详细操作

二、数据查询
1、Cursor类存放查询的结果集,并提供了对结果集中的记录进行访问的方法。

三、ORM

使用ORM方法改写增删改操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值