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

Mop*_*per 8 android android-layout

我有以下情况:

styles.xml:

<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>
Run Code Online (Sandbox Code Playgroud)

attrs.xml:

<attr name="fooView.padding" format="dimension" />
<attr name="fooView.background" format="color|reference" />
<attr name="fooView.gravity" format="????"/>
Run Code Online (Sandbox Code Playgroud)

themes.xml:

<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>
Run Code Online (Sandbox Code Playgroud)

问题是我无法弄清楚fooView.gravity应该是什么格式.我已经试过用string,enumflag但没有似乎工作:我总是得到java.lang.NumberFormatException: unable to parse 'right|bottom' as integer尽快使用这个主题被加载视图.

所有答案都表示赞赏.

Mic*_*ier 19

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

<MyCustomView
        custom:gravity="center|bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

在Java代码中,您可以使用以下方法读取值:

int gravity = a.getInt(R.styleable.MyCustomView_gravity, Gravity.NO_GRAVITY);
Run Code Online (Sandbox Code Playgroud)

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

someSubView.setGravity(gravity);
Run Code Online (Sandbox Code Playgroud)

您可以在源android.view.Gravity此处查找这些重力值