如何在资源文件中引用android:gravity的值?

12

我有一个布局,其中包含一个 TextView。我希望从另一个资源文件中提取 android:gravity 属性的值,格式为 android:gravity="@???/item_align" ,其中 item_align 是另一个 XML 文件中资源的名称。在布局中通常使用的值,如 centerbottombottom|center_horizontal 不起作用。在 @??? 中放置什么类型的值?整数可以工作,如果我将字符串替换为实际的整数值(例如将“center”替换为0x011)。但是,这不是一个好的解决方案。

所以,问题是:我如何引用布局文件中的值,资源文件中的项是什么样子的?


<TextView
   android:id="@+id/item_text"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
   android:layout_alignParentBottom="true"
   android:layout_alignParentLeft="true"
   android:layout_alignParentRight="true"
   android:layout_margin="1dp"
   android:layout_centerHorizontal="true"
   android:gravity="@???/item_align"
   android:text="65"
   android:textSize="20sp"
   android:typeface="sans"
   android:textStyle="bold"
   android:textColor="#000000" />
3个回答

17

概念:

 android:gravity="@integer/integer_name"

整数.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >1</integer>
</resources>

重力值都是整数常量,你需要查找并在你的integers.xml文件中定义它。



示例实现:

public static final int CENTER ... 常量值:17(0x00000011)


文档中...然后你将其添加到res/values/下的integers.xml文件中:

 <integer
        name="center"
        >17</integer>

在你的XML中,这样做:

android:gravity="@integer/center"

1
在这种情况下不应该使用attrs.xml吗? - Yousha Aleayoub

11

这是给你的。

<integer name="gravity_bottom">80</integer>
<integer name="gravity_center">17</integer>
<integer name="gravity_center_horizontal">1</integer>
<integer name="gravity_center_vertical">16</integer>
<integer name="gravity_end">8388613</integer>
<integer name="gravity_left">3</integer>
<integer name="gravity_no_gravity">0</integer>
<integer name="gravity_right">5</integer>
<integer name="gravity_start">8388611</integer>
<integer name="gravity_top">48</integer>

我不确定像这样做是否是一个好主意。资源值是正确的,但如果它的LayoutParams不支持你给它的Gravity类型,则布局可能会出现问题。 - milosmns

3
为了避免在Android Studio中破坏标准常量并避免红色高亮,您可以在/values和/values-sw600dp文件夹中的styles.xml中创建两个样式。
/values/styles.xml
 <style name = "AppContainerLayout">
     <item name = "android:gravity">top|start</item>
 </style>

/values-sw600dp/styles.xml  

<style name = "AppContainerLayout">
    <item name = "android:gravity">center</item>
</style>

只需在布局中使用

<LinearLayout
             style = "@ style/AppContainerLayout"
             android:layout_width = "match_parent"
             android:layout_height = "wrap_content"
             android:orientation = "vertical">

             // childs
</LinearLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接