私は幅を設定したい非常にシンプルな形状を持っています:
<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?
私にとって、アイテムの重力を「中央」に設定することで問題は解決しました。例えば:
<item Android:id="@Android:id/progress" Android:gravity="center">
<clip>
<shape>
<size Android:height="2dp"/>
<solid Android:color="@color/my_color"/>
</shape>
</clip>
</item>
User983447の答えを指定するだけです-サイズ属性は実際には割合を意味します。レイヤーリスト内のすべてのシェイプのサイズを設定する必要があり、スケーリング時に比率として使用されます-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>
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"
/>
[〜#〜] update [〜#〜]:レイアウト設計ツールでは機能しているように見えますが、エミュレータ。 UPDATE 2:この回答には数票あるため、新しいインジケータドットを表示するために実際に使用したものを確認することをお勧めします。 https://Gist.github.com/CapnSpellcheck/4d4638aefd085c703b9d990a21ddc1eb
レイヤーリストは、次の理由で初めてAndroiderにとって非常に不正であることがわかりました。一見すると、ほとんどの場合、アイテムのtop、bottom、right、left属性はFROM、top、bottom、right、leftであると考えられます。ここで、次の値:
<item Android:top="10dp">
それぞれのコンテナの上部から開始点10dpを取得しますか。これはそうではありません。上、下、右、左のOFFと考えてください。 <item Android:top="10dp">
は、開始点を10dpオフに設定しますが、ボトムを設定したい場合はどうなりますか?
<item Android:bottom="20dp">
これは、TOPから20dpのボトムを取得するのではなく、コンテナのボトムから20dpオフのボトムを取得します。
したがって、たとえば100dpコンテナの場合、20dpから始まる上端と40dpの下端を持つ長方形が必要な場合:
<item Android:top="20" Android:bottom="60dp">
形状のサイズ属性は、drawable.getIntrinsicWidthとgetIntrinsicHeightの値を提供します。
ドロウアブルのコンテナ(例:ImageView、TextView)にレイアウトパラメータWRAP_CONTENTがある場合、ドローアブルdrawingStateが変更されるとコンテナの寸法が変更されます。
しかしAndroid ImageView drawingState実装のフレームワークにバグがあります
ImageViewは、state_selectedの描画可能ディメンションによってのみディメンションを更新/サイズ変更しますが、state_activatedには適用しません。
同様の問題がありました。
ドキュメント( http://developer.Android.com/guide/topics/resources/drawable-resource.html#Shape )は次のように述べています:
<サイズ>
形状のサイズ。 (...)
注:形状は、デフォルトでここで定義された寸法に比例して、コンテナビューのサイズに合わせて拡大縮小されます。 ImageViewで図形を使用する場合、Android:scaleTypeを「center」に設定することでスケーリングを制限できます。
私が正しく理解していれば、それは「サイズ」タグがサイズを設定するためではなく、比率を設定するためであることを意味します。
これを使用しました。
<?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。に追加し、ビューの背景を設定します。