MATCH_PARENT 如果同级视图较大,则 WRAP_CONTENT 如果同级视图较小

2024-06-28

我在布局中有两个视图。 我会打电话给他们View A and View B分别。

┌──────┐
│┌─┐┌─┐│
││A││B││
│└─┘└─┘│
└──────┘

父布局的高度(包括View A and View B) is WRAP_CONTENT.

这里,高度为View B is WRAP_CONTENT。也就是说,它的高度可以根据其内容而改变。

我想做的是

  1. Set View A的高度为View B的高度如果View A的内容短于View B的内容。
  2. Set View A的高度到它自己内容的高度如果View A的内容高于View B的内容。

So,

① 如果内容View B更高,那么View A的高度设置为View B的身高。

       ┌──────┐      ┌──────┐
       │┌─┐┌─┐│      │┌─┐┌─┐│
       ││ ││ ││      ││A││ ││
I want ││A││B││, not │└─┘│B││.
       ││ ││ ││      │   │ ││
       │└─┘└─┘│      │   └─┘│
       └──────┘      └──────┘

② 如果内容View B更短,那么View A的高度是View A自身内容的高度。

       ┌──────┐      ┌──────┐
       │┌─┐┌─┐│      │┌─┐┌─┐│
       ││ ││B││      ││A││B││
I want ││A│└─┘│, not │└─┘└─┘│.
       ││ │   │      └──────┘
       │└─┘   │
       └──────┘

如果父母是LinearLayout (Horizontal), 环境View A的高度为WRAP_CONTENT违反情况1,并且设置View A的高度为MATCH_PARENT违反情况2。

如果父母是RelativeLayout, 环境View A对齐其父级的顶部和底部违规RelativeLayout的条件: Note that you cannot have a circular dependency between the size of the RelativeLayout and the position of its children. For example, you cannot have a RelativeLayout whose height is set to WRAP_CONTENT and a child set to ALIGN_PARENT_BOTTOM.

我怎么解决这个问题?


有不同的方法可以解决这个问题,例如创建您自己的自定义ViewGroup,可能基于水平LinearLayout。然而,我认为最直接的解决方案是在运行时动态设置要求。

考虑以下只有两个布局TextViews 处于水平方向LinearLayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#f00"
    android:padding="10dp" >

    <TextView
        android:id="@+id/first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#0f0"
        android:padding="5dp"
        android:text="One line" />

    <TextView
        android:id="@+id/second"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00f"
        android:padding="5dp"
        android:text="Two\nlines"
        android:textColor="#fff" />

</LinearLayout>

两者的包裹高度基本符合你的第一个要求。

现在要求 2:出于演示目的,我打破了第二个要求TextView的文本分成两行,以使其比第一行更高。为了做出第一个TextView匹配它的高度,你所要做的就是这样:

LinearLayout container = (LinearLayout) findViewById(R.id.container);
final TextView first = (TextView) findViewById(R.id.first);
final TextView second = (TextView) findViewById(R.id.second);

container.post(new Runnable() {
    @Override public void run() {
        int h1 = first.getMeasuredHeight();
        int h2 = second.getMeasuredHeight();
        if (h1 < h2) first.getLayoutParams().height = h2;

    }
});

“技巧”是发布到视图的队列,确保在测量子级并具有有效高度之前不会执行逻辑。对于要求 2,只有当第二个视图更高时才需要更改第一个视图的高度,这正是第一个视图中的部分run()方法确实如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATCH_PARENT 如果同级视图较大,则 WRAP_CONTENT 如果同级视图较小 的相关文章

随机推荐

  • 在knockoutjs中使用checked绑定时防止事件冒泡

    我正在使用 KnockoutJs 和 Twitter Bootstrap 构建 UI 我正在使用checked绑定在名为 Bootstrap 的对话框中dropdown toggle div class btn group a class
  • maven - 如何解决此错误:“XXX 的 POM 无效”?

    我正在使用 Maven 构建一个简单的项目 我无法构建它 因为缺少传递依赖项 即objenesis 1 0 我在调试模式下运行 Maven 并收到以下消息 DEBUG WARNING The POM for org jmock jmock
  • 无法在 Windows 中安装 mysql-python(较新版本)

    I have mysql pythonv1 2 4 在我的机器 Windows 8 上安装得很好 我正在使用Python 2 7 每次尝试升级到 v1 2 5 时 我总是遇到以下错误 从 v1 3 7 开始仍然发生 C Users User
  • tokio::spawn(my_future).await 和 my_future.await 有什么区别?

    给定一个异步函数及其相应的 future 可以说 async fn foo gt Result
  • Java的assertEquals方法可靠吗?

    我知道 比较两个时存在一些问题Strings 看起来String equals 是一个更好的方法 嗯 我正在做 JUnit 测试 我倾向于使用assertEquals str1 str2 这是断言两个字符串包含相同内容的可靠方法吗 我会用a
  • 从 Django 1.11 升级到 Django 2.1 后 request.POST 为空

    这篇文章是上一个问题的后续 Django request POST 空 https stackoverflow com questions 53227767 django request post empty 我有一个使用 Python 3
  • 连接MySQL服务器的Shell脚本

    我有大约 20 个不同的 MySQL 实例 我想轻松连接到它们 而不必每次都输入完整的地址 用户名和超长的密码 我可以做什么来编写此过程的脚本 这样我所要做的就是为每个实例运行一个 sh 脚本 到目前为止我所拥有的 保存为 instance
  • 如何加密 server.ssl.key-store-password 值并在 Spring Boot 中使用它

    我想知道我们是否可以加密 server ssl key store password 值并将其存储在 application properties 文件中 而不是以纯文本形式存储 我找不到任何关于此的文档 对此的任何帮助都将受到高度赞赏 提
  • 带偏移量的 CSS 背景渐变

    我将渐变作为背景图像应用到我的身体上 然后我在顶部添加了 255px 偏移background position 0 255px 它看起来相当不错 除了一个小问题 当然渐变不是在页面底部结束 而是在下面 255px 处结束 有没有什么简单的
  • 为什么 -Winit-self 与 -Wuninitialized 分开

    这个问题 https stackoverflow com q 22963405 10396是关于让 gcc 编译器在您输入错误并用自身初始化变量时发出警告 int f int i i return i 事实证明你需要 Winit self
  • “警告:初始化使指针来自整数而不进行强制转换”。但我认为不会

    我收到一个奇怪的编译警告 它是间歇性的 并且不会出现在每个版本中 我收到以下行的警告 初始化使指针来自整数而不进行强制转换 callbackTable callbacks generateLoggingCallback 并且 为了完整性 这
  • 删除和插入不同高度的单元格时 UITableView 动画出现故障

    我在同时删除和插入单元格时遇到 UITableView 提供的动画问题 我有一个单元格列表 我们可以称它们为问题 当点击一个问题时 它应该在其下方添加一个单元格以显示该问题的答案 如果已经显示另一个答案 则应从表中删除该答案 当插入的单元非
  • 如何为字符串生成唯一的哈希码

    是否有任何函数可以为相同的字符串提供相同的哈希码 我在创建 2 个不同的字符串 但内容相同 时遇到麻烦 它们的哈希码不同 因此未在Dictionary 我想知道什么GetHashCode 函数Dictionary当键是字符串时使用 我正在这
  • 在 Xbox UWP 中禁用 Web 视图的指针模式

    有没有办法禁用指针模式WebView在 Xbox UWP 应用程序中 我无法使用RequiresPointer财产自WebView延伸自FrameworkElement而不是来自Control 这是我的示例 XAML
  • 检测 div 何时溢出

    我试图让我的网站根据屏幕的大小流动 我创建了这个 http jsfiddle net aboveyou00 7NeZz 1 http jsfiddle net aboveyou00 7NeZz 1 它运行得很好 当两个内部 div 适合时
  • 使用javascript检测MP4视频是否有音轨

    我正在网页上为 MP4 视频创建自定义控制器 控制器包括音量滑块 一些要播放的视频没有音轨 最好禁用这些视频的音量滑块 这样用户在更改音量滑块的位置没有效果时就不会感到困惑 是否有检查 MP4 文件是否有音轨的属性或技巧 jQuery 是一
  • 我应该写更多描述性的函数名称还是添加注释?

    这是一个与语言无关的问题 但我在想人们在可读性和可维护性方面更喜欢什么 我的假设情况是 我正在编写一个函数 给定一个序列将返回一个删除了所有重复元素的副本 并且顺序颠倒了 This is an extremely well written
  • 在 joomla 中设置前端会话超时限制

    如何在 joomla 2 5 中设置前端用户的会话超时限制 我在全局配置中设置了会话生命周期选项 但它仅在后端设置了限制 你可以评论该行JHtml behavior keepalive 在文件顶部 模块 mod login tmpl def
  • PYTHON:如何将星号 (*) 作为命令行参数传递

    我正在尝试制作一个 python 脚本来搜索文件中的单词 如果我通过了txt它只会在文件中查找 txt扩展名 但我想通过 作为搜索参数every files if sys argv 4 不工作 如果我尝试 print sys argv 4
  • MATCH_PARENT 如果同级视图较大,则 WRAP_CONTENT 如果同级视图较小

    我在布局中有两个视图 我会打电话给他们View A and View B分别 A B 父布局的高度 包括View A and View B is WRAP CONTENT 这里 高度为View B is WRAP CONTENT 也就是说