前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试中关于 layout_weight 笔记

面试中关于 layout_weight 笔记

作者头像
103style
发布2022-12-19 12:11:54
1660
发布2022-12-19 12:11:54
举报

视频链接 : http://www.imooc.com/video/10165

1.看第一个例子,当我们按比例放置多个TextView时,在没有添加内容或者内容没有超过分配的宽度时,这些TextView会很正常的显示在屏幕上,但是当某一个TextView 的内容宽度多于分配的宽度时, 就会 出现 如下情况。

代码语言:javascript
复制
<?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>

出现这种情况是因为 他们的对齐当时是根据父控件的基线进行对齐的,很明显的可以看到123..... 和 2 ,3 的下边界是在一条线上的。解决这种问题 只要这  上面代码的 LinearLayout 中添加如下代码就可以了。 android:baselineAligned="false"

2.当我们把上面代码 的第一个TextView 改成 wrap_content 之后 ,我们会发现 第一个TextView 原本只占1/6宽度的,现在却占了一半左右的宽度。这是为什么呢?

这是因为在分配宽度的时候 ,首先会给每个TextView分配他们自己layout_width 值的宽度,然后将剩下的按照比列依次加给3个控件。

3.然后我们把3个TextView的宽度全部改成 match_parent ,然后我们发现屏幕上只有第一、二个TextView了,第三个不见了。这又是为什么呢?

原因和第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了!效果如下。

5.对于以 layout_XXX,这样格式的属性设置,这些属性是交给父控件去分配的 ,像 layout_width、 layout_height等,像layout_gravity="center",就是 将该控件置于父控件的中心位置。而那些没有以layout_开始的属性则是控件自身控制和分配的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档