Niedawno zauważyłem, że po otwarciu linku w niektórych z kilku aplikacji na Androida mają podobny wygląd i niestandardowe menu akcji z opcją "Powered by Chrome "poniżej menu niestandardowego. Jakiego składnika używa się w tym czy nadal jest to Chromium WebView
? Mam nadzieję, że dodam je do moich kolejnych projektów, które wymagają otwarcia odnośnika wewnątrz aplikacji.Otwieranie niestandardowego WebView z "Powered By Chrome" z menu akcji
6
A
Odpowiedz
5
Jest Chrome Custom Tabs. Możesz zobaczyć przykładowy kod z Google Chrome here.
Spróbuj następujące klasy util:
public class CustomTabs {
private static final int TOOLBAR_SHARE_ITEM_ID = 1;
public static void openTab(Context context, String url) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
enableUrlBarHiding(builder);
setToolbarColor(context, builder);
setSecondaryToolbarColor(context, builder);
setCloseButtonIcon(context, builder);
setShowTitle(builder);
setAnimations(context, builder);
setShareActionButton(context, builder, url);
addToolbarShareItem(context, builder, url);
addShareMenuItem(builder);
addCopyMenuItem(context, builder);
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(context, Uri.parse(url));
}
/* Enables the url bar to hide as the user scrolls down on the page */
private static void enableUrlBarHiding(CustomTabsIntent.Builder builder) {
builder.enableUrlBarHiding();
}
/* Sets the toolbar color */
private static void setToolbarColor(Context context, CustomTabsIntent.Builder builder) {
builder.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary));
}
/* Sets the secondary toolbar color */
private static void setSecondaryToolbarColor(Context context, CustomTabsIntent.Builder builder) {
builder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary));
}
/* Sets the Close button icon for the custom tab */
private static void setCloseButtonIcon(Context context, CustomTabsIntent.Builder builder) {
builder.setCloseButtonIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_arrow_back));
}
/* Sets whether the title should be shown in the custom tab */
private static void setShowTitle(CustomTabsIntent.Builder builder) {
builder.setShowTitle(true);
}
/* Sets animations */
private static void setAnimations(Context context, CustomTabsIntent.Builder builder) {
builder.setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left);
builder.setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right);
}
/* Sets share action button that is displayed in the Toolbar */
private static void setShareActionButton(Context context, CustomTabsIntent.Builder builder, String url) {
Bitmap icon = BitmapFactory.decodeResource(context.getResources(), android.R.drawable.ic_menu_share);
String label = "Share via";
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, url);
shareIntent.setType("text/plain");
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, shareIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setActionButton(icon, label, pendingIntent);
}
/* Adds share item that is displayed in the secondary Toolbar */
private static void addToolbarShareItem(Context context, CustomTabsIntent.Builder builder, String url) {
Bitmap icon = BitmapFactory.decodeResource(context.getResources(), android.R.drawable.ic_menu_share);
String label = "Share via";
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, url);
shareIntent.setType("text/plain");
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, shareIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addToolbarItem(TOOLBAR_SHARE_ITEM_ID, icon, label, pendingIntent);
}
/* Adds a default share item to the menu */
private static void addShareMenuItem(CustomTabsIntent.Builder builder) {
builder.addDefaultShareMenuItem();
}
/* Adds a copy item to the menu */
private static void addCopyMenuItem(Context context, CustomTabsIntent.Builder builder) {
String label = "Copy";
Intent intent = new Intent(context, CopyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addMenuItem(label, pendingIntent);
}
public static class CopyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String url = intent.getDataString();
ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData data = ClipData.newPlainText("Link", url);
clipboardManager.setPrimaryClip(data);
Toast.makeText(context, "Copied " + url, Toast.LENGTH_SHORT).show();
}
}
}
Nie zapomnij dodać zależności do app/build.gradle
dependencies {
...
compile 'com.android.support:customtabs:25.2.0'
}
i zarejestrować BroadcastReceiver
w AndroidManifest.xml
<application>
...
<receiver android:name=".CustomTabs$CopyBroadcastReceiver" />
</application>
Apostolskiej: https://developer.chrome.com/multidevice/android/customtabs –