Android基础(八)----UI

TextView     文本显示控件

  • android:id指定唯一标识符
  • android:layout_width/height指定控件的宽高,其中常用两个值wrap_content(由控件内容决定控件大小)和match_parent(与父副局保持一致)
  • android:text指定显示的内容
  • android:gravity指定文字的对齐方式

Button     按钮

  • android:textAllCaps="true/false"用于指定是否对Button中的所有英文字符进行大小写转换

EditText    可交互文本显示控件,用户可编辑

  • android:hint="String value"在EditText上显示提示性的文字
  • android:maxLines="2"指定EditText的最大行数为2行

ImageView   图片显示控件

  • android:src=""用于指定图片资源

ProgressBar   进度条

  • 可以设置进度条的可见性
  • 可以通过style属性给ProgressBar指定不同的样式
  • 通过ProgressBar的getProgress()、setProgress()获取和设置进度条的进度。

AlertDialog     警示信息框,该对话框置顶于所有界面元素之上,能够屏蔽掉其他空间的交互能力。

  • 首先调用AlertDialog.Builder创建一个AlertDialog实例
  • 设置AlertDialog实例的标题setTitle()、内容setMessage()、可否取消setCancelable()等属性。
  • 调用AlertDialog实例的setPositiveButton(Stirng str, new DialogInterface.onClickListener())为对话框设置确定按钮的点击事件
  • 调用AlertDialog实例的setNegativeButton(Stirng str, new DialogInterface.onClickListener())为对话框设置取消按钮的点击事件
  • 最后调用AlertDialog.show()方法将对话框显示出来

============================================Android控件的可见性====================================

Android控件都具有可见性,可以用android:visibility进行指定,可选值有visible(可见)、invisible(不可见,但仍占据原来位置,可以理解为透明的)和gone(控件不可见,并且不占据任何屏幕空间);还可以通过setViaibility()方法设置空间的可见性,传入的值为VIEW.VISIBLE、VIEW.INVISIBLE、VIEW.GONE

================================================================================================

ProgressDialog   与AlertDialog类型,可以屏蔽掉其他控件的交互能力,会在对话框中显示一个进度条,一般用于当前操作比较费时的情况。用法也与AlertDialog相类似

  • 首先调用AlertDialog.Builder创建一个AlertDialog实例
  • 设置AlertDialog实例的标题setTitle()、内容setMessage()、可否取消setCancelable()等属性。注意:如果在setCancelable()传入了false,表示ProgressDialog不能通过Back键取消掉,这时一定要在数据加载完成后必须调用ProgressDialog的dismiss()方法来关闭对话框
  • 调用AlertDialog实例的setPositiveButton(Stirng str, new DialogInterface.onClickListener())为对话框设置确定按钮的点击事件
  • 调用AlertDialog实例的setNegativeButton(Stirng str, new DialogInterface.onClickListener())为对话框设置取消按钮的点击事件
  • 最后调用AlertDialog.show()方法将对话框显示出来

4中基本布局:

  1. LinearLayout  线性布局
  • android:layout_gravity=“”top/center_vertical/center_horizontal/bottom/left/right”布局对齐方式

  • 要注意android:orientation与android:layout_gravity之间的配合,避免冲突

  • android:layout_weight:该属性允许使用比例的方式来指定控件的大小。

     2.RelativeLayout  相对布局

  • android:layout_alignParentLeft="true" 相对左对齐
  • android:layout_alignParentright="true"相对右对齐
  • android:layout_alignParentTop="true"相对上对齐
  • android:layout_alignParentBottom="true"相对下对齐
  • android:layout_alignParentcenterInParent="true"相对中心对齐

以上均是对父布局进行定位,也可以相对于控件进行定位:android:layout_above/bottom/toLeftOf/toRightOf="控件id";还有相对于控件边缘进行对齐的方式:android:layout_alignLeft/Right/Top/Bottom

     3 FrameLayout帧布局,应用较少

     4 百分比布局PercentFramelayout和PercentRelativeLayout


自定义布局,在写好布局文件后,直接在主布局中加<include layout = "layout.xml" />

然后再在MainActivity中将系统自带的标题栏隐藏掉,方法为:调用getSupportActionBar()获取ActionBar.实例,再调用ActionBar的hide()方法将系统自带的标题栏隐藏起来。


自定义控件:(目的:减少重复代码)

  • 新建一个类继承自一种布局方式(例LinearLayout);在该类中需要重写LinearLayout中的带有两个参数的构造函数
  • 加载动态布局:借助LayoutInflater实现,通过LayoutInflater.from(Context context)方法构建一个LayoutInflater对象,调用LayoutInflater对象的inflate(加载布局文件的ID;父布局)方法
  • 在布局文件中加载该自定义控件,需要指明控件的完整路径
  • 可以在自定义控件中加载各种事件


ListView控件:(主要用于展示大量数据)

  • 简单使用

将ListView当成普通控件使用,在主程序中调用ListView与其他普通控件一致。数组中的数据是无法直接传递给ListView的,需要借助适配器来完成(Android提供了很多适配器的实现类)。

适配器的构建:例如ArrayAdapter,其构造函数需要依次传入当前上下文、ListView子项布局的ID、以及需要适配的数据

调用ListView的setAdapter()方法,将构建好的适配器对象传递进去,这样就建立了ListView与数据之间的关联

注:每个要传递进去的内容就是一个子项布局,子项布局在进入屏幕时,会调用getVIew()方法

  • 定制ListView的界面

可以创建自定义的适配器,创建的自定义适配器继承自ArrayAdapter可以指定泛型类型,自定义的适配器必要操作如下:1 重写父类的构造方法,需要传递三个参数:上下文、ListView子项布局的ID、数据。2 重写getView()方法

getView(int position, View convertView, ViewGroup parent)方法:该方法在每个子项被滚动到屏幕内的时候会被调用,getView()共有三个参数,

  • 第一个参数是当前子项;
  • 第二个参数是用于将之前加载好的布局进行缓存,以便之后可以进行使用,避免每次都将布局加载一遍,造成运行效率低下。使用方法为:在动态加载布局文件之前,首先判断convertView是否为空值,如果不为空,则返回该View,如果为空,则进行动态创建布局文件;
  • 第三个参数是控件组。用来存放显示内容的信息的,因为是显示多个同类型的数据,所以放在一个group中。

View对象的setTag()、getTag()方法:setTag()为存储内容在View中,getTag()为从View中获取存储内容。--------关于应用情景网上较多的说法:1 用于区分非常多类似的VIew;2 用于优化ListView的运行效率

提升ListView的运行效率

  1. 使用getView()方法中的第二个参数convertView,缓存创建布局文件
  2. 将内容进行封装在一个内部类中,如果有已加载的内容,就不再重新获取相关控件的实例,而是对控件的实例进行缓存

RecyclerView:滚动控件

使用RecyclerView控件(属于新增的控件),需要在app下的bulid.gradle中添加相应的依赖库,具体地址为:compile 'com.android.support.recyclerview-v7:25.3.1'。在activity_main.xml中增加RecyclerView控件,需要键入完全地址。

1 RecyclerView基本用法:

  • 新建适配器,一般新建的适配器(FruitAdapter)都继承自RecyclerView.Adapter,并且可以指定泛型类型(FruitAdapter.ViewHolder),其中ViewHolder是在FruitAdapter中定义的内部类,该内部类ViewHolder继承自RecyclerView.ViewHolder,内部类ViewHolder中定义一个构造方法,传入VIew参数(该参数通常就是RecyclerView子项的最外层布局,可以通过findViewId()方法来获取布局中的控件)。
  • 新建适配器FruitAdapter的构造方法,传入要展示的数据源
  • 重写继承自父类的onCreateViewHolder()、onBindViewHolder()、getItemCount()方法。onCreateViewHolder()是用于创建ViewHolder实例的,通过载入布局获取VIew对象,将View对象传入ViewHolder的构造方法返回ViewHolder实例;onBindViewHolder()方法会在每个子项被滚动到屏幕内的时候执行,用于对RecyclerView子项的数据进行赋值;getItemCount()方法用于获取RecyclerView的子项数量。
  • 修改MainActivity活动中对RecyclerView的使用:

1 获取RecyclerView的实例

2 创建一个LinearLayoutManager对象,并将LinearLayoutManager对象通过RecyclerView对象的setLayoutManager()方法将该对象设置到RecyclerView当中。创建的LinearLayoutManager对象的默认排列是纵向排列的,可以通过LinearLayoutManager对象的setOrientation()方法来指定排列方向。

3 创建适配器,调用RecyclerView的setAdapter()方法来完成适配器设置

注:RecyclerView提供了LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager三种内置的布局排列方式。

  • RecyclerView的点击事件:RecyclerView并没有提供类似于setOnItemClickListener()的注册监听方法。需要给子项具体的View设置注册点击事件。

getItem(int position):获取当前项的实例

LayoutInflater加载布局文件

LayoutInflater.from(Context context)创建LayoutInflater对象

LayoutInflater.from(Context context).inflate(1,2,3)动态加载一个布局文件。参数1是要加载的布局文件的id;参数2是给加载好的布局添加一个父布局;参数3指定为false,表示只让我们在父布局中声明的layout属性生效,但不会为这个View添加父布局,因为一旦View有父布局,就不能再添加到ListView中了


按键触发监听事件:

  • 按钮Button的触发监听事件是调用setOnClickListener(new View.OnClickListener(){});
  • ListView控件的触发监听事件是调用的setOnItemClickListener(new AdapterView.OnItemClickListener(){});

----《第一行代码 Android》

猜你喜欢

转载自blog.csdn.net/andanwubian/article/details/81505848
今日推荐