Подтвердить что ты не робот

Как получить "дно" гравитации, работающую над возможностью рисования в xml

У меня есть простая цель. Я хочу светло-серый фон на моем FrameLayout с черной разделительной линией под ним (только под землей, а не вокруг). Пока у меня есть это:

<?xml version="1.0" encoding="utf-8"?>
   <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
   <item>
    <shape android:shape="rectangle" android:gravity="center">
        <solid android:color="#EEEEEE" />   
    </shape>
   </item>
   <item>
   <shape android:shape="line" android:gravity="bottom" >
       <stroke android:width="1dip" android:color="#010101"/>
   </shape>
   </item>
   </layer-list>

Но он рисует линию через центр, т.е. игнорирует бит тяжести = "нижний". Как я могу это исправить?

EDIT: Этот вопрос очень старый. Выбранный ответ может быть или не соответствовать текущим API-интерфейсам и т.д. Вам предлагается начать свой собственный вопрос, а не добавлять к нему, который больше не отслеживается.

4b9b3361

Ответ 1

Я бы рекомендовал использовать изображение с девятью патчами для этого - вот пример, который должен выполнить задание:

Example nine-patch image

(Это только крошечный, но он есть!)

Если вы разместите это в своей папке и установите для него свой фон FrameLayout, вы должны получить желаемый результат. Содержимое будет отображаться в серой области, а пиксель # 010101 будет растянут горизонтально, чтобы сформировать линию внизу. Просто следите за тем, чтобы расширение .9.png обеспечивало загрузку его как девяти патчей.

Надеюсь, что поможет вам

Ответ 2

Я тоже много боролся с этим. В принципе, чтобы создать границу внизу, вы должны думать в противоположном направлении от того, что вы ожидаете. Вы начинаете с прямоугольника с цветом границы. Кроме того, вы рисуете фактический цвет со смещением снизу. Я использую это:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- CREATE A RECTANGLE WITH YOUR BORDER COLOR -->
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#fff"/>
        </shape>
    </item>

    <!-- NOW DEFINE THE NORMAL COLOR-->
    <item android:bottom="BOTTOM_BORDER_THICKNESS E.G. 4dp">
        <shape android:shape="rectangle" >
            <solid android:color="#ccc"/>
        </shape>
    </item>
</layer-list>

Или, как Хуан Пабло Сарачено предложил:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
        <color android:color="YOUR_BORDER_COLOR" /> 
    </item> 
    <item android:top="YOUR_BORDER_THICKNESS"> 
        <color android:color="YOUR_BG_COLOR" /> 
    </item> 
</layer-list>

Ответ 3

К сожалению, я не нашел способ заставить гравитацию работать с чертежами, но я нашел, как вы можете добиться того, чего хотите с чистым xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-2dp"
        android:left="-2dp"
        android:right="0dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <solid android:color="#EEEEEE"/>
            <stroke android:width="1dp" android:color="#010101"/>
        </shape>
    </item>
</layer-list>

Удачи:)

Ответ 4

Это работает!

<item>
      <bitmap
         android:gravity="left|bottom"
         android:src="@drawable/myDrawable" />
 </item>

Ответ 5

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/Black" />
        </shape>
    </item>
    <item android:bottom="5dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/White" />
        </shape>
    </item>

</layer-list>

Ответ 6

Ну, это довольно старый вопрос, но ни один из ответов, похоже, не отвечает на реальный вопрос (как сделать gravity рабочий), так что здесь рабочий пример:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <color android:color="#2196F3"/>        <!-- Background color -->
    </item>

    <item android:gravity="bottom">
        <shape>
            <size android:height="10dp" />      <!-- I would suggest 1dp -->
            <solid android:color="#F50057" />   <!-- Line color -->
        </shape>
    </item>
</layer-list>

По аналогии, если вы хотите использовать гравитацию left или right изменить атрибут height на width