Android:绝对布局?

2024-03-28

我是安卓新手。我喜欢在任何我想要的地方自由地绘制对象。所以我一直在使用绝对布局。我收到一条消息,要求使用不同的布局。我读到这是因为不同手机的分辨率不同。我的问题是,这是不使用绝对布局的唯一原因吗?我制定了一种使用指标来调整像素的方法。

public int widthRatio(double ratioIn){
    DisplayMetrics dm = new DisplayMetrics(); //gets screen properties
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double screenWidth = dm.widthPixels;      //gets screen height
    double ratio = screenWidth/100;           //gets the ratio in terms of %
    int displayWidth = (int)(ratio*ratioIn);  //multiplies ratio desired % of screen 
    return displayWidth;
}

//method to get height or Ypos that is a one size fits all
public int heightRatio(double ratioIn){
    DisplayMetrics dm = new DisplayMetrics(); //gets screen properties
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double screenHeight = dm.heightPixels;    //gets screen height
    double ratio = screenHeight/100;          //gets the ratio in terms of %
    int newHeight = (int)(ratio*ratioIn);     //multiplies ratio by desired % of screen
    return newHeight;
}

//sets size of any view (button, text, ...) to a one size fits all screens
public void setSizeByRatio(View object, int width, int height){
    LayoutParams params = object.getLayoutParams();
    params.width = widthRatio(width);
    params.height = heightRatio(height);
}

所以如果我说 setSizeByRatio(Button, 10, 25);它将按钮的宽度设置为屏幕宽度的 10%,高度设置为屏幕的 25%。

是否存在绝对布局无法使用的手机?这种布局会导致任何其他问题吗?


AbsoluteLayout 被弃用的原因是因为您可以在 LinearLayout 或 GridLayout 中找到具有相同功能甚至更多功能的替代方案。您似乎正在尝试根据绝对位置和像素数来计算位置,由于各种屏幕尺寸和密度的问题,通常应该避免这种方法。

阅读 @amiekuser 提供的链接,重点了解最佳实践。一些提示是为 ldpi、mdpi 和 hdpi 文件夹创建图像,使用 dpi(密度独立像素)单位而不是原始像素,以及如何使用模拟器在多种屏幕尺寸和密度上测试您的应用程序。

Edit:

要设置视图的 x 和 y 位置,您必须使用 LayoutParams。看这个问题 https://stackoverflow.com/questions/3294590/set-the-absolute-position-of-a-view-in-android关于如何使用 LayoutParams 设置视图的 TopMargin 和 LeftMargin。

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

Android:绝对布局? 的相关文章

  • 不支持动态值作为注释中的属性 - AspectJ Android [AOP Android]

    我正在使用自定义注释来记录用户单击的 id 但我收到一个错误 属性值必须是常量 我的代码片段如下 mAssetId Asset getContentId TrackEvent track event ArrayParams Params k
  • 如何设置itemTouchHelper选择性滑动?

    所以我在 recyclerview rv 上实现了这个 itemtouchhelper simple 回调 现在 在这个 rv 中 我根据内容类型将 2 种布局设置为一行 因此 当我在 rv 上设置此 touchhelper 时 它正在这两
  • Android ACTION_DATE_CHANGED 广播

    我有 Nexus S 当我在手机上手动更改日期时 ACTION DATE CHANGED 并不总是被广播 如果我将日期从 2014 年 2 月 13 日更改为 2014 年 2 月 14 日 我还没有获得 ACTION DATE CHANG
  • API 31 上是否有官方方法来提供文件关联,可能使用 pathSuffix/pathAdvancedPattern?

    背景 现代桌面操作系统上的一个众所周知的功能是能够处理文件 允许用户从文件管理器和其他应用程序中打开它们 作为 文件关联 配置 问题 到目前为止 对于用户和开发人员来说 在 Android 上设置文件类型关联并不是一件很方便的事情 在 An
  • Android Material主题alpha颜色问题

    我已经创建了一个构建版本为 5 0 的应用程序 我在下面编写了主题
  • 尝试使用掩码裁剪位图会抛出 IllegalArgumentException:

    我正在使用以下代码 public void cropSelection Bitmap bitmap annotationBitmap copy annotationBitmap getConfig true Canvas canvas ne
  • 检查 Firebase 邀请是否引导至 Play 商店

    当在 Android 上使用 Firebase 邀请并在应用程序启动时访问动态链接时 有没有办法知道用户是通过邀请刚刚安装了该应用程序还是已经安装了该应用程序 非常感谢 Borja 编辑 感谢 Catalin Morosan 的回答 事实证
  • 如何从另一个应用程序向一个应用程序添加视图

    我的应用程序叫做我的好应用 MyNiceApp 主要只是一个加载视图的核心coreView在主活动中onCreate coreView由用户根据需要下载的其他插件的视图填充 我定义了核心视图上的各个区域 这些区域可以通过 MyNiceApp
  • 在android中以编程方式创建布局 - 问题

    我正在使用以下代码动态创建 FrameLayout mylayout java FrameLayout layout new FrameLayout this FrameLayout LayoutParams layoutparams ne
  • 无法解析配置“:app:debugRuntimeClasspath”的所有文件。问题

    我的 android studio 遇到了下一个问题 导致 org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveEx
  • GSON:自定义对象反序列化

    好吧 我编辑了这个问题 因为它不够清楚 Edit 2 更新了 JSON 文件 我在 Android 应用程序中使用 GSON 我需要解析来自服务器的 JSON 文件 而且有点太复杂了 我不想让我的对象结构太重 所以我想简化内容 所以我的对象
  • Android 视图上的动态气泡

    任何人都可以如何在Android布局上制作可点击的动态气泡 我的设计师对屏幕的想法如下 我的图像中所有气泡都是分配给用户的一组任务 气泡的标签根据任务而变化 1 1 根据我的项目要求 颜色和半径将根据 api 响应而变化 您能建议任何演示或
  • 首选项活动中的广告“没有足够的空间来显示广告!需要:<480, 75>,拥有:<432, 1073741823>”

    我试图在偏好活动中展示广告 但它从未出现 Logcat 始终显示消息 没有足够的空间来显示广告 想要 有 这就是我制作广告的方式 我对广告有自定义偏好 public class AdmobPreference extends Prefere
  • Android Youtube API 可用吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有适用于 Android 的 YouTube API 吗 如果不是 除了通过网络浏览器之外 如何从 Yo
  • android sqlite 如果不存在则创建表

    创建新表时遇到一点问题 当我使用 CREATE TABLE 命令时 我的新表按应有的方式形成 但是当我退出活动时 应用程序崩溃 并且我在 logcat 中得到一个表已存在 如果我使用 CREATE TABLE IF NOT EXISTS 则
  • Android 简单 TextView 动画

    我有一个 TextView 我想倒计时 3 2 1 发生了事情 为了使其更有趣 我希望每个数字都以完全不透明开始 然后淡出至透明 有没有一种简单的方法可以做到这一点 尝试这样的事情 private void countDown final
  • 从 Activity 调用选项卡式片段方法

    我有一项活动由三个片段组成 这些片段使用使用 PagerAdapter 的操作栏选项卡 我想要做的是从主活动访问活动选项卡式片段中的方法 我已经尝试了下面的代码 但这只是将片段返回为空 所以我猜它无法在选项卡中找到它 NPListFragm
  • Android 图标与徽标

    The
  • Android 可扩展 GridView 就像 Google 图像一样

    我想创建可扩展的 GridView 其行为类似于 Google 图像页面 我想知道如何实现这样的功能 当我单击其中一张图像时 页面会展开并显示图片的详细信息 Android 中是否可以做类似的事情 Images grid Expanded
  • 随着速度变化,速度表针规绕其中心旋转

    Hi all 我编写了一个应用程序 其中有一个速度计 其指针垂直设置为 90 度 我试图以每秒变化的速度绕其中心旋转指针 我在文本视图中显示变化的速度 从 0 到 120 随机 我正在从远程服务获取速度并显示在文本视图中 因此 当速度发生变

随机推荐

  • AWS API Gateway:使用 302 重定向和 set-cookie 标头

    我使用 AWS API Gateway 进行重定向作为响应 简单流程 aaa com gt API 网关和 Lambda 302 重定向 gt bbb com 跟随时效果很好the blog https rpgreen wordpress
  • 将 JSON 数据从 Android 发送到 PHP 并写入文本文件

    我正在尝试获取在 Android 设备上动态创建的特定 JSON 文件 并使用 HTTP post 请求将该数据发送到 PHP 脚本 以存储到文本文件中以供以后使用 最终我还需要将数据保存在 MySQL 数据库中 但我一次一步地工作 JSO
  • 如何禁用“提交”按钮?

    如何在表单有效之前禁用 提交 按钮 angular2 是否有相当于 ng disabled 的功能 可以在 提交 按钮上使用 ng disabled 对我不起作用 正如这个 Angular 中所见example https github c
  • “签名无效,代码对象根本没有签名”错误

    我已经浏览 Stack 几个小时试图尝试修复这个错误 并且我已经尝试了我能找到 想到的一切 我正在向 App Store 提交现有应用程序的更新 在提交我的版本后 我不断收到此错误 签名无效 代码对象根本没有签名 确保你 已使用分发证书而不
  • 在 Kubernetes pod 中克隆安全的 git 存储库

    我遇到了一个有趣的情况 我需要将私有 github 存储库克隆到我在 Kubernetes 中运行的 Docker 容器中 最初我尝试使用 gitRepo 安装 但是 在我的部署清单中包含 OAuth 密钥是不可接受的 我想使用存储库部署密
  • 避免循环后重复代码?

    使用循环时 我经常会编写两次代码 例如 在复习 Udacity 计算机科学课程时 我编写了代码 用于查找最连续重复的元素的函数 def longest repetition l if not l return None most reps
  • 如何在 Mailjet v3 PHP 包装器中获取联系人 ID?

    我使用 Mailjet api 将提交的电子邮件存储在 Mailjet 列表中 当有 Mailjet 0 1 版本 API 时 这可以正常工作 当时没有任何 PHP 包装器 但很容易使用他们的示例 但是当他们将 API 更改为版本 3 时
  • 使用 ruby​​、python、perl、java 或其他方式对 Google 进行脚本驱动的自动化优化

    背景 同事 Adam 在过去一年左右的时间里一直在使用 Google Refine 来处理数据库下载 并取得了巨大成功 但 Adam 获得了新的工作机会 因此他在 Google Refine 中所做的所有工作和专业知识都将消失 Ben 希望
  • 是否可以将 OpenMP 库与 Android NDK 一起使用?

    是否可以将 OpenMP 库与 Android NDK 一起使用 也许有人已经尝试将它们编译在一起并可以提供一些提示 随着双核平板电脑 智能手机的出现 我认为在应用程序开发中使用 OpenMP 功能会非常好 先感谢您 对于现在遇到这个问题的
  • 导入错误:“图标”未从“antd”导出

    我创建了一个 React 应用程序 并且正在使用 Ant Design antd 在我的一个项目文件中 我想使用该标签 但我不能 显然这是 ANT V4 上的问题 我正在使用以下导入语句 import Icon from antd 并收到以
  • d3.js 在非 svg 元素上强制布局

    d3 js layout force 可以用于 重新 定位 div 等 svg 元素吗 如果 div 有position absolute maybe left and top可以用作等效项x1 and y1用于 svg 元素的属性 目标是
  • 如何将子节点从一个节点复制到另一个节点?

    情况 我需要下载 childNode 然后将其 set 到另一个节点中 问题是我只想在 childNode 的 Score 属性达到 100 时才执行此操作 我应该在何时何地检查帖子的分数是否为 100 或更高 以及如何将它们复制到新索引一
  • jQuery 选择器 jQuery("element") 和 $("element") 有什么区别?

    我以前多次使用过 jQuery 但总是这样使用 document 最近我多次看到有人使用jQuery document 我不知道它们之间的区别 我认为它们是相同的 但我现在有一个非常困难的问题 你知道 jQuery 插件的大部分用途 doc
  • GMSPolyline 非常大的内存峰值

    在允许用户在各种不同类型的地图上显示我们称之为轨迹的复杂位置点列表的 GPS 应用程序中 每个轨迹可以包含 2k 到 10k 个位置点 当轨迹在非 Google 地图类型上呈现时 它们会被大量剪切 修剪和路径简化 这是为了降低内存使用量并提
  • Ubuntu 上的 MonoDevelop 和 libpjsipDll.so 库。系统.DllNotFoundException

    我正在尝试在 Linux 上使用一个名为 libpjsipDll v44 so我从这里得到的http code google com p sipeksdk downloads list http code google com p sipe
  • 使用 strsplit 中长度不等的 ldply

    我正在尝试根据一些分隔符将数据框列拆分为多个列 我在这个网站上找到了各种答案 并且我正在尝试寻找不同的工作方式 我遇到麻烦了ldply 问题是输出strsplit是不同长度元素的列表 这是一些示例数据 有效的数据以及我正在尝试的数据ldpl
  • 哪里可以找到系统调用源代码?

    在 Linux 中 如果我有源代码树 在哪里可以找到所有系统调用的源代码 另外 如果我想查找特定系统调用的源代码和程序集 我可以在终端中输入类似的内容my system call 您需要 Linux 内核源代码才能查看系统调用的实际源代码
  • 在 Gatsby.js 中以编程方式创建多种类型的页面

    我正在使用 GatsbyJS 构建一个网站 我在两个不同的文件夹中有 markdown 文件 content collections and content posts我希望 Gatsby 为每个 Markdown 文件创建一个页面 并使用
  • 在 R / ggplot 中,plotly 没有获取 geom_text

    我有一个 ggplot 它自己工作得很好 但是当我尝试将其导入到plotly api系统中时 geom text似乎不起作用 其他一切都有效 谁能帮我 这是我的 R 版本 R 版本 3 1 2 2014 10 31 和情节版本 0 5 23
  • Android:绝对布局?

    我是安卓新手 我喜欢在任何我想要的地方自由地绘制对象 所以我一直在使用绝对布局 我收到一条消息 要求使用不同的布局 我读到这是因为不同手机的分辨率不同 我的问题是 这是不使用绝对布局的唯一原因吗 我制定了一种使用指标来调整像素的方法 pub