android UI小结(二)

一、TextView
文本框组件,直接继承View,也是EditText和Button的父类
android:hint setHint(int) 默认显示的提示文本
android:inputType setRawInputType(int) 类似于HTML中input的type属性
android:linksClickable setLinksClickable(boolean) 控制文本框的URL、Email等链接是否可点击
android:maxLines setMaxLines(int) 设置该文本框最多占几行
android:password 该文本框是一个密码框
android:phoneNumber 该文本框只接受电话号码
android:singleLine 设置该文本框是否为单行模式


二、EditText
android:inpuType="numberPassword" 只接受数字密码
android:inputType="number" 数值输入框
android:inputType="date" 日期输入框
android:inputType="phone" 电话号码输入框
android:selectAllOnFocus="true" 如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置


三、单选框复选框(CheckBox、RadioButton),ToogleButton,Switch
1.CheckBox、RadioButton都有一个android:checked属性,用于指定初始状态是否被选中。如果在布局文件中默认勾选了某个单选按钮,必须为该单选按钮的每个按钮设置android:id属性
eg:
rg = (RadioGroup) findViewById(R.id.rg);
rg.setOnCheckedChangeListener(new OnCheckedChangeListener()
		{
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId)
			{
								String tip = checkedId == R.id.male ?
						"您的性别是男人": "您的性别是女人";
				// 修改show组件中的文本。
				show.setText(tip);
			}
		});

2.ToogleButton,Switch通常用于状态切换

四、ImageView组件
android:scaleType设置所显示的图片如何缩放或移动以适应ImageView的大小;当scaleType的值为center时,则会把图片放在ImageView的中间,但不进行任何缩放。
android:src setImageResource(int) 设置ImageView所显示的Drawable对象的ID

android:src="@drawable/shui"
eg.注意获取ImageView的位图以及创建位图的方法
final ImageView image1 = (ImageView) findViewById(R.id.image1);
final ImageView image2 = (ImageView) findViewById(R.id.image2);
// more code ……
BitmapDrawable bitmapDrawable = (BitmapDrawable) image1
						.getDrawable();
				// 获取第一个图片显示框中的位图
				Bitmap bitmap = bitmapDrawable.getBitmap();
image2.setImageBitmap(Bitmap.createBitmap(bitmap
						, x, y, 120, 120));


五、AdapterView
继承于ViewGroup,本质是容器。包含多个列表项,并将多个列表项以合适的形式显示出来;他显示的多个列表项由Adapter提供。调用AdapterView的setAdapter(Adapter)可设置Adapter。
1.ListView
创建方式有俩:第一,直接使用ListView进行创建;第二,让Activity继承ListActivity
eg.
<ListView android:id="@+id/android:list"   
	android:layout_width="match_parent"   
	android:layout_height="match_parent"   
	android:entries="@array/books"/>

相应entries定义在/res/values/arrays.xml下

2.ArrayAdapter创建ListView
创建ArrayAdapter必须指定三个参数:
1)Context:代表访问整个android应用的接口。几乎创建所有的组件都需要传入Context对象;
2)textViewResourceId:一个资源ID,代表一个TextView,该TextView组件将作为ArrayAdapter的列表项组件
3)数组或list:该数组或list负责为多个列表项组件提供数据。
eg.
ListView list = (ListView) findViewById(R.id.list1);
		// 定义一个数组
		String[] arr = { "xxx", "xxx", "xxx" };
		// 将数组包装ArrayAdapter
		ArrayAdapter<String> adapter1 = new ArrayAdapter<String>
			(this, R.layout.array_item, arr);
		// 为ListView设置Adapter
		list.setAdapter(adapter);

3.SimpleAdapter创建ListView
ArrayAdapter功能有限,它的每个列表项必须是TextView;为了开发更为复杂的列表项,可以考虑使用SimpleAdapter。
private String[] names = new String[]
		{ "xx", "xx", "xx", "xx"};
	private String[] descs = new String[]
		{ "xxx", "xxx"
			, "xxx", "xxx"};	
	private int[] imageIds = new int[]
		{ R.drawable.xx, R.drawable.xx
		, R.drawable.xx, R.drawable.xx};

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 创建一个List集合,List集合的元素是Map
		List<Map<String, Object>> listItems = 
				new ArrayList<Map<String, Object>>();
		for (int i = 0; i < names.length; i++)
		{
			Map<String, Object> listItem = new HashMap<String, Object>();
			listItem.put("header", imageIds[i]);
			listItem.put("personName", names[i]);
			listItem.put("desc", descs[i]);
			listItems.add(listItem);
		}
		// 创建一个SimpleAdapter
		SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
			R.layout.simple_item, 
			new String[] { "personName", "header" , "desc"},
			new int[] { R.id.name, R.id.header , R.id.desc });
		ListView list = (ListView) findViewById(R.id.mylist);
		// 为ListView设置Adapter
		list.setAdapter(simpleAdapter);
			}

关于SimpleAdapter的5个参数:
第一个参数为Context;
第二个参数是一个List<Map<?,?>>的集合对象,该集合中每个Map<?,?>对象生成一个列表项——可联想手机版QQ的联系人列表项(包含头像、昵称、个性签名);
第三个参数指定页面布局的ID,作为列表项组件
第四个参数是一个String[]类型的参数,该参数决定提取Map<String,?>对象中哪些key对应的value来生成列表项;
第五个参数是一个int[]型的参数,该参数决定填充哪些组件。即指定页面布局文件中填充的目标组件。
另外,可以为每一个列表项指定单击事件的监听器.
list.setonItemClickListener(new onItemClickListener(){...});

4.BaseAdapter
扩展BaseAdapter可取得Adapter的最大控制权:程序要创建多少列表项,每个列表项的组件都由开发者自己决定。
myList = (ListView) findViewById(R.id.myList);
		BaseAdapter adapter = new BaseAdapter()
		{
			@Override
			public int getCount()
			{
				// 指定一共包含40个选项
				return 40;
			}
			@Override
			public Object getItem(int position)
			{
				return null;
			}
			// 重写该方法,该方法的返回值将作为列表项的ID
			@Override
			public long getItemId(int position)
			{
				return position;
			}
			// 重写该方法,该方法返回的View将作为列表框
			@Override
			public View getView(int position
					, View convertView , ViewGroup parent)
			{
				// 创建一个LinearLayout,并向其中添加2个组件
				LinearLayout line = new LinearLayout(BaseAdapterTest.this);
				line.setOrientation(0);
				ImageView image = new ImageView(BaseAdapterTest.this);
				image.setImageResource(R.drawable.ic_launcher);
				TextView text = new TextView(BaseAdapterTest.this);
				text.setText("第" + (position +1 ) + "个列表项");
				text.setTextSize(20);
				text.setTextColor(Color.RED);
				line.addView(image);
				line.addView(text);
				// 返回LinearLayout实例
				return line;
			}
		};
		myList.setAdapter(adapter);
	}

扩展BaseAdapter对象需要重写如下几个方法:
getCount():控制该Adapter将会包含多少个列表项?
getItem(int position):决定第position处列表项的内容
getItemId(int position):决定第position处列表项的id
getView(int position, View convertView, ViewGroupParent):决定第position处的列表项组件。

猜你喜欢

转载自raising.iteye.com/blog/2161188