草庐IT

android - 图像上的文本在不同屏幕尺寸上具有匹配的相对定位

coder 2024-07-05 原文

我卡住了。 问题是如何将文本放置在静态图像上并在不同的屏幕尺寸之间保持位置取决于它。 为此,我尝试了上面的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/default_view_padding">

    <ImageView
        android:id="@+id/iv_background"
        android:layout_width="500dp"
        android:adjustViewBounds="true"
        android:layout_height="900dp"
        android:layout_centerInParent="true"
        android:src="@drawable/example"/>

    <TextView
        android:layout_alignLeft="@id/iv_background"
        android:layout_alignStart="@id/iv_background"
        android:layout_alignEnd="@id/iv_background"
        android:layout_alignRight="@id/iv_background"
        android:layout_alignTop="@id/iv_background"
        android:layout_width="wrap_content"
        android:layout_marginTop="190dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:text="Dummy text string"/>

</RelativeLayout>

但在不同的屏幕上它看起来不同。 因此,例如,屏幕截图。静态图像背景(例如带有绿线的白色图像),nexus5 上的 TextView ,nexus7 上的文本。 如您所见,文本放置在图像上的不同位置。 我不知道为什么会这样,因为我正在使用 dp 和相对布局。

我在图像大小上尝试了 wrap_content/match_parent,没有调整 View 边界等。但它没有帮助。

需要答案。

编辑:我希望文本在不同屏幕尺寸下始终位于相同距离的绿线上方。 (与第二张图片相同)

EDIT2:有人误解我的意思,如果问题不清楚,请见谅。作为示例中的背景,我尝试使用 imageview 而不是相对布局的背景标签,因为它没有任何帮助,我之前尝试过

我在示例中使用的行仅用于此目的。只需要说明文字定位的问题即可

最佳答案

使用dimens.xml 来支持不同尺寸的屏幕。

在您的 res 文件夹中创建一些 value 文件夹,例如:

values-xlarge
values-large
values-small
values-sw800dp
...

在这些文件夹中,您应该有 dimens.xml 并定义您的尺寸。 例如,这可能是普通屏幕的尺寸:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="ImageViewWidth">500dp</dimen>
    <dimen name="ImageViewHeight">900dp</dimen>
    <dimen name="TextViewMarginTop">190dp</dimen>
</resources>

大屏幕或超大屏幕的尺寸肯定不同!

要使用这些,只需将它们放入 XML 而不是硬编码维度

<TextView
    android:layout_alignLeft="@id/iv_background"
    android:layout_alignStart="@id/iv_background"
    android:layout_alignEnd="@id/iv_background"
    android:layout_alignRight="@id/iv_background"
    android:layout_alignTop="@id/iv_background"
    android:layout_width="wrap_content"
    android:layout_marginTop="@dimens/TextViewMarginTop"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:text="Dummy text string"/>

关于android - 图像上的文本在不同屏幕尺寸上具有匹配的相对定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25762085/

有关android - 图像上的文本在不同屏幕尺寸上具有匹配的相对定位的更多相关文章

  1. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  4. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  5. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  6. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  7. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  8. ruby - 匹配大写字母并用后续字母填充,直到一定的字符串长度 - 2

    我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种

  9. ruby-on-rails - Rails 3.1 中具有相同形式的多个模型? - 2

    我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#

  10. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

随机推荐