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。

原文地址:https://www.cnblogs.com/yl-saber/p/6051599.html