9

Android 4.4.1 では正常に動作するこの機能がありますが、5.0 以降では機能しません。

  public static SpannableStringBuilder prependImage(Drawable drawable, String text) {
    SpannableStringBuilder builder = new SpannableStringBuilder("  " + text);
    builder.setSpan(new ImageSpan(drawable), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    return builder;
  }

そして、私はそれを次のように使用します:

class MyButton extends Button {

    // ... snip ...

    setText(
        prependImage(
            getDrawable(imageResource, color),                     
            getContext().getString(stringResource)),
        BufferType.SPANNABLE);

getDrawable()上記の方法は次のとおりです。

 private Drawable getDrawable(int resource, int color) {
    final Resources resources = getContext().getResources();
    Drawable drawable = resources.getDrawable(resource);
    if (drawable != null) {
      drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
      drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    }
    return drawable;
  }

デバッグすると、すべてが成功したように見えますが、画像が描画されません。私が間違っているかもしれないアイデアはありますか?

4

5 に答える 5

22

デフォルトでは、マテリアル内のボタンはテキストをすべて大文字で表示するようにスタイル設定されています。ただし、大文字化に使用される AllCapsTransformationMethod にはバグがあり、これにより Spannable データが破棄されます。

Button に android:textAllCaps="false" を指定することで、デフォルトのボタン スタイルをオーバーライドし、すべて大文字を無効にすることができます。

<Button
    ...
    android:textAllCaps="false" />

ここを見てください

于 2015-09-30T13:19:57.797 に答える
0

その Drawable オブジェクトの内容を確認する必要があるかもしれません。 getDrawable() を使用して Drawable オブジェクトを取得しますが、API 定義が呼び出しパラメーターと一致していないようです。

Android 5.0 以降の場合

Drawable getDrawable(int id) このメソッドは API レベル 22 で廃止されました。代わりに getDrawable(int, Theme) を使用してください。

Drawable getDrawable(int id, Resources.Theme theme) 特定のリソース ID に関連付けられ、指定されたテーマ用にスタイル設定されたドローアブル オブジェクトを返します。

2 番目のパラメーターは、色ではなく、テーマのように見えます。右 ?

于 2015-09-30T01:46:02.593 に答える
0

これを試して

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      getResources().getDrawable(R.drawable.your_drawable, getTheme());
            } else {
                getResources().
                        getDrawable(R.drawable.your_drawable);
            }
于 2015-09-30T06:54:30.713 に答える