0

webViewが拡張されたカスタム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を使用してlistViewをWebViewで埋めており、各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{WebViewwebView; }

すべてが正常に機能しています。ただし、問題は、一部のURLがWebビューのサイズよりも非常に広くなるため、デバイスの画面幅に適合せず、一部のURLは小さなページをロードするため、Webビューのズームを設定する必要があることです。

  • URLページのサイズに応じてwebViewのズーム/スケールを動的に設定したい。ユーザーがズームインまたはズームアウトを使用しないようにします。

私はこれを試しました

android:layout_width="match_parent"
android:layout_height="match_parent"

この

myWebview.setLoadWithOverviewMode(true);
myWebview.setUseWideViewPort(true);

そしてこれも

holder.webView.setInitialScale(percent);

しかし、それは私の要件を解決しません。

編集

trueに設定setLoadWithOverviewMode(true/false); すると、アプリがクラッシュします。これがLogcatです。

01-08 16:16:56.600: E/AndroidRuntime(8666): java.lang.IllegalArgumentException: bitmap size exceeds 32bits
  • 実際、私のWebビューは491X600から300X500までのサイズの画像をロードします。画像などのサイズを変更するにはどうすればよいですか?しかし、setLoadWithOverviewMode(true / false);を設定すると 誤解すると正常に機能しますが、問題はWebビューのサイズが画面の幅に合わせて変更されないことです。
4

2 に答える 2

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タブレットを持っているかは関係ありません。

于 2013-01-18T14:26:19.117 に答える
1

あなたはこれを試すことができます..

/**This is for to set wide */
    mWebView.getSettings().setUseWideViewPort(true);
    mWebView.getSettings().setLoadWithOverviewMode(true);
于 2013-01-08T11:47:07.500 に答える