欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android UI小结(二)

程序员文章站 2022-05-22 22:58:57
...
一、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处的列表项组件。