error:
今天遇到一个奇葩的问题,就是我用Webview 加载了一个网页的页面的时候,点击input 的时候 手机APP 无法弹出输入法! 纠结了好长的时间。
貌似Android 本身确实存在这个问题:
你可以查看一下这篇博客:
http://jojol-zhou.iteye.com/blog/1299017
但是,我的情况博客并没有给出解决方案:
我以为是Androidmeanfest.xml 中的文件中Activity 指定的输入法的模式有问题,我看了一下并没有隐藏。 其实只要不设置,默认的状态就可以的!
我们具体学习一下:
【Android开发经验】android:windowSoftInputMode属性详解
http://blog.csdn.net/zhaokaiqiang1992/article/details/39761461问题依然没有得到解决:
然后我参考了这篇博客:
http://blog.csdn.net/tu_bingbing/article/details/41810473
将我自定义的Webview 改写成:
public class ProgressBarWebView extends WebView{
public ProgressBarWebView(Context context) {
this(context, null);
}
public ProgressBarWebView(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.webViewStyle);
}
public ProgressBarWebView(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
// TODO
// your code
}
}
这种做法是正确的,但是我用Android studio complie 的时候,不能运行,这就比较蛋疼了。
解决方案:
不要使用自己的自定义的webview. 使用原生的Webview
<WebView android:id="@+id/webview_announcement" android:layout_width="match_parent" android:layout_height="match_parent" />
然后设置:
private void initWebViewSetting() { WebSettings webSettings = mWebView.getSettings(); if(null != webSettings){ webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setAppCacheEnabled(true); webSettings.setSaveFormData(true); webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); webSettings.setSupportMultipleWindows(true); webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setAllowFileAccess(true); webSettings.setNeedInitialFocus(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setLoadWithOverviewMode(true); webSettings.setLoadsImagesAutomatically(true); webSettings.setLoadWithOverviewMode(true); mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); //启动硬件加速 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } } }
我们看一下 webview 源码就知道了为什么?
/** * Construct a new WebView with a Context object. * @param context A Context object used to access application assets. */public WebView(Context context) { this(context, null);} /** * Construct a new WebView with layout parameters. * @param context A Context object used to access application assets. * @param attrs An AttributeSet passed to our parent. */public WebView(Context context, AttributeSet attrs) { this(context, attrs, com.android.internal.R.attr.webViewStyle);} /** * Construct a new WebView with layout parameters and a default style. * @param context A Context object used to access application assets. * @param attrs An AttributeSet passed to our parent. * @param defStyle The default style resource ID. */public WebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle);}
now you know!
No comments:
Post a Comment