52

幅を設定したい非常に単純な形状があります。

<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>

サイズが変わるかどうかを確認するために、高さを追加してみました。そうではありません。サイズを完全に無視しているようなものです。なんてこと?

4

8 に答える 8

9

user983447の答えを指定するだけです-サイズ属性は実際には比率を意味します。レイヤー リスト内のすべてのシェイプのサイズを設定する必要があります。これは、スケーリング時の比率として使用されlayout_weightますLinearLayout。ですから、a ではなく a と名付けたほうがよいでしょうsizeweight

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>
于 2013-02-11T04:13:29.723 に答える
4

以下の理由から、レイヤーリストが初めて Androider で非常に悪質であることがわかりました。一見すると、アイテムの top,bottom,right,left 属性は、FROM 上、下、右、左であると考える人がほとんどです。値は次のとおりです。

<item android:top="10dp">

それぞれのコンテナーの上部から 10 dp の開始点が得られます。これはそうではありません。上、下、右、左のOFFと考えてください。<item android:top="10dp">上から 10 dp 離れた開始点が得られますが、下を設定したい場合はどうなりますか?

<item android:bottom="20dp">

これにより、TOP から 20 dp の底が得られず、コンテナーの BOTTOM から 20 dp の底が得られません。

たとえば、100 dp コンテナーで、上端が 20 dp から始まり、下端が 40 dp の長方形が必要な場合:

<item android:top="20" android:bottom="60dp">
于 2014-03-20T16:18:31.593 に答える
1

shape の size 属性は、drawable.getIntrinsicWidth と getIntrinsicHeight の値を提供します。

ドローアブルのコンテナー (ImageView、TextView など) にレイアウト パラメータ WRAP_CONTENT がある場合、ドローアブルの drawingState が変化すると、コンテナーの寸法が変化します。

しかし、ImageView drawingState 実装の Android フレームワークにはバグがあります。

ImageView は、state_selected の描画可能なディメンションによってのみディメンションを更新/サイズ変更しますが、state_activated ではしません

于 2015-03-21T08:19:48.643 に答える
1

同様の問題がありました。

ドキュメント(http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape)は次のように述べています。

<サイズ>

形状のサイズ。(...)

注: 既定では、形状は、ここで定義された寸法に比例するコンテナー ビューのサイズにスケーリングされます。ImageView でシェイプを使用する場合、android:scaleType を「center」に設定することでスケーリングを制限できます。

私の理解が正しければ、「サイズ」タグはサイズを設定するためのものではなく、プロポーションを設定するためのものです。

于 2012-09-06T11:08:25.860 に答える
0

これを使いました。

<?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.に置き、ビューの背景を設定します。

于 2013-02-11T04:29:14.267 に答える