相关疑难解决方法(0)

如何在自定义Android视图中检查重力标记?

问题

我有一个自定义的Android视图,我想让用户设置重力以布局内容onDraw.这是我正在使用的简化版本onDraw:

// check gravity
if ((mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL) {
    // draw the content centered vertically
} else if ((mGravity & Gravity.BOTTOM) == Gravity.BOTTOM) {
    // draw the content at the bottom
}
Run Code Online (Sandbox Code Playgroud)

其中mGravity从XML属性(获得这样).

如果我将引力设置为Gravity.CENTER_VERTICAL它可以正常工作.但我很惊讶地发现,如果我把它设置为Gravity.BOTTOM,那么Gravity.CENTER_VERTICAL检查仍然是真的!

为什么会这样?

我必须查看二进制值才能看出原因:

因此,当我这样做

mGravity = Gravity.BOTTOM;
(mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL
//  (0101 & 0001) == 0001 …
Run Code Online (Sandbox Code Playgroud)

java flags android android-layout android-gravity

17
推荐指数
2
解决办法
1753
查看次数

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

我有以下情况:

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尽快使用这个主题被加载视图.

所有答案都表示赞赏.

android android-layout

8
推荐指数
1
解决办法
6376
查看次数

获取LinearLayout Gravity

我需要得到一个重力的价值LinearLayout.我检查了文档,我只找到了如何设置它(setGravity(value)).任何人都知道是否有办法获得LinearLayout引力?

谢谢

android

3
推荐指数
1
解决办法
1314
查看次数

如何通过xml为自定义视图传递gravity属性?

我试图弄清楚如何android:gravity通过xml 传递自定义视图.

此处发布的解决方案(/sf/answers/240939051/)表示要将该android:gravity属性添加到其他attr的.

当我这样做时,我最后会发出警告:

/Users/greg/dev/company/mobile/my_app/app/src/main/res/values/colors.xml

错误:属性"android:gravity"已经定义错误:任务':app:processStagingDebugResources'的执行失败.

com.android.ide.common.internal.LoggedErrorException:无法运行命令:/Users/greg/dev/android-sdk/sdk/build-tools/21.0.2/aapt package -f --no-crunch -I /用户/ greg/dev/android-sdk/sdk/platforms/android-21/android.jar -M/Users/greg/dev/company/mobile/myapp/app/build/intermediates/manifests/full/staging/debug/AndroidManifest.xml -S/Users/greg/dev/company/mobile/myapp/app/build/intermediates/res/staging/debug -A/Users/greg/dev/company/mobile/myapp/app/build/intermediates/assets/staging/debug -m -J/Users/greg/dev/company/mobile/myapp/app/build/generated/source/r/staging/debug -F/Users/greg/dev/company/mobile/myapp/app/build/intermediates/res/resources-staging-debug.ap_ --debug-mode --custom-package com.company.vendorreviews -0 apk --output-text-symbols/Users/greg/dev/company/mobile/myapp/app/build/intermediates/symbols/staging/debug错误代码:1输出:/Users/greg/dev/company/mobile/myapp/app/build/intermediates/res/staging/debug/values/values.xml :165:错误:属性"andr oid:gravity"已经定义了

我的colors.xml文件?

values.xml的第165行是

<declare-styleable name="StackedTextView">
    <attr format="integer" name="android:gravity"/>
    <attr format="string" name="line1"/>
    <attr format="string" name="line2"/>
    <attr format="dimension" name="line1_textSize"/>
    <attr format="dimension" name="line2_textSize"/>
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

在多个组中有多次出现android:gravity.主题,FlowLayout(包含库),LinearLayoutCompat等.

编辑:更新的错误消息.

android android-custom-view android-xml

3
推荐指数
1
解决办法
1135
查看次数