视频链接 : http://www.imooc.com/video/10165
1.看第一个例子,当我们按比例放置多个TextView时,在没有添加内容或者内容没有超过分配的宽度时,这些TextView会很正常的显示在屏幕上,但是当某一个TextView 的内容宽度多于分配的宽度时, 就会 出现 如下情况。
~~~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="@color/person_center_item1"
android:gravity="center"
android:text="1234646156" />
<TextView
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="2"
android:background="@color/person_center_item2"
android:gravity="center"
android:text="2" />
<TextView
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="3"
android:background="@color/person_center_item3"
android:gravity="center"
android:text="3" />
</LinearLayout>
~~~
![](https://box.kancloud.cn/2016-02-23_56cbd2db5f8e0.jpg)
出现这种情况是因为 他们的对齐当时是根据父控件的基线进行对齐的,很明显的可以看到123..... 和 2 ,3 的下边界是在一条线上的。解决这种问题 只要这 上面代码的LinearLayout 中添加如下代码就可以了。android:baselineAligned="false"
![](https://box.kancloud.cn/2016-02-23_56cbd2db7d1ba.jpg)
2.当我们把上面代码 的第一个TextView 改成 wrap_content 之后 ,我们会发现 第一个TextView 原本只占1/6宽度的,现在却占了一半左右的宽度。这是为什么呢?
![](https://box.kancloud.cn/2016-02-23_56cbd2db92d92.jpg)
这是因为在分配宽度的时候 ,首先会给每个TextView分配他们自己layout_width 值的宽度,然后将剩下的按照比列依次加给3个控件。
3.然后我们把3个TextView的宽度全部改成 match_parent,然后我们发现屏幕上只有第一、二个TextView了,第三个不见了。这又是为什么呢?
![](https://box.kancloud.cn/2016-02-23_56cbd2dbb0870.jpg)
原因和第2点一样,首先给每个TextView分配 match_parent的宽度,然后再把剩下的宽度加到每个控件上。我们假设屏幕宽度为480, 第一次分配的宽度为 480 * 3; 然后 用屏幕宽度 减去 第一次分配的宽度,也就是480-480*3 得到的是 -960, 然后把 -960 分成6份.
1/6 加到第一个TextView上: 480 +(-960 /6) = 320;
2/6 加到第一个TextView上: 480 +(-960 /6)* 2 = 160;
3/6 加到第一个TextView上: 480 +(-960 /6)* 3 = 0;
第三个TextView为0,所以不显示。
4.当我们想在LinearLayout中让一个TextView 占一半屏幕宽度的时候,我们可以这样做:让TextView的layout_weight值为1,或者其他你喜欢的,然后在父控件LinearLayout中声明 **android****:weightSum=****"2"**或者自己定义值得2倍就OK了!效果如下。
![](https://box.kancloud.cn/2016-02-23_56cbd2dbcd919.jpg)
5.对于以 layout_XXX,这样格式的属性设置,这些属性是交给父控件去分配的 ,像layout_width、layout_height等,像layout_gravity="center",就是 将该控件置于父控件的中心位置。而那些没有以layout_开始的属性则是控件自身控制和分配的。
- 前言
- 面试中关于 layout_weight 笔记
- 关于安装APK到Genymation 模拟器报 install failed cpu abi incompatible
- Error:Execution failed for task ':app:packageDebug'. > Duplicate files copied in APK META-INF/LICENS
- 仿QQ6.1手势锁
- 当expandlistview的getGroupView或者getChildView中包含checkbox时,前者点击不可用
- 在genymotion官网下载genymotion-2.6.0-vbox.exe安装完成模拟器不可用的问题解决
- android studio logcat 打印不出信息
- 去掉友盟分享里面不需要的平台
- 在有EditText的界面 默认情况下不获取焦点(不弹出输入框)
- android studio 导入第三方库的记录
- Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录
- Edittext In Listview,当listview的item中有edittext时,怎么保存edittext的值?