是否可以将Chrome自定义标签设置为View对象

时间:2017-04-01 15:09:17

标签: android google-chrome webview chrome-custom-tabs

目前,这是我实施Chrome自定义标签的方式

String url = "http://www.google.com/";
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(WelcomeFragment.this.getActivity(), Uri.parse(url));

我想知道,是否可以将Chrome自定义标签设置为View对象?

我问的原因是,之前我有一个片段,它有ViewAnimator个对象。 ViewAnimator将在2 WebView之间转换动画。

一个WevView正在显示该网页的移动版本。另一个WebView正在显示网页的桌面版本。

以下是用于在WebView s

之间切换的代码
public void updateWebView() {
    int index = getCurrentWebViewHolderIndex();
    final WebViewHolder webViewHolder = webViewHolders[index];
    if (webViewHolder == null) {
        return;
    }

    final WebView webView = webViewHolder.webView;

    boolean loadUrl = false;
    boolean reload = false;

    synchronized (monitor) {
        if (false == webViewHolder.loadUrl) {
            webViewHolder.loadUrl = true;
            loadUrl = true;
        } else if (webViewHolder.error) {
            webViewHolder.error = false;
            reload = true;
        }
    }

    if (loadUrl) {
        webView.loadUrl(getUrl(index));
    } else if (reload) {
        webView.reload();
    }

    final WebViewFragmentActivity activity = (WebViewFragmentActivity)WebViewFragment.this.getActivity();
    if (activity != null) {
        final int progress = webViewHolder.progress;

        if (progress >= 100) {
            activity.setProgressBarVisibilityEx(false);
        } else {
            activity.setProgressBarVisibilityEx(true);
            activity.setProgressEx(progress);
        }
    }

    if (index == 0) {
        // Slide from left.
        Animation slideInLeftFast = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_in_left_fast);
        Animation slideOutRightSlow = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_out_right_slow);
        this.webViewViewAnimator.setInAnimation(slideInLeftFast);
        this.webViewViewAnimator.setOutAnimation(slideOutRightSlow);
    } else {
        // Slide from right.
        Animation slideInRightFast = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_in_right_fast);
        Animation slideOutLeftSlow = AnimationUtils.loadAnimation(this.getActivity(), R.anim.slide_out_left_slow);
        this.webViewViewAnimator.setInAnimation(slideInRightFast);
        this.webViewViewAnimator.setOutAnimation(slideOutLeftSlow);
    }

    if (webViewViewAnimator.getChildCount() >= 2) {
        webViewViewAnimator.removeViewAt(0);
    }
    webViewViewAnimator.addView(webView);
    webViewViewAnimator.setDisplayedChild(webViewViewAnimator.getChildCount() - 1);
}

这是XML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/web_view_linear_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal" >

    <ViewAnimator
        android:id="@+id/web_view_view_animator"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
    />

</LinearLayout>

有人告诉我,Chrome Custom Tabs的效果要比WebView好得多。

但是,我找不到办法,让单个片段持有2个不同的Chrome自定义标签。因为,它们是Intent,而不是View

但是,有什么办法可以将Chrome自定义标签设为View对象吗?

1 个答案:

答案 0 :(得分:0)

Chrome 自定义标签页,将在全屏上启动自己的用户界面。你不能像 XML 或 Java/Kotlin 中的视图那样拥有它。

根据此处的文档 - https://developer.chrome.com/docs/android/custom-tabs/overview/,它仅允许您在 UI 中自定义 3 项内容 -

  1. 工具栏颜色
  2. 进入和退出动画
  3. 向浏览器工具栏、溢出菜单和底部工具栏添加自定义操作