根据here on XML Attributes部分,我在dimens.xml
中指定了以下内容:
<dimen name="match_parent">-1dp</dimen>
<dimen name="main_left_menu_user_account_width">@dimen/match_parent</dimen>
<dimen name="main_left_menu_user_account_height">@dimen/match_parent</dimen>
然后我在布局中使用这两个维度:
<ImageView
android:id="@+id/userAccountImage"
android:background="@drawable/user_account"
android:layout_width="@dimen/main_left_menu_user_account_width"
android:layout_height="@dimen/main_left_menu_user_account_height" />
然后,当我预览到Graphical Layout
时,它会抱怨:
您必须提供layout_width属性。
您必须提供layout_height属性。
实际上我可以在dimens.xml
中定义一个等于match_parent的值吗?
更新
我也试过了,但预览仍然抱怨:
<dimen name="main_left_menu_user_account_width">-1dp</dimen>
<dimen name="main_left_menu_user_account_height">-1dp</dimen>
我成功使用wrap_content
(Graphical Layout
根本不抱怨):
<dimen name="wrap_content">-2dp</dimen>
<dimen name="main_right_menu_width">@dimen/wrap_content</dimen>
<dimen name="main_right_menu_height">@dimen/wrap_content</dimen>
答案 0 :(得分:40)
使用它,它适用于我
<dimen name="custom_wrap_content">-2px</dimen>
<dimen name="horizontal_border_height">@dimen /custom_wrap_content</dimen>
<dimen name="custom_match_parent">-1px</dimen>
<dimen name="vertical_border_height">@dimen /custom_match_parent</dimen>
match_parent
未运行的原因。 您无法提供match_parent
修改:根据评论中Jarett Millard的建议,使用px
代替dp
。
答案 1 :(得分:38)
首先创建attribs.xml:
<resources>
<item name="match_parent" type="dimen">-1</item>
<item name="wrap_content" type="dimen">-2</item>
</resources>
第二次使用你的尺寸:
<dimen name="account_width">@dimen/match_parent</dimen>
<dimen name="account_height">@dimen/wrap_content</dimen>
答案 2 :(得分:22)
根据您在@dimen中定义match_parent
的原因,此用例可以帮助您:
您可以在styles.xml中将其定义为样式,而不是在dimen.xml中定义宽度和高度
我用
//res/values/styles.xml
<style name="IntroLayout">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
</style>
和
//res/values-sw600dp/styles.xml
<style name="IntroLayout">
<item name="android:layout_width">520dp</item>
<item name="android:layout_height">wrap_content</item>
</style>
并像
一样使用它<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_gravity="center"
style="@style/IntroLayout">
允许我动态设置不同大小的设备的宽度和高度属性,而无需编写任何代码,您可以使用match_parent / wrap_content。如果需要,您也可以使用之前在样式中定义的任何@dimen。
我使用这个是因为手机和平板电脑的布局是相同的,除了我想在平板电脑上修复宽度但在手机上填充父母,所以它节省了必须有2个不同的布局与基本相同的xml
答案 3 :(得分:10)
对于HTC设备,使用它来实现match_parent:
<dimen name="my_match_parent">-1.0px</dimen>
答案 4 :(得分:1)
您也可以使用integers.xml
文件
integers.xml
档案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="match_parent">-1</integer>
<integer name="wrap_content">-2</integer>
</resources>
在dimens.xml
中使用:
<dimen name="main_right_menu_width">@integer/wrap_content</dimen>
您可能还会收到lint
警告,以禁止它使用:
<dimen name="main_right_menu_width" tools:ignore="ReferenceType">@integer/wrap_content</dimen>
答案 5 :(得分:0)
我不这么认为。 @ dimen / match_parent是一个具有单位的特定长度,而match_parent是一个特殊的标志。