Android学习笔记(四)View和Layout

http://www.cnblogs.com/cxcco/archive/2011/12/09/2282701.html

二、正文

  所谓人靠衣装马靠鞍,一个要想吸引用户的应用程序,光靠功能是没有多大作用的,漂亮丰富的UI也是极其重要的。如何才能创建一个漂亮、可操作性强的应用程序?

1、 View介绍

  在Android中,所有的可视化组件都是继承自View类,用户通过View和ViewGroup或者扩展自他们的类来构建用户界面。一个View对象处理它自己的测度、布局、绘图、焦点改变、滚动、键/手势等与屏幕上矩形区域的交互。作为用户界面中的对象,View也是与用户交互的交互事件接收器。

(来自官网)

  在Android中,类的继承方式如上所示,Control用来实现相对比较简单的功能,而Widget用来组合控件和构建更加复杂的控件(如用户自定义组件)。 Control也可以和widget相互转换。

2、 Layout介绍

  在Android应用程序中,一个视图有很多的控件,如何才能控制这些控件的位置和排列?在网页中我们可以通过Html中的table,div来布局,在Android中我们通过Layout实现布局。

  在Android中主要有以下几种Layout:

  • LinearLayout

    LinearLayout线性布局,包含在LinearLayout里面的控件按顺序排列成一行或者一列。

    主要介绍下他的两个主要的属性:

    • Orientation——方向,当设置为Horizon时,Layout中的控件将排成一行,当设置为Vertical时,Layout中的控件将排成一行。
    • FillMode——填充方式,即设置android:layout_width和android:layout_height,可以为三种值:具体的像素值、wrap_content, 表示按控件中文本实际长度显示 、 fill_parent, 表示填充剩下的所有可用空间。具体的例子可以在官网上查看,这里就不在举例了。
  • RelativeLayout

    RelativeLayout相对布局,它是依靠与父容器或同在一容器中其它控件的相对位置来定位的。

两种情况下的共四种主要属性:

    • 相对父容器:

        android:layout_alignParentTop: 控件的顶部与父容器的顶部对齐。

        android:layout_alignParentBottom:控件的底部与父容器的底部对齐。         

        android:layout_alignParentLeft:控件左边与父容器的左边缘对齐。

        android:layout_alignParentRight:控件右边与父容器的右边缘对齐。

    • 相对同一容器中的其它控件:

android:layout_above: 表示此控件在另一控件的上面。

android:layout_below:表示此控件在另一个控件的下面。

android:layout_toLeftOf:表示此控件在另一个控件的左边。

android:layout_toRightOf:表示此控件在另一个控件的右边。

android:layout_alignTop: 表示此控件与另一控件顶部对齐。

android:layout_alignBottom:表示此控件与另一控件底部对齐。

android:layout_alignLeft:表示此控件与另一个控件左对齐。

android:layout_alignRight:表示此控件与另一个控件右对齐。

例子请查看官方网站的例子

  • TableLayout

    表格布局,类似于HTML的Table。通过TableRow来定义一行,如果一个控件占用多列可以设置android:layout_span, 类似于HTML中Table的colspan。默认情况下一个控件是按顺序放置在每一列的(column 0, column 1….), 也可以通过android:layout_column指定放在哪一列。如果一列内容过长或者过短,可以通过android:stretchColumns和android:shrinkColumns来增加或者减少此列的宽度。

    例子请查看官方网站的例子

  • AbsoluteLayout

    绝对布局,就是Android不提供任何布局控制,而是由我们自己通过X坐标,Y坐标来控制组件的位置,在这个容器里面的组件位置、大小都需要我们自己来控制。

layout_x :制定该子组件的x坐标。

layout_y:制定该子组件的y坐标

非常不建议使用AbsoluteLayout来进行控件布局,因为用户手机屏幕尺寸有大有小,如果使用这个来布局,那么你想想你自己的工作量吧。

3、 Widget介绍

   Widget分为系统提供和用户自定义两部分,对于用户自定义部分将在后面的笔记中介绍。在Android系统中为我们提供了一个标准的View工具箱,我们只需要调用这些工具就可以创建出外观一致的应用程序。

  下面是Android系统为我们提供的部分控件:

  ? TextView

      标准的只读文本label。它支持多行显示、字符串格式化和文本自动换行。

  ? EditText

     可编辑的文本输入框。它支持多行输入和文字换行。

  ? ListView

     一个ViewGroup,以列表的方式创建和管理一组显示项。标准的ListView使用TextView来显示每一个字符串数组内的值。

  ? Spinner

     组合控件,显示一个TextView和一个关联的ListView,用来从一个列表中选择一项并显示选择项在TextView中。它还有一个button,当按下时显示一个选择框。

  ? Button

     标准的按钮。

  ? CheckBox

     两种状态的button,代表checked或unchecked。

  ? RadioButton

     单选按钮。

  更多的可以查看官方帮助文档。

4、 创建一个Menu

  当你打开一个应用程序时,点击手机的Menu键,这个时候弹出来的那么菜单选项就是Menu。

  如果要创建一个Menu菜单,需要重写onOptionsItemSelected(响应Menu选择),onCreateOptionsMenu(创建Menu菜单)这两个方法。

 1 package LiB.Demo; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.widget.TextView; 8  9 public class Android_demoActivity extends Activity {10     /** Called when the activity is first created. */11     TextView tv=null;12     @Override13     public void onCreate(Bundle savedInstanceState) {14         super.onCreate(savedInstanceState);15         setContentView(R.layout.main);16         tv=(TextView)findViewById(R.id.textView1);17     }18 19     @Override20     public boolean onCreateOptionsMenu(Menu menu) {21         // TODO Auto-generated method stub22 //第一个参数为该子项属于哪个组23 //第二个参数是该子项的唯一ID24 //第三个参数是该子项在Menu菜单中显示的序号25 //第四个参数为该子项的显示名称26         menu.add(0, 1, 1, "Exit");27         menu.add(0, 2, 2, "About");28         return super.onCreateOptionsMenu(menu);29     }30 31     @Override32     public boolean onOptionsItemSelected(MenuItem item) {33         // TODO Auto-generated method stub34         if(item.getItemId()==1)35         {36             finish();37         }38         if(item.getItemId()==2)39         {40             tv.setText(item.getTitle());41         }42         return super.onOptionsItemSelected(item);43     }44 45 }

三、总结

  今天学习了View和Layout,并在结束的时候举了一个创建Menu的例子。Layout作为布局控制,对我们以后的开发及其重要,在以后的开发中必定会经常接触到。在笔记五中将详细介绍几个常用控件。

时间: 2024-11-17 17:05:22

Android学习笔记(四)View和Layout的相关文章

Android学习笔记四:添加Source

问题描述 Source not foundThe JAR file D:\.....\sdk\platforms\android-20\android.jar has no source attachment. 问题原因及解决办法 1. 使用SDK Manager下载最新版本的Sources for Android SDK 一般文件下载目录默认在SDK下的sources文件中即 \adt-bundle-windows-x86_64-20130522\sdk\sources\android-20

Android学习笔记四之Activity

Android四大组件之Activity 1.什么是Activity Activity是Android四大组件之一,用于显示View.Activity是一个应用程序组件,提供一个用户交互的接口,其本身是没有界面的,Activity类创建一个窗口,在上面可以绘制用户接口.窗口通常充满屏幕,也可以小于屏幕而悬浮于其他窗口之上. 开发者可以通过Activity类提供的setContentView(View)接口将View放到Activity创建的窗口上.一个程序一般由多个Activity组成,他们通常

Android学习笔记(四)

2.      Settings.System.getInt(ContentResolvercr, String name, int def)方法从系统设置(settings)参数的集合中取出名称为name的参数的参数值,如果系统设置中没有该参数,则返回默认值def. 3.      Activity的函数setVolumeControlStream(intstreamType)用于设置所在Activity中音量控制键控制的音频流,一般在onCreate()函数中设定.其中,streamType

Android学习笔记之View(二)

View加载的流程之测量:rootView调用measure()→onMeasure(): measure()是final方法,表明Android不想让开发者去修改measure的框架,开发者可以onMeasure方法. 来看一下measure的代码: public?final?void?measure(int?widthMeasureSpec,?int?heightMeasureSpec)?{?? ????if?((mPrivateFlags?&?FORCE_LAYOUT)?==?FORCE_

Android 学习笔记四:创建工具栏按钮

原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏幕很小,所以很多时候我们会需要用到工具栏,通过下拉菜单之类的方式来节省空间. Android 提供了对工具栏按钮的强大支持. 增加一个工具栏按钮 我们现在给 MainActivity 增加一个搜索按钮.增加一个按钮需要做这三件事 一,在 res/menu/activity_main.xml 中增加一

【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 之前,我们直接在activity中执行http通信,在通信过程中可能会出现连接超时.socket超时等情况,超时阈值一般是秒级,例如AndroidHttpClient中设置的20秒,如果出现超时,就

【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖排时,如下图显示: 屏幕上只显示一个fragment,点击列表上的数目,进入到简介的activity.下面介绍实现的方式. 设置横排和竖排的不同排版风格 在 Pro Android学习笔记(四):了解Android资源(下)的“资源和配置的变更”中,我们介绍了如何同资源文件夹名设置不同资源.缺省的l

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

Android学习笔记(四二):SQLite、ListView、ContextMenu

继续上一个例子,结合ListView中对SQLite进行操作. 通过CursorAdapter在ListView中的数据呈现 在上一个例子中,我们可以对SQLite中的数据库进行增删改查,将数据读到游标Cursor中,然后一一读出.在Android中可以通过CursorAdapter直接将数据映射到ListView中,如下处理: public class Chapter22Test1 extends ListActivity{    private SQLiteDatabase  db = nu