Android 用户界面(一)

  Android的APP的是用Java写的,运行在Dalvik虚拟机上,还有,Android的系统是基于Linux Kernel 2.6的。一个Android应用程序,用户界面是由View和ViewGroup对象构成的。
1} View
 任何一个View对象都将继承android.view.View类,它是一个存储在屏幕上特定的一个矩形布局和内容属性的数据结构。一个View对象可以处理测距、布局、绘图、焦点变换、滚动条以及屏幕区域表现的按键和手势。View类为Widget服务,Widget是一组用于绘制交互屏幕元素的完全实现子类。Widget包括Text,EditText,Button,RadioButton,Checkbox,ScrollView等
2}ViewGroup
ViewGroup是android.view.Viewgroup类的对象,它的功能是装载和管理一组View和其它ViewGroup.ViewGroup为Layout服务,Layout则是一组提供屏幕界面通用类型的完全实现子类。

在Android下,View可以响应按键和触屏两种事件:
1> boolean onKeyDown(int keyCode,KeyEvent event)                              用于响应按键按下
2> boolean onKeyMultiple(int keyCode,int repeatCount,KeyEvent event)  用于响应按键重复点击。
3> boolean onKeyUp(int keyCode,KeyEvent event)                                   用于响应按键释放
4> boolean onTouchEvent(MotionEvent event)                                          用于响应触屏事件

1、RadioGroup、RadioButton
RadioButton在放在RadioGroup中,一组RadioGroup中只有一个RadioButton被选中。

设置监听器是为RadioGroup设定,还是为RadioButton。如下:
//为RadioGroup设置监听器,需要注意的是,这里的监听器和Button控件的监听器有所不同
genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				// TODO Auto-generated method stub
				if(femaleButton.getId() == checkedId){
					System.out.println("famale");
					Toast.makeText(RadioTest.this, "famle", Toast.LENGTH_SHORT).show();
				}
				else if(maleButton.getId() == checkedId)
				{
					System.out.println("male");
				}
			}
		});
2、 CheckBox
CheckBox没有组的概念,可以多选。所以,每个CheckBox都要单独设置监听器:
//为多选按钮添加监听器
wimBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				// TODO Auto-generated method stub
				if(isChecked)
				{
					System.out.println("swim is checked");
				}
				else
				{
					System.out.println("swim is unchecked");
				}
			}
		});
3、 Toast
Toast是一个非常小巧但很实用的东西,它的作用是弹出一些信息 提示用户。
Toast.makeText(RadioTest.this, "famle", Toast.LENGTH_SHORT).show();
4、 ProgressBar
1)在xml中可以设置样式:
style="?android:attr/progressBarStyleHorizontal"   ——水平方向
style="?android:attr/progressBarStyle"  —— 转圈
style="?android:attr/progressBarStyleSmallTitle" --------小圆形进度条
style="?android:attr/progressBarStyleLarge"-----------大型圆形进度条
2)进度条的操作
class ButtonListener implements OnClickListener{
    	
		@Override
		public void onClick(View v) {
			if(i == 0)
			{
				//设置进度条处于可见的状态
				firstBar.setVisibility(View.VISIBLE);
				firstBar.setMax(150);
				secondBar.setVisibility(View.VISIBLE);
			}
			else if ( i < firstBar.getMax()){
				//设置主进度条的当前值
				firstBar.setProgress(i);
				//设置第二进度条的当前值
				firstBar.setSecondaryProgress(i + 10);
				//因为默认的进度条无法显示进行的状态
				//secondBar.setProgress(i);
			}
			else{
				//设置进度条处于不可见状态
				firstBar.setVisibility(View.GONE);
				secondBar.setVisibility(View.GONE);
			}
			i = i + 10 ;
		}
    }
5、 ListView
public class Activity01 extends ListActivity {
    /** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> map1 = new HashMap<String, String>();
		HashMap<String, String> map2 = new HashMap<String, String>();
		HashMap<String, String> map3 = new HashMap<String, String>();
		map1.put("user_name", "zhangsan");
		map1.put("user_ip", "192.168.0.1");
		map2.put("user_name", "zhangsan");
		map2.put("user_ip", "192.168.0.2");
		map3.put("user_name", "wangwu");
		map3.put("user_ip", "192.168.0.3");
		list.add(map1);
		list.add(map2);
		list.add(map3);
		MyAdapter listAdapter = new MyAdapter(this, list,
				R.layout.user, new String[] { "user_name", "user_ip" },
				new int[] { R.id.user_name,R.id.user_ip});
		setListAdapter(listAdapter);
	}
}
可以看到,它继承的是ListActivity,它采用Adapter(适配器)模式,最后要设置用哪个适配器:setListAdapter(listAdapter);
这个Adapter是什么呢?
它里面主要是用来添加一些数据。来看下它的参数
this:指这个ListActivity对象。list:就是ArrayList ,里面放的是hashMap.           R.layout.user是这个ListActivity采用的布局文件。
new String[] :与当前的list对应,名字和参数个数都是相应的。相当于几列。
new int[]:哪个textView显示什么数,与R.layout.user对应。
 这就是它的效果。
这只是一个显示 ,我们想点击一行,触发某种事件。那这个事件应该怎么去做呢?
要继承ListActivity的onListItemClick,当点击listView中一行的时候就会触发这个事件。
@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		// TODO Auto-generated method stub
		super.onListItemClick(l, v, position, id);
		System.out.println("id----------------" + id);
		System.out.println("position----------" + position);
	}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值