Квадратная форма границы с круглыми внутренними краями - PullRequest
8 голосов
/ 29 июня 2011

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

Drawables

round_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="4dp" android:color="#FF000000" />
    <padding android:left="7dp" android:top="7dp"
            android:right="7dp" android:bottom="7dp" />
    <corners android:radius="4dp" />
    <solid android:color="#FFC0C0C0" />
</shape> 

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="2dp" android:color="#FF000000" />
    <solid android:color="#FFC0C0C0" />
</shape> 

Каждый из них работает независимо как граница, когда применяется самим собой так:

android:background="@drawable/round_border" 

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

composite_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <layer-list>
        <item android:drawable="@drawable/round_border"/>
        <!-- <item android:drawable="@drawable/square_border"/> -->
    </layer-list>
</shape> 

и

android:background="@drawable/composite_border"

Фон макета полностью черный, а не черная рамка.

Кто-нибудь знает, как заставить список слоев работать для этой задачи?

Ответы [ 4 ]

5 голосов
/ 20 июня 2012

Из Shape Drawable Doc вы можете видеть, что у фигуры не может быть списка слоев внутри, поэтому вы должны определить свой составной_борщик.xml следующим образом

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/square_border"/>
    <item android:drawable="@drawable/round_border"/>
</layer-list>

обратите внимание, что я изменилпорядок ваших элементов в списке слоев, как указано в документации списка слоевEach drawable in the list is drawn in the order of the list—the last drawable in the list is drawn on topи вы хотите, чтобы он был в квадрате снаружи

4 голосов
/ 02 октября 2014

Создайте XML-файл, например round_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
   <solid 
       android:color="#CCCC33"/>
   <size 
       android:width="35dp"
        android:height="35dp"/>
</shape>

В макете в качестве фона

<LinearLayout
    android:id="@+id/layout_wellbeing"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:gravity="center"
    android:background="@drawable/rounded_corner_leuvan"
    android:orientation="horizontal" >
</LinearLayout>
2 голосов
/ 29 июня 2011

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="2dp" 
            android:color="#FF000000"
    />
    <solid android:color="#FFC0C0C0" />
</shape>

composite_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <layer-list>
        <item android:drawable="@drawable/round_border"/>
        <!-- <item android:drawable="@drawable/square_border"/> -->
    </layer-list>
</shape>

следите за комментариями и кавычками! =]

0 голосов
/ 02 октября 2014

Попробуйте, это будет работать достаточно хорошо:

solid - цвет фона

stroke - border

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
   <solid 
       android:color="@color/white"/>
   <stroke android:width="1dp" android:color="#ffaaaaaa" />
   <size 
       android:width="15dp"
        android:height="15dp"/>
</shape>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...