我有一个带有webView的Custom ListView。这是XML代码
reader_layout.xml
<ListView
android:id="@+id/listReader"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/readerHeader"
android:divider="@android:color/background_dark"
android:dividerHeight="5dp" >
</ListView>
reader_list_webview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:scrollbars="none" />
</RelativeLayout>
我正在使用AsyncTask和BaseAdapter用WebView填充listView,并且我在每个webView中加载了不同的URL。这是java代码。
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) {
context = c;
}
// ---returns the number of images---
public int getCount() {
return URLs.size();
}
public ImageAdapter(Context ctx, Activity act) {
inflater = (LayoutInflater) act
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
// ---returns the ID of an item---
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
// ---returns an ImageView view---
public View getView(final int position, View convertView,
ViewGroup parent) {
// ImageView bmImage;
final ViewHolder holder;
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.book_reader_list_style, parent,
false);
holder = new ViewHolder();
holder.webView = (WebView) vi.findViewById(R.id.webView1);
WebSettings webSettings = holder.webView.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
holder.webView.setVerticalScrollBarEnabled(false);
holder.webView.setHorizontalScrollBarEnabled(false);
holder.webView.setVisibility(View.VISIBLE);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(false);
holder.webView.setInitialScale(scaleWebView);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
holder.webView.loadUrl((URLs.get(position)));
return vi;
}
}
类ViewHolder { WebView webView; }
一切都很好。但问题是一些URL变得比webview大小宽,因此它们不适合设备屏幕宽度,而一些URL加载小页面因此我们需要设置webview的缩放。
我试过这个
android:layout_width="match_parent"
android:layout_height="match_parent"
和这个
myWebview.setLoadWithOverviewMode(true);
myWebview.setUseWideViewPort(true);
这也是
holder.webView.setInitialScale(percent);
但它无法解决我的要求。
如果我将setLoadWithOverviewMode(true/false);
设置为true我的应用程序崩溃,这里是Logcat
01-08 16:16:56.600: E/AndroidRuntime(8666): java.lang.IllegalArgumentException: bitmap size exceeds 32bits
答案 0 :(得分:1)
你可以试试这个..
/**This is for to set wide */
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
答案 1 :(得分:1)
最后,我自己解决了我的解决方案。这是
holder.webView.loadDataWithBaseURL(null,"<!DOCTYPE html><html><body style = \"text-align:center\"><img style=\"border-style:dotted;border-width:5px;border-color:black;width:99%;\" src= " + URLs.get(position)+ " alt=\"page Not Found\"></body></html>","text/html", "UTF-8", null)
它将完全适合webView的标签填充屏幕。无论你的手机是230X480还是你有800X1200的任何Android平板电脑。