软件也要拼脸蛋,UI开发的点点滴滴

常用控件的使用

TextView

  • 它主要用来显示一段文本
  • android:gravity:用来指定文字的对齐方式,可以用“|”来同时指定多个值
  • android:textSize:用来指定文字的大小
  • android:textColor:用来指定文字的颜色

Button

  • 实现Button点击事件有三种方法
    • 内部类实现
    • 实现接口
    • 在XML代码中使用OnClick属性

EditText

  • 它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理
  • android:hint:用来指定一段提示性文字
  • android:maxLines:指定了EditText的最大行数

ImageView

  • 用于在界面上展示图片的一个控件
  • 使用android:src属性给ImageView指定一张图片

ProgressBar

  • 用于在界面显示一个进度条
  • Android控件的可见属性。 所有的 Android控件都具有这个属性, 可以通过android:visibility进行指定
    • visible 表示控件是可见的,这个值是默认值
    • invisible 表示控件不可见,但是它仍然占据着原来的位置和大小, 可以理解成控件变成透明状态了
    • gone 则表示控件不仅不可见,而且不再占用任何屏幕空间
  • 通过 style 属性可以将它指定成不同的样式
  • android:max 属性给进度条设置一个最大值

AlertDialog

  • AlertDialog 可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此一般 AlertDialog 都是用于提示一些非常重要的内容或者警告信息
  • 首先通过 AlertDialog.Builder 创建出一个 AlertDialog 的实例

    AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
    
  • setPositiveButton()方法为对话框设置确定按钮的点击事件

    dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            }
    });
    
  • 调用 setNegativeButton()方法设置取消按钮的点击事件

     dialog.setNegativeButton("Cancel", new DialogInterfaceOnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    

ProgressDialog

  • ProgressDialog 和 AlertDialog 有点类似,都可以在界面上弹出一个对话框,都能够屏蔽掉其他控件的交互能力。不同的是,ProgressDialog 会在对话框中显示一个进度条,一般是用于表示当前操作比较耗时,让用户耐心地等待。
  • 如果在 setCancelable()中传入了 false,表示 ProgressDialog 是不能通过 Back键取消掉的,当数据加载完成后必须要调用 ProgressDialog 的dismiss()方法来关闭对话框,否则 ProgressDialog 将会一直存在。

详解四种布局

LinearLayout

  • LinearLayout 又称作线性布局,是一种非常常用的布局
  • android:orientation:指定LinearLayout控件的排列方向,默认为horizontal(水平)
  • 如果 LinearLayout 的排列方向是 horizontal,内部的控件就绝对不能将
    宽度指定为 match_parent,因为这样的话单独一个控件就会将整个水平方向占满,其他的控件就没有可放置的位置了。
  • android:layout_gravity:用于指定控件在布局中的对齐方式;当LinearLayout 的排列方向是 horizontal 时,只有垂直方向上的对齐方式才会生效

RelativeLayout

  • RelativeLayout 又称作相对布局,也是一种非常常用的布局
  • android:layout_above 属性可以让一个控件位于另一个控件的上方
  • android:layout_below 表示让一个控件位于另一个控件的下方
  • android:layout_toLeftOf 表示让一个控件位于另一个控件的左侧
  • android:layout_toRightOf 表示让一个控件位于另一个控件的右侧
  • android:layout_alignLeft 表示让一个控件的左边缘和另一个控件的左边缘对齐
  • android:layout_alignRight 表示让一个控件的右边缘和另一个控件的右边缘对齐
  • android:layout_alignTop 和 android:layout_alignBottom相同的原理

FrameLayout

  • 这种布局没有任何的定位方式,所有的控件都会摆放在布局的左上角

TableLayout

  • TableLayout 允许我们使用表格的方式来排列控件,这种布局也不是很常用
  • 在 TableLayout 中每加入一个 TableRow 就表示在表格中添加了一行
  • 在 TableRow中每加入一个控件,就表示在该行中加入了一列
  • TableRow 中的控件是不能指定宽度的
  • android:inputType 属性的值指定为 textPassword,把 EditText 变为密码输入框
  • android:stretchColumns 属性:它允许将 TableLayout 中的某一列进行拉伸,以达到自动适应屏幕宽度的作用

创建自定义控件

  • 所有的控件都是直接或间接继承自View的,所用的所有布局都是直接或间接继承自ViewGroup的
  • ViewGroup则是一种特殊的View,它可以包含很多的子View和子ViewGroup,是一个用于放置布局和控件的存储

引入布局

  • include可以引入布局

    <include layout = "@layout/title"/>
    

创建自定义控件

  • 引入布局的技巧解决了重复编写布局代码的问题,但是如果布局文件中有控件需要设置点击事件,就需要重复编写点击事件,这个问题可以通过创建自定义布局来解决。
  • 首先新建TitleLayout继承LinearLayout

    public class TitleLayout extends LinearLayout{}
    
  • 添加自定义控件

    <com.example.uicustomviews.TitleLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        ></com.example.uicustomviews.TitleLayout>
    
  • 为自定义控件添加点击事件

最常用和最难用的控件—ListView

  • ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据会滚动到屏幕外

ListView的简单用法

  • 数据无法直接传递到ListView的,需要借助适配器来完成
  • ArrayAdapter 是其中一个适配器实现类
  • ArrayAdapter的构造器需要依次传入当前上下文、ListView子项布局的id、以及适配器的数据。
  • 最后需要调用ListView的setAdapter()方法,将构建好的适配器对象传递进去。

提升ListView的效率

  • getView()中收一个参数convertView,这个参数用于将之前加载好的布局进行缓存,以便之后可以重用。

    View view;
    if(convertView == null){
        view = LayoutInflater.from(getContext)).inflate(resourceId,null);
    } else {
        view = convertView;
    }
    
  • 可以创建一个内部类ViewHolder,用于对控件的实例进行缓存。

ListView的点击事件

listView.setOnItemClickListener(new OnItemClickListener(){
    @override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        Fruit fruit = fruitList.get(position);
        Toast.makeText(Mainactivity.this,fruit.getName(),Toast.LENGTH_SH  ORT).show();
        }
 )};

单位和尺寸

  • dp是密度无关像素的意思,它在不同密度的屏幕中的显示比例将保持一致
  • sp是可伸缩像素的意思,它采用了和dp相同的设计理念,解决了文字大小的问题
  • 在编写Android程序的时候,尽量将控件或布局的大小指定成match_parent或wrap_content,如果必须指定一个固定值,则使用dp来做单位,指定文字大小用sp作为单位。

编写界面的最佳实践

制作Nine-Patch图片

  • Nine-Patch:它是一种被特殊处理过的png图片,能够指定哪些区域可以被拉伸而哪些区域不可以。
  • Android sdk目录下tools文件夹,找到draw9patch.bat文件是用来制作Nine-Patch图片的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值