Android的UI设计
一、Android控件
1、TextView
属性:id、width、height、gravity(对齐方式)、textSize(文字大小)、textColor(文字颜色)
2、Button
属性:id、width、height...
监听器:setOnClickListener()
3、EditText
属性:id、width、height、hint、android.maxLines(超出部分)
方法:getText()
4、ImageView
属性:id、width、height、src()
方法:setImageResource()
5、ProgressBar
属性:id、width、height、style、max(最大值)
方法:控件可见与不可见:setVisibility(visible、invisible、gone)
6、AlertDialog
方法:setTitle()、setMessage()、setCancelable(false)(不能通过back键取消)、setPositiveButton()、setNegatiButton()、show()
7、ProgressDialog
方法:setTitle()、setMessage()、setCancelable()、show()
二、布局
1、LinerLayout
属性:orientation(当设置为方向是horizontal时,控件宽度不能为match_parent)、layout_gravity、layout_weight
2、RelativeLayout
属性:layout_alignParentLeft/Top/Right/bottom、layout_centerInParent
3、FrameLayout
所有控件都在布局的左上角
4、TableLayout
表格的方式排列控件
属性:layout_span(占据的空间)、stretchColumns(自动适应屏幕宽度)
三、自定义控件
自定义布局
步骤:1、创建布局
2、在activity_main.xml中插入<include layout="@layout/布局名">即可引入自己创建的布局
3、隐藏原系统中自带的布局
自定义控件
加载布局title
public class TitleLayout extends LinearLayout{ public TitleLayout(Context context,AttributeSet attrs){
super(context,attrs);
LayoutInflater.from(context).inflate(R.layout.title,this); //动态加载布局title
} }
修改activity_main.xml
<com.example.uicustomviews.TitleLayout amdroid:layout_width="match_parent" android:layout_height="wrap_parent" ></com.example.uicustomvices.TitleLayout>
四、ListView
数据、构建适配器、控件对象、设置适配器
自定义ListView
1、构建实体类
2、自定义布局
3、自定义适配器,extends ArrayAdapter,传递参数包括context、子项布局textViewResource和数据data
4、重写getView(),在getView()方法中调用getItem()获得当前实体的实例,然后用LayoutInflater将子项加载到布局,获取控件对象,并调用setImageResource()和setText()显示图片和文字。
优化ListView
1、避免重复加载布局
convertView将加载好的布局进行缓存,便于以后重用。
public View getView(int position,View convertView,ViewGroup parent){ Fruit fruit = getItem(positiong);
View view;
if(convertView == null){
view = Layoutflater.from(getContext()).inflate(resourceId,null);
}else{
viwe = convertView;
}
...... }
2、避免重复调用findViewById()
借助ViewHolder
...... ViewHolder viewHolder;
if(convertView == null){
view = LayoutInflater.from(getContext()).inflate(resourceId,null);
viewHolder = new ViewHolder();
viewHolder.fruitImage = (ImageView)findViewById(R.id.fruit_image);
viewHolder.fruitName= (TextView)findViewById(R.id.fruit_name);
view.setTag(viewHolder); //将viewHolder存储都view中。
}else{
view = convertView;
viewHolder = (ViewHolder)view.getTag(); //重获viewHolder
}
viewHolder.fruitImage.setImageResuource(fruit.getImageId());
viewHolder.fruitName.setText(fruit.getName());
ruturn view;
}
class ViewHolder{
ImageView fruitImage;
TextView fruitName;
}
事件监听
调用setOnItemClickListener()方法,重写onItemClick(AdapterView<?>parent,View view,int position,long id)方法,通过position来判断点击的是哪个item。