小编swi*_*eni的帖子

防止嵌套在ScrollView中的视图滚动到屏幕顶部

我有一个带有LinearLayout的ScrollView,LinearLayout有几个孩子.其中一个子项是包含导航选项的Horizo​​ntalScrollView.当应用程序加载时,顶部有一些内容,屏幕中间有菜单,下面有更多内容.我希望菜单能够将屏幕与其他内容一起向上滚动,但当它开始滚动屏幕时,锁定到顶部类似标题.如果用户向下滚动,它应该保持固定,直到它下面的所有内容都滚动,然后再次开始滚动,所以如果它们一直滚动,屏幕看起来与它开始的方式相同.现在我有这个初步的尝试,似乎什么也没做:

final View carouselMenu = rootView.findViewById(R.id.carousel_menu);
ScrollView scrollView = (ScrollView) rootView.findViewById(R.id.main_scroll);
RelativeLayout mainContainer = (RelativeLayout) rootView.findViewById(R.id.main_root_container);

    scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            if (carouselMenu.getScrollY() < 0) {
                carouselMenu.setScrollY(0);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

setScrollY似乎没有像我希望的那样设置View的绘制位置.有没有办法手动覆盖屏幕上放置特定视图的位置,或者我没有考虑过更好的方法?

user-interface android scrollview

6
推荐指数
0
解决办法
614
查看次数

在Android WebView中处理iframe单击

iframe在html中嵌入了加载Google广告的内容.问题是,当点击广告时,它链接到的网站会加载微小的iframe而不是打开新WebView广告来正确显示广告.我一直在StackExchange上搜索很多,发现了几个类似的问题,但没有一个解决方案适合我.我试过了:

  • 使用返回falseshouldInterceptUrlLoading(甚至从来没有被调用)
  • shouldInterceptRequest (从未打过电话)
  • onPageFinished(在加载原始页面时调用,iframe单击时没有任何内容)
  • onLoadResource.

最后一种方法让我最接近,但是尝试加载url导致无限堆叠新的空WebView片段,而不是像我预期的那样加载页面.

任何人都可以向我解释正确的方法,从内部WebView检测iframe点击,捕获广告正在尝试加载的网页,并手动打开它WebView

javascript iframe android webview

5
推荐指数
0
解决办法
566
查看次数

Facebook在Android Webview中发表评论

我正在尝试将带有Facebook评论部分的网页加载到我的Android WebView中.我按照这个问题提供的解决方案:由于默认浏览器,Android无法在webview中实现Facebook评论

当用户单击网页中的按钮以登录Facebook时,它们将显示登录屏幕并且可以成功登录,然后该视图关闭并再次显示原始网页.但是,它们仍未登录.原始WebView处于与以前相同的状态,登录按钮仍在此处.实际上从childView登录到原始评论部分我错过了什么?相关代码粘贴在下面:

webView.setLayoutParams(getLayoutParams());

    webView.setWebChromeClient(new DollyChromeClient());

    webView.setWebViewClient(new DollyWebViewClient());

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setSupportMultipleWindows(true);
    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setDisplayZoomControls(true);
    webView.getSettings().setBuiltInZoomControls(true);

    CookieManager.getInstance().setAcceptCookie(true);

private RelativeLayout.LayoutParams getLayoutParams(){
    return new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}



final class DollyChromeClient extends WebChromeClient {
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        childView = new WebView(mContext);
        childView.getSettings().setDomStorageEnabled(true);
        childView.getSettings().setJavaScriptEnabled(true);
        childView.getSettings().setSupportZoom(true);
        childView.getSettings().setBuiltInZoomControls(true);
        childView.setWebViewClient(new FaceBookClient());
        childView.setWebChromeClient(this);
        childView.setLayoutParams(getLayoutParams());

        childView.getSettings().setSupportMultipleWindows(true);
        parentLayout.addView(childView);
        childView.requestFocus();
        webView.setVisibility(View.GONE);

        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(childView);
        resultMsg.sendToTarget();
        return true;
    }

    @Override
    public boolean onConsoleMessage(ConsoleMessage cm) {
        Log.d("WebViewDebug", cm.message() + " …
Run Code Online (Sandbox Code Playgroud)

android facebook webview

1
推荐指数
1
解决办法
1672
查看次数