2012-05-13 2 views

ответ

23

Насколько я понимаю, нет простого способа сделать это. но если вы используете слой-список с элементом, который имеет границу, а затем тот, который не имеет смещения от , все стороны, для которых вы хотите, чтобы граница была равна ширине границы, вы достигнете этого.

Позволь мне сделать XML для вас, представляющих без полого дна ..

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!-- Border --> 
    <item> 
     <shape> 
      <solid android:color="#f000"></solid> 
     </shape> 
    </item> 
    <!-- Body --> 
    <item android:left="2dip" 
      android:top="2dp" 
      android:right="2dp"> 
     <shape> 
      <solid android:color="#ffafafaf"></solid> 
     </shape> 
    </item> 
</layer-list> 

Как вы можете видеть, я говорю второй пункт будет вставка из первых два ДПА со всех сторон, за исключением дно (отсюда нет границы результат на дне), там вы идете:

enter image description here

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

Это можно применить к любой границе, которую вы хотите удалить, изменив значения, которые элемент вставляет, например, если я изменяю right в элементе Body на bottom, отсутствует граница будет правильная, так как это один без вставки

+0

Ну, где же Я должен разместить свои стили? В первом , правильно? –

+0

Кстати, я пытаюсь использовать его в EditText. –

+0

Не имеет значения, к какой точке зрения вы его применяете. Первый «элемент» - только для границы, поэтому вам нужно разделить стиль между этими двумя. Если вы хотите, например, зеленый фон, вы добавите его ко второму элементу, который называется «тело» на мой код. –

10

Это немного рубить, но его можно удалить один или несколько границ, используя inset вытяжки с отрицательными значениями. Оберните форму в inset и примените отрицательные значения android:insetTop, android:insetBottom, android:insetLeft или android:insetRight с значением abs, равным ширине штриха.

enter image description here

Например, чтобы удалить нижнюю границу из прямоугольника с 4dp инсульта, используют android:insetBottom значение -4dp.

<?xml version="1.0" encoding="utf-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetBottom="-4dp"> 

    <shape android:shape="rectangle"> 
     <solid android:color="#FFFFFF" /> 
     <stroke android:width="4dp" android:color="#000000" /> 
     <corners android:radius="4dp" /> 
    </shape> 

</inset> 

Это похоже на то, что углы формы имеют радиус, который меньше, чем ширина хода. В противном случае используйте большее из двух значений (радиус) при нанесении вставки, чтобы полностью скрыть округленные части смежных границ.

+0

отлично, спасибо, это очень полезно –

0

Это трюк xml. Сначала вы должны заполнить слой определенным цветом (цвет линии). Затем вы должны заполнить его другим цветом (цвет фона), а немного нарисовать рисунок сбоку, который вы хотите нарисовать. Вот мой код:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

     <!-- First we have to create the line color (Black: #000000 and 
      Set position to 0 from all sides, this will allow us 
      even to to determine border size in any side (top, 
      right, bottom, left) --> 

    <item android:top="0dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#000000"></solid> 
     </shape> 
    </item> 

    <!-- Here we fill the content with our color, and I will 
     push 1dp from the top so this size (top = 1dp) will 
     keep the previous color and it will look like the border 
     --> 

    <item android:top="1dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#f4f4f4"></solid> 
     </shape> 
    </item> 
</layer-list> 

https://i.stack.imgur.com/ifak8.jpg

Вот как это выглядит:

enter image description here

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