2017-05-28 4 views
6

私は最近、いくつかのいくつかのAndroidアプリでリンクを開いたときに、このようなルックアンドフィールとカスタムアクションメニューに「Powered byカスタムメニューの下に「Chrome」と表示されます。どのコンポーネントがこれに使用されていますか、それともまだクロムですか?WebView?うまくいけば私は、アプリケーションの中でリンクを開くことを含む私の次のプロジェクトにそれらを追加するために探しています。「Powered By Chrome」でカスタムWebViewを開くアクションメニュー

LinkedIn App LinkedInのアプリケーション

Twitter App のTwitterアプリの

GMail App のGmailアプリの

+2

参照でBroadcastReceiver: https://developer.chrome.com/multidevice/android/customtabs –

答えて

5

それはChrome Custom Tabsです。 Google Chrome hereのサンプルコードを見ることができます。

は、次の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(); 
     } 
    } 
} 

あなたapp/build.gradle

dependencies { 
    ... 
    compile 'com.android.support:customtabs:25.2.0' 
} 

に依存関係を追加して登録することを忘れないでください、あなたのごAndroidManifest.xml

<application> 
    ... 
    <receiver android:name=".CustomTabs$CopyBroadcastReceiver" /> 
</application> 
関連する問題