0

LayerDrawable( API レベル 1 で追加)の SDK バージョンの制約は見つかりませんでしたが、背景として使用しているものは、minSdkVersion に応じて異なる動作をします: 15 以下の場合、背景は完全に黒になります。 19 以上 (KitKat<) の場合、レイヤーは期待どおりに表示されます。

レイヤーリストの最初の項目をプログラムで置き換えています。クラスの使用方法は次のLayerDrawableとおりです(ただし、問題はないはずです)。

BitmapDrawable bitmapDrawable = (BitmapDrawable) resources.getDrawable(R.drawable.xyz1);
bitmapDrawable.setColorFilter(getColor(), PorterDuff.Mode.MULTIPLY);
bitmapDrawable.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);

LayerDrawable bgDrwbl = (LayerDrawable) resources.getDrawable(R.drawable.mylayerdrawable);
bgDrwbl.setDrawableByLayerId(R.id.frameBitmap, bitmapDrawable);

int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    v.setBackgroundDrawable(bgDrwbl);
} else {
    v.setBackground(bgDrwbl);
}

mylayerdrawable は次のようになります。

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

<item
    android:id="@+id/frameBitmap"
    android:left="@dimen/card_frame_width"
    android:right="@dimen/card_frame_width"
    android:top="@dimen/card_frame_width"
    android:bottom="@dimen/card_frame_width" >

    <bitmap 
        android:tileMode="repeat"/>
</item>
<item>
    <shape android:shape="rectangle" >
        <stroke
            android:height="@dimen/card_frame_width"
            android:width="@dimen/card_frame_width"
            android:color="#000000" />

        <corners android:radius="4dp" />
    </shape>
</item>
<item
    android:left="0.4dp"
    android:right="0.4dp"
    android:top="0.4dp"
    android:bottom="0.4dp">
    <shape android:shape="rectangle" >
        <stroke
            android:height="1.8dp"
            android:width="1.8dp"
            android:color="#EAEAEA" />

        <corners android:radius="4dp" />
    </shape>
</item>

bgDrwblデバッグ中に、 19 と比較して minSdkVersion=15の次のメンバーが欠落していることに気付きました。

  • LayerDrawable.mLayerState.mAutoMirrored
  • LayerDrawable.mLayoutDirection(基本クラスのメンバー: Drawable)

誰かが私のように LayerDrawable を使用している場合(?)、それらのいずれかが重要かどうかはわかりませんがLayerDrawable、異なる SDK バージョンで を使用することに関する警告も提案も見つかりませんでした。ヒントはありますか?

4

1 に答える 1

1

以前は機能させるのにあまりにも多くの問題があったので、私はあまりにも偏見をLayerDrawable持っていました...しかし、問題はそれらやminSdkVersionとは何の関係もないことが判明しましたが、一部のデバイスの場合。同じ問題はすでにここで回答されています。要するに:

そのため、一部のデバイスでは黒く塗りつぶされるため、色のない境界線のある形状をそのままにしないでください。

于 2016-06-07T03:54:00.070 に答える