安卓开发--Layout--布局---SDK(二)

本文详细介绍了Android布局的基础概念,包括视图的位置与尺寸、填充与边距的设置方法、常见的布局类型如LinearLayout和RelativeLayout等,以及如何使用AdapterView来构建动态布局。
摘要由CSDN通过智能技术生成

FROM:http://developer.android.com/guide/topics/ui/declaring-layout.html#Position


一 布局位置

视图的外观形状是一个长方形。一个视图有一个位置,这个位置用<左,顶>坐标表示,两个维度,表示为宽和高。位置和维度的单位是像素。


通过调用getLeft()和getTop()方法可以重新获取视图的位置。前者返回左侧或代表视图的矩形坐标X。后者返回顶部或Y代表视图的矩形坐标Y。这些方法,返回视图相对于它的父视图的相关位置。例如,当getLeft()返回20,这个意思是位从它的父视图的左侧开始起向右20个像素的位置。


另外,还有若干的方法被提供避免不需要的计算,也就是getRight()和getBotton()。


二  Size, Padding and Margins

用宽和高表示视图的大小。一个视图实际上拥有两组宽和高的值。

第一组值被称之为测量宽和测量高。这些尺寸定义在父视图中的多大的视图,这个测量的尺寸通过调用getMeasuredWidth()函数和getMeasuredHeight()函数获得。

第二组被称之为宽和高,有时称为绘制宽度和绘制高度。这个尺寸定义视图在屏幕上的确实尺寸,这两个值不同与测量宽度和测量高度。通过调用getWidth()和getHeight()函数可以获得宽度和高度。


为了测量它的尺寸,考虑其填充视图。填充用像素表示。填充可以被用作补偿视图的内容,通过一个特殊的像素补偿视图的内容。设置填充可以使用setPadding(int, int, int, int)方法和需要通过调用getPaddingLeft(),getPaddingTop(),getPaddingRight(),getPaddingBottom()。


虽然,一个视图可以定义一个填充,它没有提供热和MARGIN的支持。可是ViewGroup提供了这个支持。查看ViewGroup和ViewGroup.MarginLayoutParams获取更多的信息。


三 常见布局

每个ViewGroup的子类提供了一个唯一的方式展示你的想法。下面是一些常见的布局类型,这些被构建在安装框架中。



LinearLayout组织它的孩子到一个单独的水平的或垂直的行中。如果他的窗口长度超过屏幕的长度,它创建一个滚动条。

RelativeLayout使你能够指定子对象彼此相对的位置,或父对象彼此相对的位置。

WebView 显示Web页面


四 用一个适配器构建布局

当你的布局的内容是动态的或没有预先定义的,你可以使用一个布局,它的子类AdapterView在运行时产生一个视图。AdapterView的一个子类使用一个Adapter去构建数据。Adapter的行为向一个数据源和AdapterView布局的中间人,Adapter取回数据和转换每个填充到视图中。

常见的布局Adapter包括:


ListView:显示一个滚动栏的单个列表清单

Grid View:显示一个滚动栏的网格行和列

五 用数据填充适配器

通过绑定AdapterView实例到适配器,你可以填充一个AdapterView的ListView或GridView,从外部获取数据,并创建一个视图表示每个数据项。

安卓提供了几种Adapter的几个子类,这个写子类对获取不同种类数据和为一个AdapterView构建视图非常有用。两个常见的适配器是:

ArrrayAdapter

当你的数据源是一个队列使用这个适配器。默认下ArrayAdapter通过调用toString()为每个队列项创建一个视图并且替换TextView中的内容。

例如,如果你有一个字符串的队列,你想显示他们到listView,初始化一个新的ArrayAdapter,使用一个构造器去指定每个字符串和字符串队列的布局:

ArrayAdapter adapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, myStringArray);
这个构造函数的参数是:

1)你的应用程序的Context

2)布局队列中的每个字符串包含一个TextView

3)字符串队列

然后在你的ListView上调用setAdapter()函数

ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
为了定制每个项的外观,你可以在你的队列中的对象上重写toString()方法。或为每个项创建一个视图,(例如你想为每个队列项创建一个ImageView),扩展ArrayAdapter类和重写getView()去为每个项返回一个你想要的视图。

SimpleCursorAdapter

当你的数据来源于一个Cursor,使用这个适配器。当使用SimpleCursorAdapter,你必须为每个行指定一个布局去使用。例如你想创建一个人们的名字和电话号码的列表,你能可以执行一个问题,它返回一个Cursor,为每个人包含一行名字和号码。你可以创建一个字符串队列。

String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, 
                        ContactsContract.CommonDataKinds.Phone.NUMBER};
int[] toViews = {R.id.display_name, R.id.phone_number};
当你构造SimpleCursorAdapter,传递到布局,Cursor包含这个结果,


SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
        R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
ListView listView = getListView();
listView.setAdapter(adapter);
六 处理点击事件

通过实现一个AdapterView.OnItemClickListener接口,你可以为每个项的点击事件做响应,例如:

// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        // Do something in response to the click
    }
};

listView.setOnItemClickListener(mMessageClickedHandler); 









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值