当前位置:首页 > 第一行代码Android学习笔记完全版
public TitleLayout( Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title, this); Button edit=(Button) findViewById(R.id.title_edit); Button back=(Button) findViewById(R.id.title_back); edit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getContext(), \ } }); back.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getContext(), \ } }); } }
(3)如同加入其它的控件一样,将该自定义的控件添加到mainactivity.xml文件中 android:layout_width=\ android:layout_height=\ 四、ListView 1、最简单的Adapter 要将数据放置在ListView中,都需要一个adapter转换。 一个最简单的adapter,就是把一个字符串数组放置在ListView中。 ArrayAdapter接收3个参数:context,ListView单个子项布局id和数据。 listView=(ListView) findViewById(R.id.listView1); ArrayAdapter android.R.layout.simple_list_item_1, data); listView.setAdapter(adapter); 2、定制ListView界面 只显示文字很单调,需要显示图片等,则需要构建自定义的布局。 (1)数据:Fruit类 首先准备需要适配的数据,数据包括文字、图片id,定义一个Fruit类存放这些数据。 (2)子项布局:fruit_layout.xml 之后,需要自定义ListView中单个子项的布局。本例中就是一个图片加上一个文字。 (3)自定义适配器:FruitAdapter.java 该适配器中,最重要的是getView()方法。该方法在每个子项滚动到屏幕内时被调用。 position是该子项的位置,利用getItem(position)可以获得当前的Fruit实例fruit; 然后,利用LayoutInflater可以加载布局为fruit_layout的布局view; 该布局view即为步骤(2)中自定义的布局,通过view.findViewById()可以获得ImageView和TextView。 最后,将fruit中的imageId和name传入ImageView和TextView。 public class FruitAdapter extends ArrayAdapter (4)使用 List FruitAdapter adapter=new FruitAdapter(MainActivity.this, R.layout.fruit_layout, fruits); 在fruits中添加数据。 3、提升ListView效率 getView()每次都将布局重新加载一遍,效率很低。处理方法为: (1)convertView convertView将之前加载好的布局进行缓存,以便之后重用。则可以不必每次都使用LayoutInflater重新加载布局,而直接加载缓存的布局。 if(convertView==null) view=LayoutInflater.from(getContext()).inflate(R.layout.fruit_layout, null); else view=convertView; (2)ViewHolder 每次都使用findViewById获取控件,效率低下。 使用convertView将之前已经find的view也一起缓存。 View有setTag()和getTag()方法,分别进行数据写入和读取。 采用自定义的ViewHolder类,将多个参数一起管理,比如TextView/ImageView等。 public class FruitAdapter extends ArrayAdapter } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } viewHolder.fruit_image.setImageResource(fruit.getImageId()); viewHolder.fruit_name.setText(fruit.getName()); return view; } class ViewHolder { ImageView fruit_image; TextView fruit_name; } } 4、ListView点击事件 注册setOnItemClickListener()事件: listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView> parent, View view, int position, long id) { Fruit fruit=fruits.get(position); Toast.makeText(MainActivity.this, Toast.LENGTH_SHORT).show(); } }); 五、单位和尺寸 px: 像素 pt:磅数,1pt=1/72inch dp:密度无关像素 密度dpi:屏幕每inch包含的像素数。 获取当前屏幕密度值: float xdpi=getResources().getDisplayMetrics().xdpi; fruit.getName(),
共分享92篇相关文档