草庐IT

xml - android: 简单的 LinearLayout 和 fill_parent 问题

coder 2023-11-30 原文

我确信我遗漏了一些简单的东西......

背景:

我是 Android 和 UI 设计的新手,我只是想尝试一下布局。现在我想在文本标签上堆叠一个复选框。我正在使用以下 xml 布局,工作正常:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <CheckBox android:id="@+id/check_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/check_box_text" />

    <TextView android:id="@+id/dummy_display"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/dummy_label" />

</LinearLayout>

我的测试(只是为了了解它是如何工作的):

  • 场景 1) 当我将 CheckBoxlayout_height 设置为 "fill_parent" 时,CheckBox 占据整个屏幕并居中对齐(即 - TextView 消失)。

  • 场景 2) 如果我改为TextViewlayout_height 设置为 "fill_parent"CheckBox 确实NOT 消失。事实上,什么都没有消失,布局看起来与上面的 xml 一样,所有内容都被推到左上角。

问题(和评论):

为什么场景 1 会这样运作?

这种行为对我来说似乎不一致。我认为 fill_parent 只是应该让元素填充父级中可用的任何空间。所以对我来说,TextView 似乎应该得到它需要 的任何空间(因为它是 wrap_content),但是 CheckBox 应该占据剩余的空间(因此 TextView 将被强制到屏幕底部,但不是不可见的)。换句话说......场景 2 对我来说有意义,但场景 1 没有。

请解释:-).

谢谢,

汤姆

最佳答案

LinearLayout 将它作为一个单独的步骤一步一步地测量它,所以在你的第一个例子中 它看到第一个 child 想要拥有它给它的所有可用高度。 在您的第二个示例中,它为第二个 child 提供了所有可用的位置。 如果您希望复选框占据除文本框所需位置之外的所有位置,您应该更改 checkbox 的layout_height 为wrap_parent 并设置每个child 的layout_weight 属性,layout weight 表示在所有child 被测量后应该添加多少可用位置给他们每个人。更具体地说,它是按步骤工作的:
1) LinearLayout 的Parent 告诉线性布局它可以有多大
2) LinearLayout 询问所有它的 child ,以便他们指定他们的布局参数并分配可用空间。
3)如果仍有可用空间,它会根据 child 的体重(布局体重在 0 和 1 之间,0 - 默认情况下)在 child 之间分配它
希望对你有帮助
编辑:
我检查了 LinearLayout 源代码,发现如果线性布局有 FILL_PARENT 布局参数而不是零权重测量代码会将布局高度设置为 WRAP_CONTENT 然后根据权重在所有 child 之间分配空间。

关于xml - android: 简单的 LinearLayout 和 fill_parent 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958388/

有关xml - android: 简单的 LinearLayout 和 fill_parent 问题的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  6. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  9. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  10. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

随机推荐