一个好的APP不仅有美观,好看的界面,更需要良好的性能和稳定性。作为一名开发人员,需要理解界面设计原则并写出优秀的界面设计代码。 本章主要讲述基本控件的使用,界面布局及一些常用的界面设计属性。 1.常用布局(1) LinearLayout 相对布局 android:android:layout_weight=”1” //百分比属性 android:layout_above //表示与某个元素绑定后,在某个元素之上 android:layout_toLeftOf // 表示与某个元素绑定后,在某个元素左边 android:layout_alignLeft //依赖于某个元素的左边(平行对齐) android:layout_margin //表示与边界的距离,没有方向的margin是与四边的距离 android:padding //是内边距 android:orientation=”vertical” //垂直展示子控件列表 android:orientation=”horizontal” //水平展示子控件列表 控件可见性设置: 设置成gone为隐藏(完全不在,不占用空间) 设置成invisible不可见(看不见,但还存在,占用空间) (2) RelativeLayout android:layout_alignParentRight //相对于父控件; android:layout_toRightOf //相对于xx控件 android:alighLeft //控件左边和某控件的左边平行 (3)FrameLayout 帧布局 控件会一直叠加在一起 (4)AbsoluteLayout(很少用) android不建议用,因为android屏幕很多 (5)TableLayout(很少用) 2.布局技巧及优化
两个小工具:
LayoutInflater(加载资源文件格式) LayoutInflater 是一个抽象类。LayoutInflater这个类,它的作用类似于findViewById; 不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而 findViewById是找xml布局文件下的具体widget控件。 在文档中如下声明: public abstract class LayoutInflater extends Object
layoutInflater在项目中的使用实例代码: LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test)); EditText editText = (EditText)view.findViewById(R.id.content); 对于上面代码,指定了第二个参数 ViewGroup root,当然你也可以设置为 null 值。 View复用View复用可以有效的提高页面加载的速度,从而提高整体程序的性能。View复用举例如下: 1 public View getView(int i, View view, ViewGroup viewGroup) {2 LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);34 ViewHolder viewHolder;5 //1、view复用:只有当view为空时,才读取xml布局文件;不为空则继续使用view,取控件。6 if (view == null) {7 view = inflater.inflate(R.layout.item_listview, null);8 viewHolder = new ViewHolder;9 viewHolder.avatarImageView = (ImageView) view.findViewById(R.id.avatar_imageview);10 viewHolder.nameTextView = (TextView) view.findViewById(R.id.item_name);11 viewHolder.ageTextView = (TextView) view.findViewById(R.id.item_age);1213 //打标签14 view.setTag(viewHolder);15 } else {16 viewHolder = (ViewHolder) view.getTag;17 }1819 viewHolder.avatarImageView.setImageResource(R.drawable.avatar);20 viewHolder.nameTextView.setText(mUserInfo.get(i).getName);21 viewHolder.ageTextView.setText(mUserInfo.get(i).getAge + '');2223 return view;24 }25 }26 //2、创建一个类,用于缓存控件。27 class ViewHolder {28 ImageView avatarImageView;29 TextView nameTextView;30 TextView ageTextView;31 } ViewDemo 3.常用数据控件android中常用的数据控件包括,ScrollView,GridView,ListView。作为数据交互,一般会结合adapter使用。 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView) 等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系: 所以,界面显示的步骤是:
ArrayAdapter最为简单,只能展示一行字。 SimpleAdapter有最好的扩充性,可以自定义出各种效果。 SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。 ListView常用属性:
常用方法:
数据绑定: mPhoneBookListView = (ListView) findViewById(R.id.list_view); PhoneBookAdapter phoneBookAdapter = new PhoneBookAdapter(ListViewDemoActivity.this); mPhoneBookListView.setAdapter(phoneBookAdapter); adapter定义如下: 1 public class PhoneBookAdapter extends BaseAdapter {23 |
|
来自: 走出尘埃 > 《工控之路——编程篇》