http://gqdy365.javaeye.com/blog/861047
getTag()取得标签
成员变量可以先使用,后定义
在Java中标示符只能是以字符、“$”或者“_”开头
在Java中布尔类型的值不能为0、-1等其它值,只能为true或false。这点与C语言是不同的
Java中用String来定义一个字符串,其类型为类类型
Java数据类型(原始数据类型):
布尔类型:boolean
字符类型:char
整数类型:byte(1),short(2),int(4),long(8)
浮点类型:float(4)
双精度类型:double(8)
Java中的标示符是可以用中文的
定义原始数据类型变量时,程序为该变量分配内存空间;定义非原始数据类型变量时,程序并不为该变量分配类变量所需要的内存空间。因为该变量的数据并不是相应类对象的数据,而只是定义了一个引用变量,用来指向真正的具体对象。
在Java中产生一个真正的对象为对象分配内存空间是通过new方法来产生的。
Java中不用担心内存泄漏?所以不用析构函数?
对于非原始数据的“=”操作,如Personal 李四 = 张三;//这样张三和李四都是指向同一地址空间
Int [ ]3 int 3[ ] 这两种定义方法都可以
多维数组:必须指定第一维的长度
赋值操作:
“=”表示将等号右边的变量的值或计算的结果复制到左边。注意是复制,所以,如果是原始数据类型,表示将其值,即变量中存放的数据复制到新的变量中去;非原始数据类型变量,引用也相同,复制的是引用的值,是一个地址,而不是复制引用所指向的对象,在函数调用时,执行的也是赋值操作,把实际的参数的值赋给函数的形参。
不同数据类型进行数学运算时,会发生类型转换
在Java中所有的整数都是带符号的,没有无符号整数。
Java也支持变量的自增自减操作
比较符号两边斩数据返回一个布尔值true或者false
循环的标签:
ABC: while(…) {
…..
for(;…;)
if(….) break ABC; //break后面使用循环标签,跳出了while层循环
}
abc: do {
…..
while(….) {
…
if(…) continue abc; //continue到外部循环
}
}
Java的构造函数不需要也不能使用void说明
有时用This来区分要访问的是对象的属性还是局部变量
构造函数的重载可以通过this关键字来相互调用,但this语句调用只能放在函数的第1行
静态函数和变量
静态函数和方法是所有对象共享的
静态函数中不能访问非静态的成员变量
通过静态初始化程序块来为静态变量设置初始化值
静态初始化程序块:
Static {
….
}
静态初始化程序块中只能访问静态的函数或者变量
函数和属性的隐藏只能是相对于另一个类来说的,在类本身不存在隐藏的概念,就像人不能对自己隐藏什么
Java中所有函数都属于类,main函数也是属于类本身函数
Java中继承通过关键字extends来实现
对象的构造函数是不被继承的,其他的属性和方法都能够被继承
子类可以继承父类的protected方法,这时子类和父类可以不在同一个包内。但如果父类和子类不在同一个包内,则子类不能访问父类的默认方法和属性
如果一个类只有不带参数的构造函数时,其子类一定要定义一个构造函数,在该函数中明显地调用父类的构造函数。子类调用父类的构造函数,通过super关键字来实现
在Java中继承是单继承,即一个子类只能有一个父类。
在Java中,可以通过接口的方式来实现多重继承
在Java中,可以通过instanceof这个关键字来判断一个对象属于什么类的对象,如果是,则返回true,否则返回布尔值false
函数的覆盖要求子类和父类的两个函数的名字相同,参数列表相同,返回值相同,抛出的异常也相同。
覆盖时,让子类的覆盖父类的函数,它的可访问性更好,即如果父类的函数是public的,子类一定要是public的;如果父类的要覆盖的函数是private的,子类可以定义为public、protected、default、和private的。可访问性由高到低为:public,protected,default,private
Final变量:就是常量,不能被改变;final的函数是最终函数,不能够被子类覆盖;final的类是最终类,不能有子类
Final有点像C/C++中的const
在Java中,局部变量没有赋初值前,是不能够访问的,而成员变量会自动初始化为0或者NULL,可以没有赋初值就访问,但是final的成员变量是不行的,在访问前必须在程序中显示赋值
Final类:不能再派生出子类
抽象类:不能产生对象
Abstract class aaa {
}
抽象函数:只定义函数名字、参数列表、返回值和访问控制符,但没有具体实现,这就是抽象函数。 在一个类中,有多个非抽象的函数,但只要有一个抽象函数,这个类也是抽象类。
(interface)接口:里面所有的函数都是抽象函数,没有非抽象的函数。 继承这样的类,也不再称为继承,而称为实现(implements)
通过接口可以实现多继承,即一个类可以实现多个接口
接口是公开的、没有实现的,所有接口中的方法全部默认是public的,不能定义为其他访问类型,同样,在接口里的方法都是抽象的,所以可以默认abstract关键字,同时也不能在接口中有任何的非抽象的方法
在接口中,方法不能被除public以外的访问控制,同时也不能有函数体,也不能有静态的函数定义。
在接口中是可以有属性的,即成员变量,但成员变量默认的都是public static final的,即静态常量
Java中的所有类必会生成class文件
Object类:
toString方法:将一个对象转换为字符串,其默认实现是返回:类的名字@哈西码
import类似于C中的extern?
Android
E2ECloud
Eclipse: http://www.eclipse.org/downloads/
Android SDK: http://developer.android.com
安装Android SDK:
1、如安装到E:/android/android-dev/android15目录中
2、要为Android的运行设置环境变量,在Windows下选择开始->设置->控制面板->系统->高级->环境变量,在环境变量对话框中选择编辑Path进行编辑,加一个分号“;”,再输入E:/android/android-dev/android15/tools
一旦确定了你的应用程序中需要的组件,那么就应该在AndroidManifest.xml中声明它们。
应用程序基本组件:
Activity、Service、BroadcastReceiver、ContentProvider
onCreate(), onStart(), onResume()是系统提供的回调方法
res :resorce
把资源文件放到res目录下
在程序中引用资源:语法:android.R.resource_type.resource_name
在资源中引用其它资源: @[resource_type]/[resource_name]
Android平台中常用的可视化控件:
TextView,ImageView,CheckBox,RadioButton,Button,ImageButton,EditText,ToggleButton,AnalogClock,DigitalClock
@Override表示什么?
Intentr主要组成部分:组件名称,Action(动作),Data(数据),Category(类别),Extra(附加信息)和Flag(标志位)
Fill_parent,表示填满父控件的空白
Wrap_content,表示大小刚好足够显示当前控件里的内容
super.onCreate(savedInstanceState); //super???
Super表示父类!
子对象调用父对象的方法用super;
子对象调用父对象的构造方法也用super;
不过调用父类构造方法的时候 super要写在子类构造函数的第一行!
SlidingDrawer
MenuItem
Final int MENU_SAVE = Menu.FIRST;
Final int MENU_DELETE = Menu.FIRST+1;
@Override
Public Boolean onCreateOpionsMenu(Menu menu){
Menu.add(0,MENU_SAVE,0,”保存”)
.setIcon(android.R.drawable.ic_menu_save);
Menu.add(0,MENU_DELETE,0,”删除”) //没有;号
.setIcon(android.R.drawable.ic_menu_delete);
return true;
}
Add()方法会返回一个菜单的实例(MenuItem),我们可以通过这个实例对菜单项进一步设置。如上一个例子中,我们就直接通过MenuItem调用了setIcon()的方法来设置显示的图标。
监听菜单项单击:设置方法如下:
(1) 首先定义一个监听器的对象
OnMenuItemClickListener lsn = new OnMenuItemClickListener() {
@Override
Public Boolean onMenuItemClick(MenuItem item) {
….//根据item获取的id判断哪个菜单项被单击了并处理
Return true;
}
}
(2) 然后用MenuItem的实例调用设置监听器的方法
menuItem.setOnMenuItemClickListener(lsn);
D:/work/Android/SDK/Android-sdk-2.1/tools android.bat
从新new一个, 256 start
http://code.google.com/androidbmi/wiki/AndroidLogic…
子菜单是可以被添加到其他菜单上的菜单,不过子菜单不能添加到子菜单上。
SubMenu sub = menu.addSubMenu(“搜索”);
这里的addSubMenu()方法返回一个子菜单项的实例,通过这个实例我们就可以给这个子菜单添加菜单项了。Sub.add(0,MENU_LOCAL,0,”本地”);
Sub.add(0,MENU_INTERNET,0,”网络”);
OnCreate()方法用于初始化Activity:填充界面,为界面控制分配数据,创建服务和线程。Oncreate()方法的参数Bundle对象包含了上一次在OnSaveInstanceState()调用时保持的用户界面信息,正确使用Bundle参数可以恢复上一次用户界面的状态。
getApplication()得到当前应用对象的句柄。
其实Launcher.java这个文件中,整个文件的内容就是一个大的Launcher类!
Launcher就相当于一个桌面
ADT:Android Development Tools
Android SDK中的例子:
1、 HelloLinearLayout
main.xml 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" >
<TextView
android:text="red"
android:gravity="center_vertical"
android:background="#aa0000"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"/>
<TextView
android:text="green"
android:gravity="center_vertical"
android:background="#00aa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="2"/>
<TextView
android:text="blue"
android:gravity="center_vertical"
android:background="#0000aa"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="3"/>
<TextView
android:text="yellow"
android:gravity="center_vertical"
android:background="#aaaa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="4"/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView
android:text="row one"
android:textStyle="italic"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row two"
android:textStyle="italic"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row three"
android:textStyle="italic"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row four"
android:textStyle="italic"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
android:layout_weight="1"
weight的值要看你看什么方向来的,是v还是h。 weitht的值大小表示占了总数的多少份。
如以上一个例了子中,red占1份,green占2份,blue占3份,yellow占4份
还有一个要注意的地方:两个子LinearLayout都是:android:layout_width="fill_parent"
android:layout_height="fill_parent"
Java代码:
HelloLinearLayout.java
package com.studio.android.HelloLinearLaout;
import android.app.Activity;
import android.os.Bundle;
public class HelloLinearLaout extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
看看运行的效果:用Prt Scr Sys Rq
(当你觉得屏幕上有精彩画面的时候,快速按下 Print screen sysRq 键,这个键相当于相机快门(这个键键盘上都有,一般在方向键上部)。然后你进入画图软件 ;
按下CTRL+V(粘贴)就OK了)
SDK例子2:
HelloRelativeLayout
1、
@+id 新增一个资源id
@id和android:id,引用现有的资源id
2、
android:paddingLeft与android:layout_marginLeft的区别
当按钮分别设置以上两个属性时,得到的效果是不一样的。
android:paddingLeft="30px"
按钮上设置的内容(例如图片)离按钮左边边界30个像素
android:layout_marginLeft="30px"
整个按钮离左边设置的内容30个像素
3、
以下部分内容来自网上:
我们从RalativeLayout可以知道,该布局的父子Container中所有的Widgets之间的位置都是相对的。你可以把Widget A放在Widget的左下方,
或者放在Widget的底边并和Container的底边之间。它允许为Container或者widget指定其相对于其他widgets或者父Container
的位置。Container或者widgets是按顺序排列的,如果第一个Container或者widget在屏幕的中央,那么相对于其
的其他Container和widgets将以屏幕的中央来排列。如果使用XML的Layout文件来定义,被引用的Container或者widgets必须被定义。
在XML的layout文件中,我们就能够引用同一文件的Widgets,并且可以标识其他Widgets的相对位置。
标识一个Widgets在其Container中的位置,我们有下面的属性参数可以用,这些参数的值可以使true或者false:
1).android:layout_alignParentTop: 表示widget的顶部和Container的顶部重合。
2).android:layout_alignParentBottom: 表示widget的底部和Container的底部重合。
3).android:layout_alignParentLeft: 表示widget的左边和Container的左边重合。
4).android:layout_alignParentRight: 表示widget的右边和Container的右边重合。
5).android:layout_centerHorizontal: 表示widget处于Container水平方向上的中间。
6).android:layout_centerVertical: 表示widget处于Container垂直方向上的中间。
7).android:layout_centerInParent: 表示widget处于Container平面上的正中间。
标识同一个Container中的不同的widgets之间的相对位置时,可有用如下的属性参数,参数值是其他widgets的应用。相对
位置上的widgets的引用的设定如下:首先必须给所有的被引用的widgets赋予标示符,通过android:id的属性,
格式如@+id/widget1,然后在其他widget引用的时候使用同样的标示符,格式如@id/widget1,例:如果widget A标识为@+id/widget A,
则widget B在其属性里面通过@id/widget A引用widget A。
1).android:layout_above: 表示该widget必须位于参数值标识的widget的上方。
2).android:layout_below: 表示该widget必须位于参数值标识的widget的下方。
3).android:layout_toLeftOf: 表示该widget必须位于参数值标识的widget的左方。
4).android:layout_toLeftOf: 表示该widget必须位于参数值标识的widget的右方。
5).android:layout_alignTop: 表示该widget的顶部必须参数值标识的widget的顶部重合。
6).android:layout_alignBottom: 表示该widget的底部必须参数值标识的widget的底部重合。
7).android:layout_alignLeft: 表示该widget的左边必须参数值标识的widget的左边重合。
8).android:layout_alignRight: 表示该widget的右边必须参数值标识的widget的右边重合。
9).android:layout_alignBaseLine: 表示该widget的BaseLine必须参数值标识的widget的BaseLine重合。这个主要用于Label或者其他包含文本的widgets。
HelloRelativeLayout
main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/lable"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Type Here:"/>
<EditText
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lable"/>
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ok"
android:layout_below="@id/entry"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="cancle"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok"/>
</RelativeLayout>
Java代码如下:
package com.studio.android.HelloRelativeLayout;
import android.app.Activity;
import android.os.Bundle;
public class HelloRelativeLayout extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
看看效果:
The children of a TableLayout cannot specify the layout_width
attribute. Width is always MATCH_PARENT
. However, the layout_height
attribute can be defined by a child; default value is WRAP_CONTENT
. If the child is a TableRow
, then the height is always WRAP_CONTENT
.
TableLayout和我们平时在网页上见到的Table有所不同,TableLayout没有边框的,它是由多个TableRow对象组成,每个TableRow可以有0个或多个单元格,每个单元格就是一个View。这些TableRow,单元格不能设置layout_width,宽度默认是fill_parent的,只有高度layout_height可以自定义,默认是wrap_content。
单元格可以为empty,并且通过android:layout_column可以设置index值实现跳开某些单元格。在TableRow之间,添加View,设置layout_height以及背景色,就可以实现一条间隔线。android:layout_span可以设置合并几个单元格:
.xml中注释: <!--xxxxxx -->
android:stretchColumns=”1″> 第二列自动伸展
android:padding=”3dip” /> 元素内容与边界之间保留3dip的距离
android:layout_column="1"//告诉别人,我是第二列!?
表格布局TableLayout以行列的形式管理子元素,每一行是一个TableRow布局对象,当然也可以是普通的View对象,TableRow里每放一个元素就是一列,总列数由列数最多的那一行决定。
今天遇到一个低级错误:unbound prefix
<TextView
android:layout_column="1"
android:text="Save..."
andriod:padding="3dip"/>
错误原因:把android写成了andriod!!!!!
HelloTableLayout1
main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1" //第二列可扩展
>
<TableRow>
<TextView
android:layout_column="0" //我是第1列
android:text="Open..."
android:padding="3dip"/>
<TextView
android:text="Ctrl+O"
android:padding="3dip"
android:gravity="right"/>
</TableRow>
<TableRow>
<TextView
android:layout_column="1" //我是第二列
android:text="Save..."
android:padding="3dip"/>
<TextView
android:text="Ctrl+S"
android:padding="3dip"
android:gravity="right"/>
</TableRow>
<TableRow>
<TextView
android:layout_column="1" //我是第二列
android:text="Save as..."
android:padding="3dip"/>
<TextView
android:text="Ctrl+Shift+S"
android:padding="3dip"
android:gravity="right"/>
</TableRow>
<View
android:layout_height="5dip"
android:background="#FF909090"/>
<TableRow>
<TextView
android:text="X"
android:padding="3dip"/>
<TextView
android:text="Import..."
android:padding="3dip"/>
</TableRow>
<TableRow>
<TextView
android:text="E"
android:padding="3dip"/>
<TextView
android:text="Export..."
android:padding="3dip"/>
<TextView
android:text="Ctrl+E"
android:padding="3dip"
android:gravity="right"/>
</TableRow>
<View
android:layout_height="2dip"
android:background="#FF909090"/>
<TableRow>
<TextView
android:text="Quit"
android:padding="3dip"/>
</TableRow>
</TableLayout>
Java代码如下:
package com.studio.android.HelloTableLayout1;
import android.app.Activity;
import android.os.Bundle;
public class HelloTableLayout1 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
看看效果:
一个ListView显示出来需要3个东西:
1,listview(用来显示数据的列表)。
2,Data(需要显示的数据)。
3,一个绑定Data和Listview的适配器ListAdapter。
1. // 设置淡入和淡出的动画效果
2. Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
3. Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
4. switcher.setInAnimation(in);
5. switcher.setOutAnimation(out);
HelloListView1:
Main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp"
/>
Java代码如下:
package com.studio.android.HelloListView1;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class HelloListView1 extends ListActivity {
/*静态数组数据*/
String [] weekStrings = new String [] {
"星期日","星期一","星期二","星期三","星期四","星期五","星期六"
};
/*定义一个数组适配器adapter*/
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*构造适配器*/
adapter = new ArrayAdapter<String>(this,R.layout.main,weekStrings);
/*设置适配器*/
this.setListAdapter(adapter);
}
}
运行效果:
HelloListView2:
Q1:
调用getListView()将返回ListActivity里的ListView控件
Q2:
setTextFilterEnabled:
在任何一个listview中都有这种功能,就是是否允许输入word,来过滤列表内容
Q3:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
});
这一段代码是重新实现lv的setOnItemClickListener这个函数?
Q4:
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show()
这个show()是Toast的呢?还是makeText返回值的show()呢?
Q5:
Toast用于向用户显示一些帮助/提示
Q6:
String [] countries = new String [] = {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra"
};这样是错的、!!多了人“=”号!!!W
main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp"
/>
Java代码:
package com.studio.android.HelloListView2;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.view.View;
public class HelloListView2 extends ListActivity {
String [] countries = new String []{
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
"1Bahrain", "1Bangladesh", "1Barbados", "2Belarus", "2Belgium",
"3Belize", "3Benin", "Chile", "China"
};
ArrayAdapter<String> adapter; /*在这里定义adapter*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new ArrayAdapter<String>(this,R.layout.main,countries);
this.setListAdapter(adapter);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?>parent,View view,int position,long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(),((TextView)view).getText(),Toast.LENGTH_SHORT).show();
}
});
}
}
刚开始出来的效果是:
有过滤功能:如按一下键盘上的1就出来
如按一下键盘上的2就出来
HelloGridView
Q1、
ridView - 网格控件
numColumns="auto_fit" - 列数自适应
stretchMode - 缩放模式(stretchMode="columnWidth" - 缩放与列宽大小同步)
Q2、NULL cannot be resolved
在Java中NULL不是null
在Java中要写在小写null
Q3、程序force close 原因之一:
将GridView gridview = (GridView)findViewById(R.id.gridview); 写成了
GridView gridview = (GridView)findViewById(R.layout.main);
Java代码:
package com.studio.android.HelloGridView1;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.GridView;
import android.widget.BaseAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class HelloGridView1 extends Activity {
/** Called when the activity is first created. */
//PNGNUM用以显示,当点击第xxx张图片时,让Toast显示picture xxx
String [] PNGNUM = new String [] {
"picture 1", "picture 2","picture 3","picture 4","picture 5","picture 6"
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTitle("mygridview");//设置标题
GridView gridview = (GridView)findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));// 指定网格控件的适配器为自定义的图片适配器
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?>parent, View view, int position, long id) {
Toast.makeText(HelloGridView1.this, PNGNUM[position],Toast.LENGTH_SHORT).show();
}//HelloGridView1.this???
});
}
// 自定义的图片适配器
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c){
mContext = c;
}
public int getCount(){
return mThumbIds.length;
}
public Object getItem(int position){
return null;
}
public long getItemId(int position){
return 0;
}
public View getView(int position, View convertView, ViewGroup parent){
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85,85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
//当convertView不为空,此时可以仅仅改变convertView的内容再直接返回convertView
imageView = (ImageView) convertView;
}
//设置图片来源,也就是该imageView对象的图片内容是什么
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
//网格控件所需图片数据的数据源
private Integer [] mThumbIds = {
R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6
};
}
}
main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:gravity="center"
android:columnWidth="90dp"
/>
效果:
刚出来时:
点击一下:出来“picture 1”
再第5张图片上点击,则出来picture 5
HelloDatePicker
Q1、Calendar rightNow = Calendar.getInstance() //取得当前的日期
Q2、一般用法是showDialog(ID) 然后重载onCreateDialog】
Q3、protected Dialog onCreateDialog (int id)
If you use showDialog(int)
, the activity will call through to this methodthe first time, and hang onto it thereafter
Q4、java中stringBuilder的用法
Java代码:
package com.studio.android.HelloDatePicker;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
public class HelloDatePicker<stringBuilder> extends Activity {
final int DIALOG_DATEPICKER = 1;
Calendar c;
TextView mShowDate;
Button mPickDate;
private int year;
private int month;
private int day;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTitle("Date and Time");
// capture our View elements
mShowDate = (TextView) findViewById(R.id.showDate);
mPickDate = (Button) findViewById(R.id.pickDate);
// get the current date
c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DATE);
// display the current date (this method is below)
updateShow();
mPickDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DIALOG_DATEPICKER);//一个showDialog与一个onCreateDialog对应;
} //也就是说调用一次showDialog就会调用一次onCreateDialog?!
}
);
}
@Override
protected Dialog onCreateDialog (int id){
switch (id) {
case DIALOG_DATEPICKER:
return new DatePickerDialog(this,
new OnDateSetListener(){
@Override
// the callback received when the user "sets" the date in the dialog
public void onDateSet(DatePicker v, int y, int m, int d) {
year = y;
month = m;
day = d;
updateShow();
}
},year,month,day);
default:
return null;
}
}
private void updateShow() {
StringBuilder sb1 = new StringBuilder().append(month+1).append("-")
.append(day).append("-")
.append(year).append(" Happy Everyday!");
mShowDate.setText(sb1);
}
}
main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/showDate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
<Button
android:id="@+id/pickDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="change the date"
/>
</LinearLayout>
运行效果:
刚出来时:
点击change the date后
HelloTimePicker
Q1: 六点零八分6:08 以下这段代码就是解决这个问题的
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
Q2、R.id.xxxx cannot be resovled
gen目录中没有R.java是怎么回事?
Java代码:
package com.studio.android.HelloTimePicker1;
import java.util.Calendar;
//import android.R;//把这个去掉,然后保存
import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
public class HelloTimePicker1 extends Activity {
final int TIME_DIALOG_ID = 0;
Calendar c;
private TextView mShowTime;
private Button mPickTime;
private int hour;
private int minu;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//setContentView(R.layout.main);
setTitle("TIME");
// capture our View elements
mShowTime = (TextView) findViewById(R.id.showTime);
mPickTime = (Button) findViewById(R.id.pickTime);
// get the current time
c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
minu = c.get(Calendar.MINUTE);
updateTime();
// add a click listener to the button
mPickTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(TIME_DIALOG_ID);
}
});
}
protected Dialog onCreateDialog (int id) {
switch (id) {
case TIME_DIALOG_ID:
return new TimePickerDialog(this,
new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int h, int m){
hour = h;
minu = m;
updateTime();
}
},hour,minu,false);
default:
return null;
}
}
// updates the time we display in the TextView
private void updateTime() {
StringBuilder sb1 = new StringBuilder().append(pad(hour)).append(":")
.append(pad(minu)).append(" What time is it now?");
mShowTime.setText(sb1);
}
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
}
main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/showTime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" "
/>
<Button
android:id="@+id/pickTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="change the time"
/>
</LinearLayout>
效果:刚出来时
点击“change the time”后:
Launcher2:
为打开新Activity动作添加动画效果
overridePendingTransition()
http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html
Duration[long] | 属性为动画持续时间 | 时间以毫秒为单位 |
LauncherModel.java
LauncherModel用来保存launcher所有运行时的变量到内存中,并提供数据库相关借口方便参数操作。系统一般只有一个Launchermodel,保证正常显示。
数据库操作就在LauncherProvider.java中.
Launcher.java
public void onClick(View v) {
Object tag = v.getTag(); //取得标签
if (tag instanceof ShortcutInfo) {//如果是快捷键
// Open shortcut
final Intent intent = ((ShortcutInfo) tag).intent;
int[] pos = new int[2];
v.getLocationOnScreen(pos);
intent.setSourceBounds(new Rect(pos[0], pos[1],
pos[0] + v.getWidth(), pos[1] + v.getHeight()));
startActivitySafely(intent, tag);
} else if (tag instanceof FolderInfo) {//如果是文件夹
handleFolderClick((FolderInfo) tag);
} else if (v == mHandleView) {//如果是HandleView
if (isAllAppsVisible()) {
closeAllApps(true); //退出 fade out
} else {
showAllApps(true);
}
}
}
public boolean isAllAppsVisible() {
return (mAllAppsGrid != null) ? mAllAppsGrid.isVisible() : false;
}
void showAllApps(boolean animated) {
mAllAppsGrid.zoom(1.0f, animated);
((View) mAllAppsGrid).setFocusable(true);
((View) mAllAppsGrid).requestFocus();
// TODO: fade these two too
mDeleteZone.setVisibility(View.GONE);
}
void closeAllApps(boolean animated) {
if (mAllAppsGrid.isVisible()) {
mWorkspace.setVisibility(View.VISIBLE);
mAllAppsGrid.zoom(0.0f, animated);
((View)mAllAppsGrid).setFocusable(false);
mWorkspace.getChildAt(mWorkspace.getCurrentScreen()).requestFocus();
}
}
AllApps2D.java
/**
* Zoom to the specifed level.
*
* @param zoom [0..1] 0 is hidden, 1 is open
*/
public void zoom(float zoom, boolean animate) {
// Log.d(TAG, "zooming " + ((zoom == 1.0) ? "open" : "closed"));
cancelLongPress();
mZoom = zoom;
if (isVisible()) {
getParent().bringChildToFront(this);
setVisibility(View.VISIBLE);
mGrid.setAdapter(mAppsAdapter);
if (animate) {
startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.all_apps_2d_fade_in));
} else {
onAnimationEnd();
}
} else {
if (animate) {
startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.all_apps_2d_fade_out));
} else {
onAnimationEnd();
}
}
}
protected void onAnimationEnd() {
if (!isVisible()) {
setVisibility(View.GONE);
mGrid.setAdapter(null);
mZoom = 0.0f;
} else {
mZoom = 1.0f;
}
mLauncher.zoomed(mZoom);
}
public boolean isVisible() {
return mZoom > 0.001f;
}