首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确的android格式: attrs.xml中的重力?

正确的android格式: attrs.xml中的重力?
EN

Stack Overflow用户
提问于 2012-03-02 17:54:04
回答 4查看 7.8K关注 0票数 14

我有以下情况:

styles.xml

代码语言:javascript
复制
<style name="fooStyle">
    <item name="android:padding">?fooView.padding</item>
    <item name="android:background">?fooView.background</item>
    <item name="android:gravity">?fooView.gravity</item>
</style>

attrs.xml

代码语言:javascript
复制
<attr name="fooView.padding" format="dimension" />
<attr name="fooView.background" format="color|reference" />
<attr name="fooView.gravity" format="????"/>

themes.xml

代码语言:javascript
复制
<style name="fooViewTheme" parent="android:Theme">
    <item name="fooView.padding" >2dip</item>
    <item name="fooView.background" >#AA000000</item>
    <item name="fooView.gravity">right|bottom</item>
</style>

问题是我不知道fooView.gravity的格式应该是什么。我已经尝试过stringenumflag,但似乎都不起作用:只要加载了使用此主题的视图,我总是会收到一个java.lang.NumberFormatException: unable to parse 'right|bottom' as integer

感谢所有的回答。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-24 21:39:39

这些是Android使用的重力值。你可以在你的attrs.xml中使用它

代码语言:javascript
复制
<resources>
    <declare-styleable name="MyCustomView">
        <attr name="gravity">
            <flag name="bottom" value="80" />
            <flag name="center" value="17" />
            <flag name="center_horizontal" value="1" />
            <flag name="center_vertical" value="16" />
            <flag name="clip_horizontal" value="8" />
            <flag name="clip_vertical" value="128" />
            <flag name="end" value="8388613" />
            <flag name="fill" value="119" />
            <flag name="fill_horizontal" value="7" />
            <flag name="fill_vertical" value="112" />
            <flag name="left" value="3" />
            <flag name="right" value="5" />
            <flag name="start" value="8388611" />
            <flag name="top" value="48" />
        </attr>
    </declare-styleable>
</resources>

在布局XML中,您可以这样使用它:

代码语言:javascript
复制
<MyCustomView
        custom:gravity="center|bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

在Java代码中,您可以使用以下命令来读取值:

代码语言:javascript
复制
int gravity = a.getInt(R.styleable.MyCustomView_gravity, Gravity.NO_GRAVITY);

并将其直接设置为子视图,如果这对您有意义的话:

代码语言:javascript
复制
someSubView.setGravity(gravity);

您可以在android.view.Gravityhere的源代码中查找这些重力值

票数 32
EN

Stack Overflow用户

发布于 2012-08-04 03:19:18

它是一个标志属性。您需要在属性xml中定义它,如下所示:

代码语言:javascript
复制
    <attr name="gravity">
      <flag name="right" value="0x01" />
      <flag name="bottom" value="0x02" />
      <flag name="left" value="0x04" />
      <!-- etc. -->
    </attr>

然后,...and使用位掩码访问这些值,如下所示:

代码语言:javascript
复制
    boolean right = (array.getInt(R.styleable.fooView_gravity, 0) & 0x01) == 0x01;
    boolean bottom = (array.getInt(R.styleable.fooView_gravity, 0) & 0x02) == 0x02;
    boolean left = (array.getInt(R.styleable.fooView_gravity, 0) & 0x04) == 0x04;
    // etc.

当然,也可以从...and中使用这些值:

代码语言:javascript
复制
<style name="fooViewTheme" parent="android:Theme">
    <item name="fooView.gravity">right|bottom</item>
</style>
票数 4
EN

Stack Overflow用户

发布于 2014-07-08 00:10:09

因为你只需要少量的属性选择,所以我建议使用"enum“类型。

http://developer.android.com/training/custom-views/create-view.html

代码语言:javascript
复制
<attr name="labelPosition" format="enum">
    <enum name="left" value="0"/>
    <enum name="right" value="1"/>
</attr>

参考:

代码语言:javascript
复制
custom:labelPosition="left" 

在代码中:

代码语言:javascript
复制
mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9531177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档