Размер рисунка не работает
У меня очень простая форма, которую я хочу задать ширину:
<shape android:shape="rectangle">
<solid android:color="@color/orange"/>
<size android:width="2dp"/>
</shape>
Однако, когда я назначаю это на фоне EditText, он просто показывает оранжевый фон вместо прямоугольника шириной 2dp. Почему настройка размера не задана? Я хочу создать прозрачную рамку с оранжевым прямоугольником с левой стороны. У меня также есть это в селекторе:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape android:shape="rectangle">
<solid android:color="@color/orange"/>
<size android:width="2dp" android:height="6dp"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
</shape>
</item>
</selector>
Я попытался добавить высоту, чтобы увидеть, изменит ли размер. Это не так. Это похоже на его полное игнорирование размера. WTF?
Ответы
Ответ 1
Просто для того, чтобы указать user983447 answer - атрибут size действительно означает пропорцию. Вы должны установить размер для всех форм в вашем послойного списке и он будет использован в пропорции при масштабировании - как layout_weight
атрибут LinearLayout
. Так что лучше назвать его не size
а weight
Ниже приведено описание того, как реализовать верхнюю и нижнюю белые линии без использования атрибута size
:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#fff" />
</shape>
</item>
<item android:top="1dp" android:bottom="1dp">
<shape>
<solid android:color="#888" />
</shape>
</item>
</layer-list>
Ответ 2
Он может работать с foreground
. Похоже, вы не можете установить фокусную гравитацию. Но вы можете на переднем плане. Я проверил API 21, 23 и 24 (ну, с предварительным просмотром Studio), а следующие места - сплошная точка круга в ImageView.
<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorPrimary" />
<size android:height="8dp" android:width="8dp" />
</shape>
С помощью фрагмента макета
<ImageView
android:foreground="@drawable/list_new_dot"
android:foregroundGravity="right|center_vertical"
tools:src="@drawable/model_1_sm"
/>
ОБНОВЛЕНИЕ: пока он работает в средстве проектирования макетов, он не похож на эмулятор. ОБНОВЛЕНИЕ 2: поскольку у этого ответа есть несколько голосов, вы можете проверить, что я на самом деле использовал, чтобы показать новую индикаторную точку: https://gist.github.com/CapnSpellcheck/4d4638aefd085c703b9d990a21ddc1eb
Ответ 3
Я обнаружил, что список слоев был очень коварным в первый раз Androider из-за следующего. На первый взгляд большинство думало бы, что элементы верхнего, нижнего, правого, левого атрибутов относятся к верхнему, нижнему, правому, левому. Где значение следующего:
<item android:top="10dp">
Оттолкнет вас начальную точку 10dp от верхней части соответствующего контейнера. Это не тот случай. Подумайте об этом как ВЫКЛ сверху, снизу, справа, слева. <item android:top="10dp">
прежнему будет показывать вам начальную точку 10dp OFF сверху, но что происходит, когда вы хотите установить нижнюю границу?
<item android:bottom="20dp">
Это не даст вам дно на 20dp из TOP, а чуть ниже 20dp OFF BOTTOM контейнера.
Так, например, с контейнером 100dp, если вы хотите прямоугольник с верхним краем, начинающимся с 20dp и нижним краем на 40dp:
<item android:top="20" android:bottom="60dp">
Ответ 4
Для меня, задавая серьезность предмета, чтобы "центр" решил проблему. Например:
<item android:id="@android:id/progress" android:gravity="center">
<clip>
<shape>
<size android:height="2dp"/>
<solid android:color="@color/my_color"/>
</shape>
</clip>
</item>
Ответ 5
У меня была схожая проблема.
Документация (http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape) говорит:
<pазмер>
Размер формы. (...)
Примечание. Форма масштабируется до размера контейнера. Соотнесите размеры, определенные здесь, по умолчанию. Когда вы используете форму в ImageView, вы можете ограничить масштабирование, установив для android: scaleType значение "center".
Если я правильно понимаю, это означает, что тег "размер" не предназначен для установки размера, а для установки пропорций.
Ответ 6
Атрибут размера формы предоставит значение для drawable.getIntrinsicWidth & getIntrinsicHeight.
если рисованный контейнер (например, ImageView, TextView) имеет параметр макета WRAP_CONTENT, тогда размер контейнера изменится, если изменится масштабируемое чертежное состояние.
но есть ошибка в инфраструктуре android в реализации DrawState ImageView
ImageView только обновляет/изменяет размер его размерности по размеру на state_selected, но не на state_activated
Ответ 7
использовал это.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke
android:color="@color/lgray"
android:width="1dip" />
<corners
android:bottomLeftRadius="0dip"
android:bottomRightRadius="0.1dip"
android:topLeftRadius="0dip"
android:topRightRadius="0.1dip" />
<solid android:color="@color/White" />
</shape>
поместите этот rectangle.xml в drawable.and установите фон вида.