Android中的android:layout_width和android:width

那我现在对这句话重新概括一下:“因为设置了button1的权重最小,所以它占用的布局优先级就越高”,也许在Android里面布局并没有优先级之说,我这里只是为了说明问题,自己定义的,所以朋友们不要拍砖。

那首先分析一下当layout_widtd属性设置为fill_parent的時候,即充满父布局,当然意思是這個控件要根據weight的设置尽可能的
大,因此,依上例而论,button1的weight设为1,button2的weight设置为2.即button的优先级最高,因此,要填充父布局就要button1先來填充,尽可能的大,那这个尽可能又是多少呢,這就要综合Layout里其他控件的weight值了,然后做一下运算,button1占据2/3,button2
占据1/3.你也可以把button2设置为一個非常大的數,比如2000,此時在Graphical
Layout模式下可以看到button1填充满了整个宽度,而看不到button2的影子,事实上button2还是存在的,你把鼠標指向
button1的後面就可以看到一个长长的竖条,那个就是button2,已经非常非常小了。

因此,在layout_width设置为fill_parent的時候,weight权值越小所代表的是你的控件要优先尽可能的大。

接着是当layout_weight设置为wrap_content的時候,即适应內容的宽度,意思是这个控件要尽可能的小,只要能把內容显示出來就可以
了,同樣的,如果把button1和button2的layout_weight設置為wrap_content後,button1的weight為
1,button2的weight為2.那麼button1要優先盡可能的小,而button2也要盡可能的小,只是優先級不一樣,因為設置了
weight,所以這兩個控件總的寬度要填滿父佈局的寬度,所以就又要計算每個控件所占据的
大小,此時,button1的優先級較高,共有兩份,一份1/3,一份2/3,button1要盡可能的小,那button1當然要選1/3,因此,我們
看到的效果反而是button2佔據的較大。這裡要說的是如果把權值同樣做如下設置:button1為1,button2為2000,那button1是
不是就要佔據1/2000的空間呢?這麼理解就錯了,剛才說了,要
尽可能的小,但这个小是有一個限度的,那就是wrap_content,就是還要是內容完完整整的顯示出來,同樣的,盡可能的大也是有一個限度的,那就是
父佈局的寬度。因此,在layout_width設置為wrap_content的時候,weight所代表的是你的控件要優先盡可能的大。

所以,要對weight做了解,要深深的理解下面兩句話:
在layout_width設置為fill_parent的時候,layout_weight所代表的是你的控件要優先盡可能的大,但這個大是有限度的,即fill_parent.
在layout_width設置為wrap_content的時候,layout_weight所代表的是你的控件要優先盡可能的小,但這個小是有限度的,即wrap_content.

layout_height 同 layout_width.

(繁体字是不是看起来很心烦,哈哈)

下面来贴几张图,加以说明:

1. layout_width="fill_parent", button1的weight=1,button2的weight=2;

2.layout_width="fill_parent", button1的weight=1,button2的weight=2000;

------------------------------------------------------------------------------------------------------------------------------------------------

3.layout_width="wrap_content", button1的weight=1,button2的weight=2;

4.layout_width="wrap_content", button1的weight=1,button2的weight=2000;

时间: 2024-11-07 00:52:21

Android中的android:layout_width和android:width的相关文章

android中少用静态变量(android静态变量static生命周期)

在android中,要少用静态变量. 我现在做的一个应用中,之前的开发人员使用静态变量来存储cookie,这个全局的静态变量用来验证身份. 这时客户反应,应用长时间不使用,再次使用,会提示身份过期. 后来经查,问题基本确定在静态变量上. 上stackoverflow查了android中static变量的生命周期,有人这么说 Lifetime of a static variable: A static variable comes into existence when a class is l

05课Android中的布局2---【呼啸Android开发视频教程】

今天是第五课,主要讲了android中的tableLayout和frameLayout. 没有讲解absoluteLayout.这个布局我们应该杜绝使用. 播放地址: 第五课点击打开 关于呼啸Android视频: 这套视频的最大特点是实用,哪些该讲,哪些不该讲,我都做了细致的考虑.没有虚头八脑,卖弄学问,也没用冗长的东西.一切都力求简单明了,清晰透彻.

在android 中发送和解析json ,android处理json字符串

在我开发的应用程序,我想以JSON对象的形式将消息发送到一个Django服务器和解析来自服务器的JSON响应,并填充自对应的视图列表. 我以前对json懂一点,我想从服务器返回如下这种格式 { "post": { "username": "someusername", "message": "this is a sweet message", "image": "http://

Android中通过反射来设置显示时间

这个Toast的显示在Android中的用途还是很大的,同时我们也知道toast显示的时间是不可控的,我们只能修改他的显示样式和显示的位置,虽然他提供了一个显示时间的设置方法,但是那是没有效果的(后面会说到),他有两个静态的常量Toast.SHORT和Toast.LONG,这个在后面我会在源码中看到这个两个时间其实是2.5s和3s.那么我们如果真想控制toast的显示时间该怎么办呢?真的是无计可施了吗?天无绝人之路,而且Linux之父曾经说过:遇到问题就去看那个操蛋的源代码吧!!下面就从源代码开

Android中通过反射来设置Toast的显示时间

这个Toast的显示在Android中的用途还是非常大的,同一时候我们也知道toast显示的时间是不可控的.我们仅仅能改动他的显示样式和显示的位置,尽管他提供了一个显示时间的设置方法.可是那是没有效果的(后面会说到).他有两个静态的常量Toast.SHORT和Toast.LONG,这个在后面我会在源码中看到这个两个时间事实上是2.5s和3s. 那么我们假设真想控制toast的显示时间该怎么办呢?真的是无计可施了吗?天无绝人之路,并且Linux之父以前说过:遇到问题就去看那个操蛋的源码吧.!以下就

Android中Dialog对话框的调用及监听

Android中经常会需要在Android界面上弹出一些对话框提示用户,比如App的退出的时候都会有各种框来挽留你的心,支付宝的时候输入密码的密码框,非常常见及其实用的功能,类似于JS中的alter,C#中C/S中常用MessgeBox,总而言之就是一个功能弹,弹,弹,本文就简单的叙述一下Dialog的各种弹框使用及监听,顺便写了一个简单的自定义弹框,接下来请看正文: 一般对话框 先看下整个App页面: 看下一般对话框的结果: 具体代码的实现,其中定义了两个按钮,一个是确定(PositiveBu

Android中AsyncTask使用具体解释

在Android中我们能够通过Thread+Handler实现多线程通信.一种经典的使用场景是:在新线程中进行耗时操作.当任务完毕后通过Handler向主线程发送Message.这样主线程的Handler在收到该Message之后就能够进行更新UI的操作.上述场景中须要分别在Thread和Handler中编写代码逻辑,为了使得代码更加统一,我们能够使用AsyncTask类. AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用. Andro

android中的事件传递和处理机制

一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下.现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难.总之,不要自己打击自己,要相信自己能掌握这块知识.好了,下面是我今天的收获,希望也 能对你有一点帮助. 一.拟人化来理解android中的事件机制 其实android中的事件传递与处理机制跟我们生活中的事件处理是一样的.这里有一个生活中的例子,很能说明这个问题.阐述如下: 你是一个公司的员工,你的上头有一个主管,主管上头呢还有一个经

在android中使用SQLite数据库

SQLite数据库以其轻量.体积小等特点,使其在开发中运用的非常广泛,在前面的博客中我也介绍过在Cocos2d-x中使用SQLite数据库,这篇博客是介绍在Android中使用SQLite数据库,Android中直接集成了SQLite数据库,使用起来非常方便,不需要向Cocos2d-x中那样添加外部文件 我将使用SQLite数据库实现一个下图所示的效果,打开app后会弹出下图所示的界面 单击createDatabase按钮后,在logcat中可以看到打印了一条提示信息,表示数据库创建成功,当再次

(转)详解Android中AsyncTask的使用

转载自:详解Android中AsyncTask的使用 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类a