2017-03-11 3 views
12

Ich versuche, die Standard-Schließen-Schaltfläche auf der Aktionsleiste der benutzerdefinierten Registerkarte Chrom zu ändern. Ich habe versucht, mit setCloseButtonIcon() zu setzen, aber die Standard-Schließen-Taste wird immer noch angezeigt. Ich möchte die Nähe zu einem Pfeil ändern.Chrome Custom Tabs ändern die Standard-Schließen-Schaltfläche nicht funktioniert

Mein Code unten:

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())); 
} 

Vielen Dank im Voraus,

+1

i mein Code nur überprüft diese zugreifen kann und es sieht genau das gleiche. Haben Sie ein anderes Zeichen (vielleicht ein kleineres) versucht? Könnte das Ihr Problem sein, dass der 48dp Pfeil zu groß ist? – stamanuel

+0

@stamanuel Zuerst versuchte ich 24dp, die nicht funktionierte. Nach einigem Suchen sagte jemand 48dp. Die 48dp funktionierte jedoch auch nicht. – ant2009

+0

Können Sie ein Basisprojekt posten? – azizbekian

Antwort

15

ich eine Beobachtung haben. Im letzten Monat, als ich durch SO für verschiedene chrome kundenspezifische Vorsprungausgaben suchte, fand ich dieses answer, das vorschlägt, 24dp Größenikone zu benutzen und fand auch dieses question sagend, dass es gut mit PNG funktioniert.

ich Ihren Code mit der Verwendung zurück Pfeilsymbol von here.

geprüft habe, wenn ich „ic_arrow_back_black_48dp“ verwendet, dauert es nicht die Standard-Schaltfläche zum Schließen in einen Pfeil (siehe Bild links).

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

Aber wenn ich „ic_arrow_back_black_24dp“ verwendet, es verändert perfekt die Standard-Schließen-Schaltfläche zu einem Pfeil (Bild rechts sehen).

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

Wie es perfekt für mich gearbeitet hat, sollten Sie auch versuchen, mit „24dp“ Größe zurück Pfeil-Symbol aus here statt „48dp“ Größe Pfeilsymbol zurück.

Screenshot: [Gerät: ASUS_Z00UD; OS: 6.0.1]

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

+0

@FantasyPollock Es scheint, dass Sie nur die Png-Symbole verwenden können. Ich habe ursprünglich versucht, die SVG-Icons zu verwenden. Als ich zu png wechselte, fing es an zu arbeiten. Nicht sicher, warum die Svg nicht funktioniert. Ich habe das gleiche Symbol wie Sie verwendet, aber das Png ausgewählt. Hast du mit den SVG Icons getestet? Vielen Dank. – ant2009

+0

@ ant2009 Sorry, dass ich vergessen habe, über das .png-Format zu erwähnen. Ja, ich habe immer mit png icon getestet. Nicht sicher, warum das SVG-Symbol nicht funktioniert. –

8

Vorausgesetzt, Sie die Google Bibliothek verwenden und nicht auf den zugehörig denjenigen, die Symbole Größe sollte als documented here 24dp sein.

Dies kann mit BitmapFactory Optionen erreicht werden:

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); 
4

können Sie erhalten direkt BitmapDrawable von Drawable aber nicht von VectorDrawable als setCloseButtonIcon@NonNull Bitmap icon

erfordert können Sie auch svg wie folgt verwendet werden.Laden Sie die svg von hier ic_arrow_back_black_24px

Im Folgenden Methoden sind selbsterklärend:

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

Sie können die wie oben verwenden:

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

Ref from SO

1

warum nicht Sie Image-Asset hinzufügen und speichern in Mipmap dann wird es einfacher sein, Standard-Icons in Android Studio eingebaut zu verwenden 210

Nach dem Hochladen Sie einfach Symbole und Bild von Mipmap in xml-Datei src Ressource in Image für einen Augenblick

android:src="@mipmap/ic_launcher"