如何在 Android 中创建两个视图,每个视图使用 50% 的高度,除非其中一个较小?

2024-01-13

想象一个完整的 Android 设备屏幕,我希望它分为两个部分:

  1. 上半部分包含文本,该文本可能大于可用空间(或不大于可用空间),因此文本将滚动(即 ScrollView 内的 TextView)
  2. 下半部分包含一个 MapView 控件。

具体看一些场景:

  1. 如果文本很小,我希望地图占据更多空间,即超过 50%。所以也许 20% 是文字,80% 是地图。
  2. 如果文本较大,则最多仅占用屏幕空间的 50%,然后滚动。所以 50% 是地图,50% 是文字。

目前,我已经为这两个部分分配了权重,这还不错,但如果文本很小,地图就不会扩展以占据空间,并且布局会浪费地图可能会出现的间隙有用地使用。

我已经尝试了很多组合,但不知道如何实现这一点。我知道自己想要什么,但不知道如何获得可用的视图来交付它,这对我来说似乎是一种常见的经历。我希望有一种简单的方法可以做到这一点。

请随意让我看起来像个傻瓜,并指出我错过的明显属性:-)

=================================================== ===================

据我所知,仅在声明性 XML 中无法做到这一点,需要在代码中完成。我将文本部分的高度设置为wrap_content,权重设置为0(不调整大小),并将地图设置为权重=1(即占用剩余空间)。然后,我检查文本部分(在 ScrollView 中)是否占用了太多空间,如果是,则将其缩小。需要更改此代码以支持不同的布局方向。

private void fixLayoutProportions()
{
    float maxPercentageOfScreenForText = 50/100;
    LinearLayout container = (LinearLayout)findViewById(R.id.container);
    ScrollView eventText = (ScrollView)findViewById(R.id.text_scroller);
    int heightAvailable = container.getHeight();
    int scrollerHeight = eventText.getHeight();
    if ( scrollerHeight>(heightAvailable*maxPercentageOfScreenForText) )      // Text section using too much space
    {
        eventText.getLayoutParams().height = (int)(heightAvailable*maxPercentageOfScreenForText) ;
        eventText.invalidate();
    }
}

您可以通过将所有内容放入 LinearLayout 并更改以下参数来实现:

  • 线性布局的权重总和 http://developer.android.com/reference/android/widget/LinearLayout.html#setWeightSum%28float%29
  • 儿童体重 http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 中创建两个视图,每个视图使用 50% 的高度,除非其中一个较小? 的相关文章

  • 单击 RecyclerView 内的 ImageView 时更改图像资源

    每当我单击它时 单击图像 而不是项目 我都会尝试更改回收器视图内特定位置的设备图像资源 我尝试将 setOnClickListener 放入 onBindViewHolder 方法中 但只有最后一个项目受到影响 这是我的回收者视图 http
  • 关闭 Android 中的飞行模式

    如果 num gt 50 我想关闭飞行模式 我实现了这段代码 来自在 Android 中切换飞行模式 https stackoverflow com questions 5533881 toggle airplane mode in and
  • 使用 Google Places Autocomplete API 的 REQUEST_DENIED 响应

    我正在开发 Android 应用程序 它使用谷歌的地点自动完成 API 当尝试点击以下网址时 我得到的答复如下 预测 状态 REQUEST DENIED 我从下面的链接获得了 API 密钥Google API 控制台 http code g
  • 检索子值 -firebase-

    System out println ref child email protected cdn cgi l email protection child email 我正在尝试获取 child 的值 但我始终获取该值的 URL 当我尝试使
  • Android Studio - 错误:未捕获翻译错误:com.android.dx.cf.code.SimException:本地 0001:无效

    我刚刚使用 Android Studio 设置了一台新计算机 并从 bitbucket 导入了我的项目 问题是我现在在尝试构建项目时遇到此错误 信息 Gradle 任务 app clean app generateDebugSources
  • 如何将 EditText 传递给另一个活动?

    Intent intent new Intent this Name class intent putExtra key et getText toString startActivity intent Intent intent getI
  • Android Lollipop prepareAsync() 需要很长时间才能返回

    在 Samsung Galaxy Note 4 上的 Android Lollipop 几周前刚刚从 4 4 4 更新 上 prepareAsync 几乎需要 20 秒来加载实时流 在 4 4 4 上 只需要 2 3 秒 并且没有错误 见下
  • React Native Android 发布 apk 是调试,而不是发布

    我有一个现有的 Android 应用程序 我已根据以下内容将 React Native v0 30 活动添加到项目中docs http facebook github io react native releases next docs i
  • 在 WebView 中完成 AdBlock

    我即将在我的 Android 应用程序中推出 WebView AdBlocking 我想知道这是否会有效地阻止广告 或者在 Webview 本身内是否还有更多工作要做 我尚未修改 基本上我有一个存储在 Android 资产中的主机文件 其中
  • 为什么按钮上的 maxWidth 不起作用以及如何解决它?

    我的布局上有两个按钮 在大屏幕设备 平板电脑 上我想限制它们的宽度 这样它们看起来就不会很荒谬 我希望使用 maxWidth 属性 但它显然在我的场景中没有任何作用 这是布局定义 按钮使用布局的整个宽度 忽略 maxWidth 中的任何值
  • Android - 当不在栏顶部时推送通知空白

    我在使用 Android 推送通知时遇到一个小问题 如果有 3 个通知 并且只有其中一个显示标题和消息 位于酒吧顶部的那个 如果有人知道可能是什么问题 请告诉我 请参阅此链接上的图像 这就是我接收通知的方式http postimg org
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • 监听什么来检测 Android 中的请勿打扰模式更改?

    我希望我的应用程序在手机设置为请勿打扰模式 仅限闹钟 仅限优先级或完全静音 时显示通知 通过聆听 这效果非常好android media RINGER MODE CHANGED在快速设置中检查此模式并在已选择的选项卡中选择模式时 但是 当选
  • 获取可以共享数据的应用程序列表

    此代码显示默认共享对话框 Intent sharingIntent new Intent Intent ACTION SEND sharingIntent setType text html sharingIntent putExtra a
  • Android ListView setSelection() 似乎不起作用

    我有一个ListActivity实现onListItemClick 并调用doSomething 类的功能 后者包含l setSelection position where l is the ListView object 现在有一个on
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 如何在Android中解析xml类型的HTTPResponse

    我有一个 Android 应用程序 我使用 POST 方法来获取响应 这是我的代码 HttpResponse httpResponse httpclient execute httppost HttpEntity resEntity htt
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 异步更新后更新Android Listview

    我正在将 HTTP 调用从同步调用转换为异步调用 由于连接在后台运行 因此当我最初设置列表适配器时 数据不存在 如何在 HTTP 调用后更新列表适配器 我尝试了一些方法 例如在数据发送回之前不设置适配器并再次设置适配器 但没有任何效果 这是

随机推荐

  • 如何构建一个离线工作的 php mysql 应用程序

    我有一个网络应用程序 将数据在线存储在 MySQL 数据库中 它还使用 PHP 代码检索数据 在服务器上执行计算并将结果发送回用户 数据非常简单 从数据库读取并在服务器端操作的名称 描述 价格 增值税 每小时费用 客户通常在互联网连接较差或
  • 为什么ListCellRenderer中需要removeAll()?

    这是我的代码 public class MyRender extends JPanel implements ListCellRenderer ImageIcon on img JLabel name new JLabel JLabel i
  • 处理 docmd.applyfilter 无结果

    我有一个 Access 应用程序 我在其中使用搜索功能 我在表单上有一个文本框和一个搜索按钮 它对用户在文本框中输入的任何内容进行通配符搜索 并在其他控件 文本和组合框 中显示记录 为了实现这一目标 我正在使用DoCmd ApplyFilt
  • 为什么 Composer 抱怨 ext-mongo 扩展?

    当我尝试使用composer安装doctrine mongodb odm bundle和doctrine mongodb时 它会抛出错误 composer require doctrine mongodb odm bundle doctri
  • 在 Gatsby 中设置环境变量

    我使用了这个教程 https github com gatsbyjs gatsby blob master docs docs environment variables md https github com gatsbyjs gatsb
  • GLSL 大气散射不随变换缩放

    我正在尝试在 GLSL 版本 4 10 中实现大气散射 我正在改编此 Shadertoy 着色器中的着色器https www shadertoy com view lslXDr https www shadertoy com view ls
  • 如何在R中为28个多图案例添加注释?

    I have 一个可容纳 28 个地块的空平台 par mfcol c 7 4 mar rep 1 4 oma rep 5 4 lapply 1 28 plot t n xaxt n yaxt n Question 我想知道我怎样才能添加所
  • 上传前预览图像

    我有一个包含四个图像的页面供用户选择 我希望用户能够在上传之前预览网站上的每个图像 下面的 JavaScript 代码仅适用于一张图像 但我希望它适用于通过上传的多张图像
  • Kotlin:在界面中指定输入约束

    假设我有以下界面 interface MathThing fun mathFunction x Int 假设我想对该函数施加的约束是 x 不能为负数 如何确保每次 MathThing 类型的对象不满足此 或任何其他任意 条件时 都会引发 自
  • Tampermonkey GM.xmlHttpRequest 不是函数

    我正在努力解决我的脚本问题 无论我尝试做什么 GM xmlHttpRequest 都会抛出错误 不是函数 我的其余代码工作正常 这是我的代码的删节版本 UserScript name FUT20 Autobuyer Menu namespa
  • 如何在应用程序暂停或销毁时停止服务,但在切换到新活动时不停止服务?

    目前我有一个Service我用它在应用程序打开时在后台播放声音文件 public class BackgroundSoundService extends Service MediaPlayer player public IBinder
  • 按(可能非唯一)值对哈希表进行排序

    我有一个将字符串映射到整数的哈希表 字符串是唯一的 但多个字符串可能会映射到同一个整数 我天真的方法是简单地将 Hashtable 反转为由 Hashtable 的值索引的 SortedList 但问题是 只要两个 Hashtable 的字
  • 适用于 iOS 的 HTML 编辑器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐任何用于编辑 HTML 的原生 iOS 组件吗 我找不到任何谷歌搜索 文字学 http www textasticapp co
  • 从 td 标签获取 href 属性链接 BeautifulSoup Python

    我是 Python 新手 有人建议我使用 Beautiful soup 进行报废 但我遇到了一个问题 即根据第 4 列中的年份从 td 标签第 2 列中获取 href 属性 table class tableFile2 tr th widt
  • 如何断言 Rails 集成测试中没有路由匹配?

    我有一个 Rails 3 集成测试来测试我的路线 它包含以下测试 assert routing category url path foo url path controller gt foo action gt show category
  • 我想在数组中添加项目

    我正在尝试在空数组中添加项目 我正在使用 Dio 包发送 post 请求 所有其他代码都工作正常 但我在这里对这个问题很困惑 我拿了一个空数组 然后我尝试 setState 函数将项目添加到空列表中 每次按下列表时我都会打印该列表 但我得到
  • c++ 将没有时区的postgres时间戳转换为time_t

    我使用 libpq 库从 C 连接到 postgreSQL 我从 postgreSQL 请求并获取日期 没有时区的时间戳 但结果有一个我不知道如何修复的偏移量 Postgres 表 id date integer timestamp wit
  • Redis lua脚本不工作

    我创建了一个 redis lua 脚本来根据关键数据类型执行命令 local keyType redis call TYPE KEYS 1 if keyType string then return redis call GET KEYS
  • 有没有好的 Perl 自动化测试套件? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些好的 Perl 自动化测试套件框架吗 这实际上取决于您想要做什么 但这里有一些背景知识
  • 如何在 Android 中创建两个视图,每个视图使用 50% 的高度,除非其中一个较小?

    想象一个完整的 Android 设备屏幕 我希望它分为两个部分 上半部分包含文本 该文本可能大于可用空间 或不大于可用空间 因此文本将滚动 即 ScrollView 内的 TextView 下半部分包含一个 MapView 控件 具体看一些