初学安卓控件

    安卓常用的输入控件控件为Button,EditText,CheckBox,RadioButton,ToggleButton,Picker,Spinner.

    Button,如果只需要在按钮上放置文字信息时,可以使用Button。在按钮上放置图片时,使用ImageButton,当然如若需要在按钮上同时放置文字和图片,可以使用Button。

    在安卓中,设置构建布局为fill_parent,将强制性的让该控件视图填充满整个视图。wrap_parent,自适应。match_parent,填充满父容器。

    获取用户的点击事件:1.使用android:onClick属性,在xml文件中的Button标签中加入android:onClick属性,在要加载这个xml文件的Activity文中加入一个固定格式:

public  void 响应方法名(View view){}。然后再将响应名字填入android:onClick的值中去。我们便可以得到用户的点击事件,并对他做出处理。

    2.onClickListener,添加监听器。先获取Button对象:Button btn=(Button)findViewById(R.id.btn);再获取onClickListener的对象,并把监听器对象交给Button对象,btn.setOnClickListener(new  OnClickListener() {public void onClick(View view) {},把我们需要加的操作写入监听器中,便可以实现我们想实现的点击事件。

    Selector为了后期美化,我们可以选择使用selector来获取新的外观图,创建xml文件的时候把类型改为selector,建立在drawable里,而非以前的layout类型。

设置android:state_pressed="true",可以被点击,点击的时候会更换成下面的图片。

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@drawable/test_bg"></item>
    <item android:drawable="@drawable/turretbz"></item>
</selector>

注意,item越简单的,需要放在越下面。

    EditText,可输入文本输入框,基本用法:android:hint="@String/email_hint"属性,可以给我们的编辑框加入一个提示信息。

android:inputType="textEmailAddress"提供给我们调整键盘样式的能力。可以得到只有数字或者输入邮件地址的软键盘。

android:imeOptions="actionSend",软键盘中总有一个默认按钮,这个按钮没有默认的响应方法,需要我们自定义。设置,android:imeOptions="actionDone"软键盘下方变为”完成“光标保持在原来的输入框上,软键盘关闭。android:imeOptions="actionSend"软键盘下面按钮变为”发送“光标移动到下一个。

在加入了imeOptions属性之后,需要一个监听器来监听该按钮的响应。

EditText edit=(EditText)findViewById(R.id.edit);

editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            handled = true;
        }
        return handled;
    }
});

android:password="true",此属性规定密码是以密文方式输入,如想改为名文,就改为”false“。

CheckBox,多选框。我们设置onClick的方式加入一个写在Activity中的点击响应方法,便可以使用多选框的监听器:onCheckeChangeListener.

RadioButton,单选框。该控件需要和RadioGroup一起使用。给RadioGroup加入一个onCheckedChangeListener来监听我们的选择监听。

Adapter和ListView

Adapter:用于连接两个事物的桥梁。适配器用来连接我们的AdapterView和数据。

ListView列表空间,实现一个数据列表,方便我们修改数据,同时影响界面。

<ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:entries="@array/Cities" >
</ListView>

用entries,连接一个string的item。创建方法和selector相似。每个item里放入string数据

在Activity中实现一个我们自己扩展的BaseAdapter子类对象。找到listview对象,将适配器对象设置给listview对象。

Listview也可以作为一个装载控件的容器,其本身不显示数据。注意:listview只能通过适配器加载他的子空控件,如下例。

ListView list=(ListView) findViewById(R.id.listView1);
list.setAdapter(new MyBaseAdapter1());//注:该处的new MyBaseAdapter1()是一个继承了BaseAdapter的子类。

ListView动态内容的动态添加:

由用户或服务器获取的数据,更新数据容器。

Adapter.notifyDataSetChanged();来提醒ListView数据已经更新,界面需要刷新。

例:

public class ListViewActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		final ArrayList<String> array=new ArrayList<String>();
		array.add("上海");
		array.add("成都");
		setContentView(R.layout.layout_inflator);
		ListView listview=(ListView) findViewById(R.id.listview);
		final MyBaseAdapter adapter = this.new MyBaseAdapter(array);
		listview.setAdapter(adapter);
		EditText edit=(EditText) findViewById(R.id.edittext);
		edit.setOnEditorActionListener(new OnEditorActionListener() {
			public boolean onEditorAction(TextView tv, int actionid, KeyEvent arg2) {
				// TODO Auto-generated method stub
				switch(actionid){
				case EditorInfo.IME_ACTION_DONE:
					array.add(tv.getText().toString());
<span style="white-space:pre">					</span>//提示数据已经更新,界面需要更新。
					adapter.notifyDataSetChanged();
					tv.setText("");
					return true;
				}
				return false;
			}
		});
	}

LIstView性能优化:1.复用convertView2.减少对findViewById()的使用。convertView是getView方法里的一个参数。

class MyBaseAdapter1 extends BaseAdapter{
		ArrayList<Map<String,Object>> array=new ArrayList();
		LayoutInflater inflater;
		public MyBaseAdapter1() {
			// TODO Auto-generated constructor stub
			inflater = ChatActivity.this.getLayoutInflater();
			for(int i=0;i<=2;i++){
				Map<String,Object> ma=new HashMap<String,Object>();
				ma.put("str1", str1[i]);
				ma.put("str2", str2[i]);
				ma.put("int3", int3[i]);
				array.add(ma);
			}
/*			for (int i = 0; i < array.size(); i++) {
				System.out.println(array.get(i).get("str1"));
			}*/
		}
		public int getCount() {
			// TODO Auto-generated method stub
			return array.size();
		}

public View getView(int position, View view1, ViewGroup arg2) {
if(view1==null){
				view1=inflater.inflate(R.layout.layout_inflator, null);
				TextView tv_name=(TextView) view1.findViewById(R.id.tv_name);
				TextView tv_say=(TextView) view1.findViewById(R.id.tv_say);
				viewholder=new ViewHolder();
				viewholder.tv_name=tv_name;
				viewholder.tv_say=tv_say;
				view1.setTag(viewholder);
			}
			viewholder=(ViewHolder) view1.getTag();
			viewholder.tv_name.setText("章子怡");
			viewholder.tv_say.setText("今天16号,天气晴朗!");
			
			return view1;
		}
		class ViewHolder{
			TextView tv_name;
			TextView tv_say;
		}
}

android:divider="@color/mycolor"间隔线的图片或者颜色的设定。

android:dividerHeight="3dip"间隔线的宽度

该上的方法用于修改ListView中每个item之间的间隔线。

android:stackFromBottom="true"从列表最下方开始。
android:transcriptMode="alwaysScroll"一直显示新来的数据。
android:cacheColorHint="@android:color/transparent" 滑动时,背景透明度。



猜你喜欢

转载自blog.csdn.net/sweet_smile5/article/details/42777625