2016-01-01 2 views
3

Возможно ли разработать дизайн Android (LinearLayout или RelativeLayout) без указания оператора dp, px или каких-либо других единицак? Может быть, использовать проценты? layout_weight - вариант. Но все равно, что касается полей и прокладок? Можем ли мы полностью избежать магических чисел из макета?Избегайте номеров в макетах Android?

ответ

5

Существует Percent Support Library с PercentFrameLayout и PercentRelativeLayout, где вы можете задать любые размеры макета (т.е. размер, положение и отступы) с процентами вместо абсолютных значений:

<android.support.percent.PercentRelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <ImageView 
     app:layout_widthPercent="50%" 
     app:layout_heightPercent="50%" 
     app:layout_marginTopPercent="25%" 
     app:layout_marginLeftPercent="25%"/> 

</android.support.percent.PercentRelativeLayout> 
+0

Скажите, если я ошибаюсь, но я, как я знаю, Библиотека поддержки Percent была выпущена с API23, в устройствах pre-lollipop игнорируется. Если я прав, лучшая идея по-прежнему извлекает числа, такие как dimens, в xml-файлы, такие как styles.xml. – piotrek1543

+0

@ piotrek1543 Он был выпущен с поддержкой библиотеки v23, но он также должен поддерживать старые версии Android. – Floern

3

Вы всегда можете определить и использовать dimension переменную удалить магическое число из макетов, то есть:

<ImageView 
    layout_width="@dimen/large_photo_size" 
    layout_height="@dimen/large_photo_size" 
/> 

Где @dimen/large_photo_size определяется внутри файла, т.е. dimens.xml ресурсов:

<resources> 
    <dimen name="large_photo_size">25dp</dimen> 
</resources> 

Еще одна альтернатива будет извлекать настройки ширины и высоты в стили т.е .:

<style name="Thumbnail"> 
    <item name="android:layout_width">25dp</item> 
    <item name="android:layout_height">25dp</item> 
</style> 

и использовать его, т.е. <ImageView style="@style/PopupMenu" ... />

С themes вы можете применить определенные стили в глобальном масштабе.

Смежные вопросы