4

ドローアブルフォルダに次のボタンスタイルを実装しました。

<layer-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        >
        <item>
            <shape
                android:shape="rectangle"
                >
                <stroke android:width="1dp" android:color="#FF666666" />
                <corners
                    android:radius="@dimen/corner_radius" 
                    />
                <solid
                    android:color="#FF000000" 
                    />  
            </shape>
        </item>
        <item
            android:bottom="22dp" android:top="1dp" android:left="1dp" android:right="1dp"
            >
            <shape
                android:shape="rectangle"
                >
                <corners
                    android:topLeftRadius="@dimen/corner_radius" android:topRightRadius="@dimen/corner_radius" 
                    />
                <solid
                    android:color="#10FFFFFF" 
                    />
            </shape>            
        </item>
    </layer-list>

私の問題は、2番目のアイテムを絶対的ではなく比較的高さの半分に設定したいということです。ボタンの高さは通常45dpであるため、ここでは「android:bottom="22dp"」で設定していることがわかります。ただし、ボタンの高さに関係なく、2番目のアイテムは常に半分の高さにしたいと思います。何か案は?

4

2 に答える 2

3

@Tylerの助けを借りて、私はこれを行うためのより簡単な方法を見つけました:

LayerDrawable layerList = (LayerDrawable)getResources().getDrawable(R.drawable.btn_background).mutate();                
btnBlackLayerList.setLayerInset(0, 0, 0, btnHeight/2);
btn.setBackground(layerList);
于 2013-04-08T00:29:57.613 に答える
2

これはプログラムで行う必要があります。

  1. レイヤーリストと2番目のアイテムの両方のandroid:id属性を指定します。
  2. getResouces().getDrawable()レイヤーリストと2番目のアイテムの両方への参照を取得するために使用します。必ずレイヤーリストをにキャストしてくださいLayerDrawable
  3. Drawable.mutate()と2番目のLayerDrawable項目を呼び出す必要がある場合がありますDrawable
  4. ボタンの高さを取得し、Drawable.setBounds()それに応じて2番目のレイヤーの描画長方形を変更するために使用します。
  5. レイヤーリストでLayerDrawable.setDrawableByLayerId()更新されたものを置き換えるために使用します。Drawable
  6. LayerDrawableをボタンに適用します。
于 2013-02-28T01:22:13.337 に答える