首页 > 编程知识 正文

为什么img是inline还可以设置宽高,自定义linearlayout

时间:2023-05-03 16:48:55 阅读:143821 作者:1023

线性布局-权重

LinearLayout-weight :为屏幕中的每个剩余空间按权重分配空间(权重、百分比) )。) ) ) )。

(1) layoutout_height='0dp '的情况

剩馀空间=(屏幕高度-2*0)=屏幕高度

屏幕高度1/3 0=1/3屏幕高度

屏幕高度2/3 0=2/3屏幕高度

)2)如果layoutout_height='wrap_content '

剩下的空间=(画面高度-2*wrap_content ) ) ) ) ) ) ) ) ) ) ) )的空间) ) ) ) ) ) 652 )

(屏幕高度-2wrap_content )1/3 wrap_content

(屏幕高度-2wrap_content )2/3 wrap_content

思考:如果将layout_weight=2的控件的权重更改为layout_weight=200,layout_weight=1的控件会消失吗? 不。 因为如果layout_height是wrap_content,则layout_weight表示控件优先于尽可能小。 也就是说,weight值越小,控件占用的空间越小,但这是有限的。 也就是说,wrap_content也

)3)如果layouto_height='match_parent '

剩馀空间=(屏幕高度-2屏幕高度)=-1屏幕高度

-1屏幕高度1/3屏幕高度=2/3*屏幕高度

-1屏幕高度2/3屏幕高度=1/3*屏幕高度

Paste_Image.png

思考:同样,如果将layout_weight=2的控件的权重更改为layout_weight=200,则会消失吗? 此时,layout_weight=2的控件不再显示在屏幕上,而是一个小横条,layout_weight=1的控件显示在整个屏幕上。 这是因为如果layout_height是match_parent,则layout_weight表示控件优先于尽可能大。 也就是说,weight的值越小,控件所占的空间就越大,但其大小是有限的。 即match_parent。

总结:

如果layout_height设置为match_parent,则layout_weight表示您的控件优先尽可能大,但该大小是有限的。 也就是说,match_parent(layout_width与layout_ (相同

当layout_height设置为wrap_content时,layout_weight表示首选您的控件尽可能小,但这是有限的。 这意味着wrap_content(layout_width与layout__相同

如果未设置Layout_weight属性,则默认值为0。

将控件放在水平的最右边

1.Layout_gravity、gravity和layout _ marginright/layout _ margin left的区分

图形

此view内容的限定。 例如,在button的text .中,可以将其text设定在view的靠左、靠右等位置。 以button为例,android:gravity='right '的button上面的文字靠右。

layout _ marginright/layout _ margin left

距元素右端/左端的距离。

Layout_gravity

设置view相对于父视图的位置。 例如,如果Linearlayout包含button,并且希望将该button定位在左对齐、右对齐等位置,则可以使用此属性进行设置。 以button为例,Android : layout _ gravity=' right '的button靠右。

注意:在LinearLayout中,设置Layout_gravity属性。

Android : orientation=' vertical '时,只有水平方向的设定起作用,垂直方向的设定不起作用。 即,left、right、center_horizontal是有效的;

如果Android : orientation=' horizontal ',则只有垂直设置起作用,而水平设置不起作用。 也就是说,top、bottom和center_vertical是有效的。

2 .控制水平偏右示例:

两个控件显示在右边

安卓: layout _ width=' fill _ parent '

安卓: layout _ height=' wrap _ content '

安卓: orientation=' horizontal '

安卓: gravity=' r

ight" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="保存" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="清空" />

- 水平方向中布置两个TextView一个左,一个右,此时借用LinearLayout的gravity、Layout_gravity属性等不能得到预想的结果,使用RelativeLayout的android:layout_alignParentRight属性能实现预期的结果。

# LinearLayout-divider

在android3.0及后面的版本在LinearLayout里增加了个分割线:

android:divider="@drawable/shape"

android:showDividers="middle|beginning|end"

分割线如果是图片那就直接使用图片就行,如果要使用颜色就必须使用shape来显示,直接使用颜色或Color是没有用的。使用shape的时候要注意设置size属性不设置宽高分割线就不会显示出来,如果使用line那填充颜色只能使用stroke来显示颜色。

android:showDividers="end"属性使用要注意:在android6.0一下,画最后一条分割线时是画在最后一个Child下面的,当最后一个child设置为GONE,最后一条分割线就会画到linearLayout顶部去;在6.0以上就改为画到最后一个Visibility不为GONE的Child的下面了,具体分析见[这里](http://angeldevil.me/2015/12/29/LinearLayout%E5%9D%91%E7%88%B9%E7%9A%84showDividers%E5%B1%9E%E6%80%A7/)。

这里重点说下LinearLayout的虚线divider的使用以及遇到的问题。一般步骤如下:

###### 1.先在drawable目录下创建一个线line的shape文件

比如此divider_dash.xml文件代码:

android:right="5dp"

android:left="5dp">

android:width="1dp"

android:color="#E5E5E5"

android:dashGap="4dp"

android:dashWidth="3dp"/>

这里画线必须要注意是:

- 只能画水平线,画不了竖线;

- 线在整个形状区域中是居中显示的;

- 线左右两边会留有空白间距,线越粗,空白越大;

- 线的高度是通过stroke的android:width属性设置的;

- **size的height必须大于(等于都不行!)stroke的width,否则,线无法显示;**

- size的android:height属性定义的是整个形状区域的高度。

###### 2.然后在自己的布局文件中添加一个LinearLayout作为不同view的分割线

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:showDividers="middle"

android:divider="@drawable/divider_dash"

android:background="@android:color/white"

android:orientation="vertical" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="经济舱" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="退改签说明" />

虚线画好了,布局设置好了,遗憾的是,上述的方法和代码也许在Android 3.0以下可以画出虚线,但在Android 3.0以上最新Android SDK设备上,代码在真机上跑起来,根本画不出虚线,画出的而是一条实线!

究其根本原因,是因为在Android 3.0以上,Android系统在众多绘图操作时候默认开启了硬件加速,因此导致在最新的高版本Android系统上画dash gap line失效。解决方法主要有以下:

- 在Java代码中给LinearLayout调用setLayerType(View.LAYER_TYPE_SOFTWARE, null)

- 在LinearLayout的xml布局文件设置属性android:layerType="software"

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。