问题
我有一个自定义的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检查仍然是真的!
为什么会这样?
我必须查看二进制值才能看出原因:
0001 0000, Gravity.CENTER_VERTICAL:常量值:16(0x00000010)0101 0000, Gravity.BOTTOM:常量值:80(0x00000050)因此,当我这样做
mGravity = Gravity.BOTTOM;
(mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL
// (0101 & 0001) == 0001 …Run Code Online (Sandbox Code Playgroud) 我有以下情况:
在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,enum并flag但没有似乎工作:我总是得到java.lang.NumberFormatException: unable to parse 'right|bottom' as integer尽快使用这个主题被加载视图.
所有答案都表示赞赏.
我需要得到一个重力的价值LinearLayout.我检查了文档,我只找到了如何设置它(setGravity(value)).任何人都知道是否有办法获得LinearLayout引力?
谢谢
我试图弄清楚如何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等.
编辑:更新的错误消息.