我有一个带有LinearLayout的ScrollView,LinearLayout有几个孩子.其中一个子项是包含导航选项的HorizontalScrollView.当应用程序加载时,顶部有一些内容,屏幕中间有菜单,下面有更多内容.我希望菜单能够将屏幕与其他内容一起向上滚动,但当它开始滚动屏幕时,锁定到顶部类似标题.如果用户向下滚动,它应该保持固定,直到它下面的所有内容都滚动,然后再次开始滚动,所以如果它们一直滚动,屏幕看起来与它开始的方式相同.现在我有这个初步的尝试,似乎什么也没做:
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的绘制位置.有没有办法手动覆盖屏幕上放置特定视图的位置,或者我没有考虑过更好的方法?
我iframe在html中嵌入了加载Google广告的内容.问题是,当点击广告时,它链接到的网站会加载微小的iframe而不是打开新WebView广告来正确显示广告.我一直在StackExchange上搜索很多,发现了几个类似的问题,但没有一个解决方案适合我.我试过了:
false从shouldInterceptUrlLoading(甚至从来没有被调用)shouldInterceptRequest (从未打过电话)onPageFinished(在加载原始页面时调用,iframe单击时没有任何内容)onLoadResource.最后一种方法让我最接近,但是尝试加载url导致无限堆叠新的空WebView片段,而不是像我预期的那样加载页面.
任何人都可以向我解释正确的方法,从内部WebView检测iframe点击,捕获广告正在尝试加载的网页,并手动打开它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)