当前位置: 代码迷 >> Android >> android UI总结(二)
  详细解决方案

android UI总结(二)

热度:46   发布时间:2016-04-28 03:38:14.0
android UI小结(二)
一、TextView
文本框组件,直接继承View,也是EditText和Button的父类
android:hintsetHint(int)默认显示的提示文本
android:inputTypesetRawInputType(int)类似于HTML中input的type属性
android:linksClickablesetLinksClickable(boolean)控制文本框的URL、Email等链接是否可点击
android:maxLinessetMaxLines(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:srcsetImageResource(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处的列表项组件。
  相关解决方案