自定义选项卡支持库

Custom Tabs Support Library

最近添加了这个支持库,但找不到任何示例。

这个库的用途是什么?

你能post任何使用这个库的例子吗?

CustomTabs用于在支持CustomTabs的浏览器中打开links。最有可能在 Chrome 上完成打开,因此 CustomTabs 是 chromium 平台的一部分。

目的是避免在您的应用程序中实施 WebView,同时为您提供设置实际 chrome 选项卡样式的选项,例如工具栏颜色、标题、各种 exit/enter 转换、添加操作按钮和菜单。 CustomTabs 将允许您的应用程序绑定到 chrome 服务并使 chrome 作为您应用程序的一部分工作。样式会让您感觉打开的 Web 资源是您的应用程序的一部分。

除了样式之外,CustomTabs 将为您提供标准 WebView.

可能无法实现的完整 chrome Web 功能

这里是demos,很直接。

编辑:

A snippet from my application 是 Google 演示的 "simplified" 版本,目前缺少回退机制。

助手的用法如下:

  1. 当你的 activity 活着时初始化它

      @Override
      protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_preview);
         mCustomTabHelper = new SimpleCustomChromeTabsHelper(this);<br>
       }
</pre>
 2. 当实例处于活动状态并且我们有一个 url 准备好打开时,我们可以调用:

mCustomTabHelper.prepareUrl(mProduct.getRedirectUrl());

它将绑定到 Chrome 服务,如果之前没有绑定,或者只会通知 Chrome 服务我们将来可能会打开 link。 CustomTabSession可以用来打开或准备多个url.

  1. 打开url

    mCustomTabHelper.openUrl(mProduct.getRedirectUrl());

openUrl 的重载方法正在使用 ui 选项 builder,它是 CustomTabIntent.Builder 的副本,但我删除了 CustomTabsSession 参数,所以 helper 稍后将在内部 build CustomTabIntent

我是 运行 Chrome 开发版和稳定版。如果我选择稳定版,我根本无法使用 CustomTabs。作为 Google 的建议,CustomTabs 仅适用于 Chrome 45 和 Chrome 的 beta 版本。

来自我的应用程序的演示:https://youtu.be/fnIZwuJXjHI

编辑Post

@NikolaDespotoski 提到了 demo project on github,它可以部分重用。

解决方案基于this article

  1. 将项目 shared 添加到您的项目。 Shared 是项目的名称(我不知道为什么 Google 没有将它添加到 customtabs 库中)。 link to shared project

  2. 将演示项目中的 Activity 帮助程序复制到您的项目中,并放置正确的包。 CustomTabActivityHelper

  3. 要预取 url 使用 CustomTabActivityHelper#mayLaunchUrl 方法(如果需要)和 CustomTabActivityHelper#openCustomTab 打开 Chrome 自定义选项卡。

例如打开自定义选项卡:

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
CustomTabActivityHelper.openCustomTab(this, customTabsIntent, uri,
        new CustomTabActivityHelper.CustomTabFallback() {
            @Override
            public void openUri(Activity activity, Uri uri) {
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        });

url 的预取比较复杂。可以看this demo更好理解

试试这个:

gradle 依赖关系:

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

代码:

Uri uri = Uri.parse("https://github.com/mzelzoghbi");

// create an intent builder
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();

// Begin customizing
// set toolbar colors
intentBuilder.setToolbarColor(ContextCompat.getColor(this, R.color.colorPrimary));
intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));

// build custom tabs intent
CustomTabsIntent customTabsIntent = intentBuilder.build();

// launch the url
customTabsIntent.launchUrl(activity, uri);