[笔记][andriod开发]Activity的生命周期、常见布局、常见控件(单选,多选,弹出框,进度条,列表)
来源:互联网 发布:淘宝级别最高的店铺 编辑:程序博客网 时间:2024/06/08 09:28
【01.07~08】Activity的生命周期
1、Activity的七个生命周期
OnCreate
OnStart
OnResume
OnPause
OnStop
OnRestart
OnDestroy
有个传说中的示意图~:
教程里依旧是例子来说明的,这里就不搞了,基本上理解起来还是很方便的
1、创建两个Activity,Activity01和Activity022、启动Activity01,生命周期如下:OnCreate() //这个方法也复写过很多次了~需要呈现在这个Activity的控件注册和相关监听动作绑定都是在这个方法中实现OnStart()OnResume()3、点击Activity01中的按钮,到达Activity02此时,两个Activity的生命周期如下:Activity01--->OnPause()Activity02--->OnCreate()Activity02--->OnStart()Activity02--->OnResume()Activity01--->OnStop()*由于Activity02的出现完全遮盖了Activity01,就会有OnStop这个生命周期存在;如果说Activity02是一个非完全遮盖的Activity,比如一个对话框形式的Activity,那么Activity01的OnStop()周期则不会出现*OnPause()时,我们可以在这里存储用户之前输入的信息和动作等,以便用户回到此处能继续刚才的操作4、在Activity02点击返回按钮,则会回到Activity01此时,两个Activity的生命周期如下:Activity02--->OnPause()Activity01--->OnRestart()Activity01--->OnStart()Activity01--->OnResume()Activity02--->OnStop()Activity02--->OnDestroy()也就是说,返回之后,Activity02被销毁了
生命周期还是很好理解的~
下面说的是Task,一个堆栈形式的任务管理形式,将所有的Activity放在一个栈中,以后进先出的原理,在栈顶的永远都是当前呈现的Activity
接着说了一下对话框形式的Activity要怎么写~
也就是在AndroidMainfest.xml里注册Activity时,设置属性
android:theme = " @android:style/Theme.Dialog "
把上一次的计算器拿出来,设置一下,则如下:
在这种情况下,Activity01是没有OnStop()这个生命周期的
以上~
*这节课介绍到的SDK中的Docs,如果你用的是4.1以上的,可能会出现docs页面载入非常缓慢的情况,是因为天朝墙了某哥之后,有个js文件一直请求不到,于是就卡住了o(╯□╰)o。
网上搜了一下,有个批处理的
更简单的是,如果你的浏览器有相关的屏蔽插件,比如FireFox的Adblock插件,将这个js添加到Adblock的屏蔽名单中即可(http://www.google.com/jsapi),本地打开又恢复了速度~
【01.09-01.11】Activity的布局
1、LinearLayout 线性布局,有前端基础的看这个应该很容易,分为水平布局和垂直布局= =其余不多说了。。
2、TableLayout 表格布局
嵌套如下TabelLayoutTableRowTextView(或者其他控件,也可以TableLayout有一个属性为android:stretchColumns="1",也就是说以第1列自动拉伸(列序号是从0开始的,从视觉上看应该是第二列),别的列自适应内容宽度
3、RelativeLayout 相对布局
呃,这三课有前端经验的基本不用看,非常好理解,主要在于属性较多,使用时多查查文档
【01.12】常用控件2~
1、RadioGroup和RadioButton
2、CheckBox
3、Toast(谷歌太吃货……
目标:
下面是制作步骤[´・ω・`]
1、创建一个工程,并将控件都部署上去,用的是线性布局
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"xmlns:tools= "http://schemas.android.com/tools"android:orientation= "vertical"android:layout_width= "match_parent"android:layout_height= "match_parent" ><TextViewandroid:id ="@+id/textView1"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:text ="@string/show_label" /><RadioGroupandroid:id ="@+id/sexgroup"android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:orientation = "horizontal" >< RadioButtonandroid:id ="@+id/famale"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:text ="@string/radio_famale"/>< RadioButtonandroid:id ="@+id/male"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:text ="@string/radio_male"/></RadioGroup ><CheckBoxandroid:id ="@+id/read"android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:text ="@string/checkbox_read" /><CheckBoxandroid:id ="@+id/sleep"android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:text ="@string/checkbox_sleep" /><CheckBoxandroid:id ="@+id/eat"android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:text ="@string/checkbox_eat" /></ LinearLayout>
2、在Activity07中的控件创建和事件注册
package com.example.activity07;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.Toast;public class Activity07 extends Activity { //声明 private RadioGroup radioSex = null; private RadioButton radioFamale = null; private RadioButton radioMale = null; private CheckBox read = null; private CheckBox sleep = null; private CheckBox eat = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity07); //获得控件对象 radioSex = (RadioGroup)findViewById(R.id.sexgroup); radioFamale = (RadioButton)findViewById(R.id.famale); radioMale = (RadioButton)findViewById(R.id.male); read = (CheckBox)findViewById(R.id.read); sleep = (CheckBox)findViewById(R.id.sleep); eat = (CheckBox)findViewById(R.id.eat); //RadioGroup对象的监听器 radioSex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { //一个匿名内部类 public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub if(radioFamale.getId() == checkedId){ Toast.makeText(Activity07.this, "famale", Toast.LENGTH_SHORT).show(); } else if(radioMale.getId() == checkedId){ Toast.makeText(Activity07.this, "male", Toast.LENGTH_SHORT).show(); } } }); //Checkbox对象的监听器 read.setOnCheckedChangeListener(new checkboxclick()); sleep.setOnCheckedChangeListener(new checkboxclick()); eat.setOnCheckedChangeListener(new checkboxclick()); } class checkboxclick implements OnCheckedChangeListener{ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked){ Toast.makeText(Activity07.this, "checked", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(Activity07.this, "false", Toast.LENGTH_SHORT).show(); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity07, menu); return true; }}
结果
写的时候借助于提示信息,还是比较容易的,主要是相关监听器可能不是很清楚,所以还是多查查Api哦
【01.13】常见控件3
1、ProgressBar
2、ListView
ProgressBar实例
1、创建一个应用,并布局
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"xmlns:tools= "http://schemas.android.com/tools"android:layout_width= "match_parent"android:layout_height= "match_parent"android:orientation= "vertical" ><ProgressBarandroid:id ="@+id/progressOne"style= "?android:attr/progressBarStyle"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:visibility ="gone" /><ProgressBarandroid:id ="@+id/progressTwo"style= "?android:attr/progressBarStyleHorizontal"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:visibility ="gone"android:max ="10" /><Buttonandroid:id ="@+id/mybutton"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:text ="@string/button" /></ LinearLayout>
需要注意到几个属性
style,进度条的样式不止这两种- -可以从可视布局看到,起码有四种android:max是进度条的最大值,也可以在函数中设置
2、对象创建和事件绑定
package com.example.activity08;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.*;public class ProgressActivity extends Activity { private ProgressBar pone = null; private ProgressBar ptwo = null; private Button mybt = null; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_progress ); //创建控件对象 pone = (ProgressBar)findViewById(R.id. progressOne); ptwo = (ProgressBar)findViewById(R.id. progressTwo); mybt = (Button)findViewById(R.id. mybutton); //绑定对应监听器 mybt .setOnClickListener( new buttonClick()); } private int i = 0; class buttonClick implements OnClickListener{ public void onClick(View v) { // TODO Auto-generated method stub if (i ==0){ //显示进度条 pone .setVisibility(View. VISIBLE); ptwo .setVisibility(View. VISIBLE); } else if ( i<10){ //转圈圈进度 默认如下,不需要写 //pone.setProgress(i); //横向进度条,包括第一进度,和第二进度,可以区分不同任务的进度 ptwo .setProgress(i ); ptwo .setSecondaryProgress(i +1); } else { pone .setVisibility(View. INVISIBLE); ptwo .setVisibility(View. INVISIBLE); } i ++; } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu. activity_progress , menu); return true ; }}
下面是至今为止遇到的最复杂的一个控件~ListView
1、照旧,创建一个应用,这个控件是需要分成两个部分来处理,一个是主界面,一个是ListView里的单个对象
activity_listview.xml
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"xmlns:tools= "http://schemas.android.com/tools"android:layout_width= "fill_parent"android:layout_height= "fill_parent"android:orientation= "vertical" ><ListViewandroid:id ="@id/android:list"android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:drawSelectorOnTop ="false"android:scrollbars ="vertical" ></ListView ></ LinearLayout>
这里一个新的属性android:drawSelectorOnTop ="false"这是一个长按下会用到的属性如果设置成true则如下设置成false的话,背景色会在文字下面,文字可见
item.xml
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"xmlns:tools= "http://schemas.android.com/tools"android:layout_width= "fill_parent"android:layout_height= "fill_parent"android:paddingLeft= "10dip"android:paddingRight= "10dip"android:paddingTop= "1dip"android:paddingBottom= "1dip"android:orientation= "horizontal" ><TextViewandroid:id ="@+id/item_name"android:layout_width ="80dip"android:layout_height ="30dip"android:textSize ="20sp"android:singleLine ="true" /><TextViewandroid:id ="@+id/item_price"android:layout_height ="fill_parent"android:layout_width ="fill_parent"android:gravity ="right"android:textSize ="20sp" /></ LinearLayout>
2、在ListviewActivity.java中
package com.example.hellolistview;import java.util.ArrayList;import java.util.HashMap;import android.os.Bundle;import android.app.ListActivity;import android.view.View;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;public class ListviewActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout. activity_listview ); //创建一个list,用另外一种视角看,相当于JSON数据的样子ORZ ArrayList<HashMap<String,String>> list= new ArrayList<HashMap<String,String>>(); //创建list中的每个数据对对象 HashMap<String, String> item1 = new HashMap<String, String>(); HashMap<String, String> item2 = new HashMap<String, String>(); HashMap<String, String> item3 = new HashMap<String, String>(); //给数据对赋值 item1.put( "item_name" , "面包" ); item1.put( "item_price" ,"$10" ); item2.put( "item_name" , "蛋糕" ); item2.put( "item_price" ,"$15" ); item3.put( "item_name" , "布丁" ); item3.put( "item_price" ,"$20" ); //将数据添加到list中 list.add(item1); list.add(item2); list.add(item3); //创建一个数据适配器,参数分别是对象,数据来源,数据显示 xml对象,键值对象,显示键值的控件对象 SimpleAdapter adapter = new SimpleAdapter( this , list, R.layout. item , new String[] {"item_name" , "item_price"}, new int [] {R.id. item_name,R.id. item_price }); //将数据加到listview 控件中 setListAdapter(adapter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); Toast. makeText(ListviewActivity. this, id+ "," +position, Toast.LENGTH_SHORT ).show(); }}
需要注意的是,这次继承于ListActivity类,而不是一贯的Activity= =
实际上setContentView写不写无所谓,因为最后是由适配器来创建这个对象的
理解list还是有点绕,多想想JSON和图,应该能快点消化,
首先需要创建一个ArrayList对象,再创建对象中的每个数据对象,对应数据键值赋值后放入ArrayList对象中;再由适配器将数据和显示资源联系起来,并加载到主界面中
运行如下
- [笔记][andriod开发]Activity的生命周期、常见布局、常见控件(单选,多选,弹出框,进度条,列表)
- Activity常见的生命周期分析
- Activity中常见的控件
- andriod的activity的生命周期
- Activity的生命周期及安卓中常见情况的生命周期走向
- Andriod的activity生命周期分析
- 【Andriod基础】Activity的生命周期
- html 常见列表控件
- [笔记][andriod开发]基本控件和Activity基础
- MUI H5+常见控件的使用之单选按钮
- 常见的布局或控件问题
- Android笔记之Android基本控件布局与Activity的生命周期
- 常见布局&控件——收缩框
- android中常见Dialog格式显示(普通,列表,单选,多选,可编辑等)
- Activity生命周期、启动方式及常见Activity
- 【Andorid学习笔记】常见的UI布局
- WEB前端开发常见的布局方法
- android常见控件与布局
- C#堆和堆栈有什么区别
- Activity的四种加载模式
- C++笔记(一、二)
- Extjs4.1插件开发总结(扩展主题风格选择框)
- Mina 2.0 如何调整并发效率
- [笔记][andriod开发]Activity的生命周期、常见布局、常见控件(单选,多选,弹出框,进度条,列表)
- HDOJ 1431 素数回文
- jquery读取xml文件&js读取xml文件
- Cassandra维护数据一致性的策略
- nmon工具
- 小哲理
- Struts的令牌机制
- !!!Chapter 14 Overloaded Operations and Conversions (14.6 ~ 14.9)
- 程序员面试题精选100题(34)-数组中只出现一次的数字