web-dev-qa-db-ja.com

Chromeカスタムタブは、デフォルトの閉じるボタンが機能しないように変更します

カスタムchromeタブのアクションバーにあるデフォルトの閉じるボタンを変更しようとしています。setCloseButtonIcon()を使用して設定しようとしましたが、デフォルトの閉じるボタンが表示されます。I矢印の近くを変更したい。

以下の私のコード:

public void openHomePage() {
    final CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
    builder.setToolbarColor(ContextCompat.getColor(getActivity(), R.color.primary));
    final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_48dp);
    builder.setCloseButtonIcon(backButton);

    builder.setShowTitle(true);
    final CustomTabsIntent customTabsIntent = builder.build();

    customTabsIntent.launchUrl(getActivity(), Uri.parse(mTvHomepage.getText().toString()));
}
15
ant2009

観察があります。先月、 [〜#〜] so [〜#〜] でさまざまなchromeカスタムタブの問題を検索したところ、これが見つかりました answer = 24dpサイズのアイコンを使用することを提案し、これも見つかりました 質問 PNGで正常に動作していると言っています。

here の戻る矢印アイコンを使用してコードを確認しました

"ic_arrow_back_black_48dp"を使用したとき、デフォルトの閉じるボタンが矢印に変更されませんでした(左の画像を参照)。

final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_48dp);

しかし、 "ic_arrow_back_black_24dp"を使用すると、デフォルトの閉じるボタンが矢印に完全に変更されました(右の画像を参照)。

final Bitmap backButton = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_24dp);

私にとっては完璧に機能しているので、 "24dp"サイズの戻る矢印アイコンを here "48dp"サイズの戻る矢印アイコンの代わりに。

スクリーンショット:[デバイス:ASUS_Z00UD; OS:6.0.1]

The default close button has changed to an arrow when using 24dp size icon instead of 48dp size.

20
Fantasy Pollock

Google ライブラリを使用していて、関連するライブラリではない場合、アイコンのサイズは ここに記載 のように24dpである必要があります。

これは、BitmapFactoryオプションで実現できます。

BitmapFactory.Options options = new BitmapFactory.Options();
options.outWidth = 24;
options.outHeight = 24;
options.inScaled = true; //already default, just for illustration - ie scale to screen density (dp)
... = BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_black_48dp, opts);
8
Temporary

BitmapDrawableDrawableから直接取得できますがVectorDrawableからは取得できません。setCloseButtonIconには@NonNull Bitmap iconが必要です。

次のようにsvgを使用することもできます。ここからsvgをダウンロードします ic_arrow_back_black_24px

以下の方法は自明です:

private static Bitmap getBitmapFromDrawable(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (drawable instanceof BitmapDrawable) {
  return ((BitmapDrawable) drawable).getBitmap();
} else if (drawable instanceof VectorDrawable) {
  return getBitmapFromVectorDrawable((VectorDrawable) drawable);
} else {
  throw new IllegalArgumentException("Unable to convert to bitmap");
}
}

@TargetApi(Build.VERSION_CODES.Lollipop)
private static Bitmap getBitmapFromVectorDrawable(VectorDrawable vectorDrawable) {
Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),
    vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
vectorDrawable.draw(canvas);
return bitmap;
}

上記は次のように使用できます。

builder.setCloseButtonIcon(getBitmapFromDrawable(this, R.drawable.ic_arrow_back_black_24px)); 

SOからの参照

5
Anurag Singh

画像アセットを追加してミップマップに保存すると、組み込みのデフォルトアイコンを使用するのが簡単になりますAndroid studio Assest Studio

アップロード後ImageViewのsrcリソースを使用して、xmlファイルのミップマップからアイコンと画像に簡単にアクセスできます。

Android:src="@mipmap/ic_launcher"
2

Kotlinでこれを機能させるには( Android KTX を使用)、any24dpドローアブルリソースを使用します。

_AppCompatResources.getDrawable(activity, R.drawable.ic_arrow_back_white_24dp)?.let {
    builder.setCloseButtonIcon(it.toBitmap())
}
_

そして、あなたがいくつかの着色をする必要があるならば:

_AppCompatResources.getDrawable(activity, R.drawable.ic_arrow_back_black_24dp)?.mutate()?.let {
    DrawableCompat.setTint(it, Color.WHITE)
    builder.setCloseButtonIcon(it.toBitmap())
}
_

ドローアブルのサイズを変更する必要がある場合は、新しい幅/高さをDrawable.toBitmap()関数に渡します。

また、Kotlinを使用していない場合は、Drawable.toBitmap()コードと同等のものを使用できます。

_fun Drawable.toBitmap(
    @Px width: Int = intrinsicWidth,
    @Px height: Int = intrinsicHeight,
    config: Config? = null
): Bitmap {
    if (this is BitmapDrawable) {
        if (config == null || bitmap.config == config) {
            // Fast-path to return original. Bitmap.createScaledBitmap will do this check, but it
            // involves allocation and two jumps into native code so we perform the check ourselves.
            if (width == intrinsicWidth && height == intrinsicHeight) {
                return bitmap
            }
            return Bitmap.createScaledBitmap(bitmap, width, height, true)
        }
    }

    val (oldLeft, oldTop, oldRight, oldBottom) = bounds

    val bitmap = Bitmap.createBitmap(width, height, config ?: Config.ARGB_8888)
    setBounds(0, 0, width, height)
    draw(Canvas(bitmap))

    setBounds(oldLeft, oldTop, oldRight, oldBottom)
    return bitmap
}
_

詳細については、 this answerを参照してください。

1
Mark

私も同じ問題に直面しなければなりませんでした

解決 :-

1)image(back arrow)png形式で取得します。
2)画像サイズを24dp未満に保ちます。

1
INavin

私はこのサイトに行かなければなりませんでした: https://material.io/tools/icons/?icon=keyboard_backspace&style=baseline

PNGを入手して、そのように使用しました。私はパーティーに遅れていることを知っていますが、それはそれを必要とする人のためのものです。

0
Beast77