解决安卓中XML文件声明高度 宽度无效的问题

搬砖的时候,需要在popupwindow里嵌套一个ListView用来展示动态菜单。重写了ListView的高度为所有的Item高度之和。 item:

    <?xml version="1.0" encoding="utf-8"?>
    <Button xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginTop="10dp"
        style="@null"
        android:maxHeight="45dp"
        android:background="@drawable/box"
        android:text="取消"
        android:textColor="#1a99f3"
        android:textSize="15sp" />

这里可以看到,我声明了高度为45dp。但是添加到ListView的时候,却发现在手机上显示的高度明显大于45dp。

image

根据图片我们可以看到,下面三个按钮显示的高度跟第一个显示的高度,差了差不多两倍多的高度。

原来原因在这里:

我们在是使用

inflater.inflate(R.layout.item_popumenu, root, attachToRoot);

来添加到父布局中,但是对于这几个参数却没有去研究。以下是我在网上找到的:

1. 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。
2. 如果root不为null,attachToRoot设为true,则会给加载的布局文件的指定一个父布局,即root。
3. 如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。
4. 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。

其实也看得我云里雾里,但是大概知道解决的方法了。

View view = inflater.inflate(R.layout.item_popumenu, parent, false);

这里的parent一定要填它的父布局,第三个参数设置为false就好了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

JS中使用EL表达式

 2.JS代码是单独的.js 文件, 通过引入到 JSP中来.这时候可通过提前定义JS变量的形式的解决。在JSP页面上定义JS变量 contextPath.这样...

591
来自专栏菜鸟计划

我的HTML总结之常用基础便签

HTML:是Hyper Text Markup Language(超级文本标记语言)的缩写,HTML不是一种程序,只是一种控制网页中数据显示的标识语言。 HTM...

3415
来自专栏从零开始学 Web 前端

从零开始学 Web 之 DOM(五)元素的创建

742
来自专栏前端萌媛的成长之路

display:none和visibility:hidden的区别

1432
来自专栏柠檬先生

zepto 基础知识(6)

101.$.ajax   $.ajax(options) 类型:XMLttpRequest   执行Ajax请求。他可能是本地资源,或者通过支持...

24410
来自专栏十月梦想

less快速入门

我们都知道写 CSS 代码是有些枯燥无味的,尤其是面对那些成千上万行 CSS 代码的项目。你始终在相同的地方使用相同的规则并且在你的编译器中搜索和替换每次颜色的...

773
来自专栏青枫的专栏

day41_jQuery学习笔记_02

下面是jQuery 提供额外的事件,用于完善javascript缺失的事件 详解如下:

642
来自专栏个人随笔

列表,表格与媒体元素

一.列表   列表就是信息资源的一种展示形式  1.列表及其应用    1)无序列表      无序列表由<ul>标签和<li>标签组成,使用<ul>标签作为无...

26610
来自专栏菩提树下的杨过

jQuery:delegate中select()不起作用的解决方法

jQuery有一个很好用的delegate(事件委派)功能,可以给当前以及将来(动态添加)的元素绑定一个事件处理函数。 比如下面的例子,动态添加一个输入文本框后...

1925
来自专栏GuZhenYin

C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码

前言 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. .NET core2.0 ...

1909

扫码关注云+社区