Значение равно match_parent или fill_parent в измерениях. Xml?

Основываясь здесь на разделе XML-атрибутов, я указываю следующее в моем 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.

На самом деле я могу определить значение, равное match_parent в dimens.xml?

Обновить:

Я также попробовал это, но предварительный просмотр все еще жалуется:

<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>

6 ответов

Используйте это, это работает для меня

<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

Редактировать: Использовать px вместо dp как предложено Джаретт Миллард в комментариях.

Сначала создайте 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>

В зависимости от того, почему вы хотите определить match_parent в @dimen этот вариант использования может помочь вам:

Вместо определения ширины и высоты в dimension.xml, вы можете определить его как стиль в styles.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

Для устройств HTC используйте это для достижения match_parent:

<dimen name="my_match_parent">-1.0px</dimen>

Вы также можете достичь этого, используя 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>

Я так не думаю. @dimension/match_parent - это конкретная длина с единицей измерения, а match_parent - специальный флаг.

Другие вопросы по тегам