Android меняет цвет без изменения формы

Я создал макет, подобный этому:

<RelativeLayout     
    android:id="@+id/layout_one" 
    style="@style/layout_one" >

    <RelativeLayout 
        android:id="@+id/layout_two"
        style="@style/layout_two" >

    <RelativeLayout 
        android:id="@+id/layout_three"
        style="@style/layout_three" >

    </RelativeLayout>
</RelativeLayout>

For layout one I have created a custom drawable with rectangle shape so that the corners would be rounded and blue background color.

Но для третьего макета мне нужно установить белый цвет фона, но если я сделаю android:background="#FFFFFF", он также изменит форму, а нижние углы больше не будут закруглены.

Моя первая мысль состояла в том, чтобы создать собственный рисунок для layout_three с закругленными нижними углами, но это не сработало. Либо все углы были закруглены, либо ни одного.

Нужно создать что-то подобное на картинке с закругленными углами. Какие-либо предложения?

Макет с закругленными углами и двумя цветами


person Karlis    schedule 28.07.2013    source источник
comment
А что со вторым RelativeLayout? Пользовательский рисунок - это путь, и вы можете сделать только нижние углы закругленными.   -  person user    schedule 28.07.2013
comment
Но я не могу просто установить угловой радиус равным 0, а нижний — 50dp. Это не работает таким образом.   -  person Karlis    schedule 28.07.2013
comment
Вы можете сделать фигуру доступной для рисования, у которой закруглены только некоторые углы. Это так не работает — это совершенно бесполезно. Вы можете опубликовать полный файл макета + чертежи.   -  person user    schedule 28.07.2013


Ответы (3)


Я вижу, что для третьего макета вы используете @style/layout_three, который отличается от @style/layout_one. Так почему бы вам не перейти в папку со стилями и не поместить элемент с белым фоном в стиль layout_three?

Это должно выглядеть примерно так:

<style name="layout_three">
      <item name="android:background">#FFFFFF</item>
      <!-- ... other stuff here... -->
</style>

РЕДАКТИРОВАТЬ: Извините, я плохо понял ваш вопрос, читая этот комментарий сейчас. Есть только один способ, который сейчас приходит мне на ум, чтобы помочь вам исправить это.

Создайте файл .xml в папке с возможностью рисования и назовите его layout_three.xml или как-то еще. И используйте этот код:

<?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="#FFFFFF" />
    <padding
        android:bottom="10dp"  <!--  you can set padding here 
                                 or on your layout layout_three -->
        android:left="10dp"
        android:right="10dp"
        android:top="10dp"  
    />

    <corners android:radius="2dp" /> <!-- change the radius too -->
</item>
</layer-list>

И тогда вы просто используете @drawable/layout_three вместо @style/layout_three

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

<corners 
     android:topRightRadius="0dp"
     android:topLeftRadius="0dp"
     android:bottomLeftRadius="2dp"
     android:bottomRightRadius="2dp"/>
person null    schedule 28.07.2013
comment
Как я уже упоминал, форма фона меняется, и нижняя часть больше не закругляется! - person Karlis; 28.07.2013

Вы можете создать XML-рисунок с закругленными нижними углами по вашему требованию. Попробуйте следующий код:

<item>
 <shape android:shape="rectangle" >
  <solid android:color="#FFFFFF" />
  <corners android:radius="7dp"
     android:topRightRadius="0dp"
     android:topLeftRadius="0dp"
     android:bottomLeftRadius="7dp"
     android:bottomRightRadius="7dp"/>
 </shape>
</item>
person Permita    schedule 29.07.2013

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

person Karlis    schedule 29.07.2013