Квадратная форма макета с круглыми внутренними краями

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

вводимый коэффициент /

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: фон = "@ вытяжка / composite_border"

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

Из Shape Drawable Doc вы можете видеть, что форма не может иметь слой-лист внутри, поэтому вы должны определить ваш compos_border.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
И вы хотите, чтобы он был в квадрате снаружи

Создать 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> 

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> 

Следить за комментариями и кавычками! знак равно

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

solidцвет фона

strokeграница

 <?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> 
Intereting Posts