2010-09-27 34 views
67

Tôi đang cố gắng để WebView có hành vi tương tự như trình duyệt Android. Trình duyệt mở tất cả các trang theo cách cố gắng vừa với chiều rộng của màn hình. Tuy nhiên, hành vi mặc định của WebView là bắt đầu với tỷ lệ pixel 100% để nó bắt đầu phóng to ở góc trên cùng bên trái.Cách đặt độ phóng đại/chiều rộng ban đầu cho chế độ xem web

Tôi đã dành vài giờ cuối cùng cố gắng tìm cách để có được WebView để chia tỷ lệ trang thành màn hình giống như trong trình duyệt nhưng tôi không có may mắn. Có ai tìm thấy một cách để thực hiện điều này?

Tôi thấy là cài đặt được gọi là setLoadWithOverviewMode, nhưng điều đó dường như không làm gì cả. Tôi cũng đã thử nghiệm với setInitialScale nhưng trên kích thước màn hình khác nhau và kích thước trang web sẽ không được như duyên dáng như các quy mô trình duyệt.

Mọi người có bất kỳ khách hàng tiềm năng nào không?

Cảm ơn

EDIT: Phương pháp Brian dường như để làm việc khi điện thoại trong cảnh quan nhưng không phải trong bức chân dung. Trong bức chân dung nó là gần nhưng vẫn không phù hợp với toàn bộ màn hình trong trang. Tôi bắt đầu bounty này với hy vọng có một cách chắc chắn để có được zoom ban đầu để phù hợp với trang để chiều rộng của trang trong bất kỳ định hướng hoặc kích thước màn hình.

+0

bạn có tìm thấy giải pháp cho việc này hay không. – Samuel

+0

@Sam, yep giải pháp được chấp nhận bên dưới hoạt động đối với tôi. – cottonBallPaws

+0

vì lý do nào đó tôi đã dành cả ngày xung quanh việc này và nó chỉ hoạt động trong api7 chứ không phải ở trên. Cuối cùng đã phải thực hiện tương tự bằng cách sử dụng setInitialScale và tính toán quy mô ban đầu theo cách thủ công. Bằng cách này tôi đã có một hình ảnh duy nhất với kích thước 480x800. – Samuel

Trả lời

150

Các mã sau đây tải phiên bản máy tính để bàn của trang chủ Google thu nhỏ hoàn toàn để phù hợp trong webview cho tôi trong Android 2.2 trên một màn hình 854x480 pixel. Khi tôi định hướng lại thiết bị và tải lại theo chiều dọc hoặc ngang, chiều rộng của trang hoàn toàn phù hợp trong chế độ xem mỗi lần.

BrowserLayout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <WebView android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</LinearLayout> 

Browser.java:

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 

public class Browser extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.BrowserLayout); 

     String loadUrl = "http://www.google.com/webhp?hl=en&output=html"; 

     // initialize the browser object 
     WebView browser = (WebView) findViewById(R.id.webview); 

     browser.getSettings().setLoadWithOverviewMode(true); 
     browser.getSettings().setUseWideViewPort(true); 

     try { 
      // load the url 
      browser.loadUrl(loadUrl); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Cảm ơn Brian, có vẻ như đã hoạt động ngay từ cái nhìn đầu tiên. Tôi sẽ kiểm tra một loạt các trang web khác trước khi tôi thưởng cho tiền thưởng, nhưng điều này có vẻ đầy hứa hẹn! – cottonBallPaws

+0

Đây là một lời giải thích tuyệt vời. +1 – Tarik

+0

câu trả lời hay + – DeRagan

6

Hãy thử using a wide viewport:

webview.getSettings().setUseWideViewPort(true); 
+1

Cảm ơn bạn, điều đó dường như đi đúng hướng. Điều đó trong và của chính nó dường như không làm bất cứ điều gì, nhưng với sự kết hợp của setInitialScale (50) nó làm việc hoàn hảo trong bức chân dung. Tuy nhiên, giữ điện thoại ở chế độ ngang, nó không vừa với màn hình. Có những cài đặt nào khác tôi nên sử dụng cùng với cài đặt đó không? Đây là những gì tôi có hiện tại: setBuiltInZoomControls (true), setUseWideViewPort (true), setInitialScale (50). Tôi muốn nó vừa vặn với màn hình bất kể kích thước hay mật độ của màn hình. Cảm ơn một lần nữa. – cottonBallPaws

+0

không hoạt động đối với tôi .. –

2

// cho hình ảnh và video swf sử dụng chiều rộng là "100%" và chiều cao là "98%"

mWebView2.getSettings().setJavaScriptEnabled(true); 
mWebView2.getSettings().setLoadWithOverviewMode(true); 
mWebView2.getSettings().setUseWideViewPort(true); 
mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
mWebView2.setScrollbarFadingEnabled(true); 
+3

Tại sao chiều cao là 98%? – hotshot309

+0

bạn có thể giúp tôi trên https://stackoverflow.com/questions/49098464/loading-gif-in-webview-not-adjusting-to-webview – Stuart2041

19

Tôi đã tìm ra lý do tại sao chế độ xem dọc không hoàn toàn lấp đầy chế độ xem. Ít nhất là trong trường hợp của tôi, đó là vì thanh cuộn luôn hiển thị. Ngoài mã chế độ xem ở trên, hãy thử thêm mã này:

browser.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    browser.setScrollbarFadingEnabled(false); 

Điều này khiến thanh cuộn không chiếm không gian bố cục và cho phép trang web lấp đầy chế độ xem.

Hy vọng điều này sẽ giúp

9

Đây là câu hỏi cũ nhưng hãy để tôi thêm chi tiết trong trường hợp có nhiều người như tôi đến đây hơn.

Câu trả lời tuyệt vời được đăng bởi Brian không hoạt động đối với tôi trong Jelly Bean. Tôi cũng phải thêm:

browser.setInitialScale(30); 

Tham số có thể là bất kỳ tỷ lệ phần trăm nào hoàn thành nội dung được định lại kích thước nhỏ hơn chiều rộng của chế độ xem web. Sau đó setUseWideViewPort (true) mở rộng chiều rộng nội dung đến độ rộng tối đa của chiều rộng webview.

+0

Trang web của tôi được hiển thị trong chế độ xem web bao gồm nhiều Javascript hay không, nó giống như OSD trong TV, tiện ích có nút. Tôi đã sử dụng giải pháp của bạn và tôi có 2 nhận xét về điều đó: 1. lần tải trang web đầu tiên không thành công, webview là màu đen 2. Câu hỏi thứ hai là chính xác, nhưng tôi có thể nhấn đúp và đó là điều tôi không muốn , bởi vì nó quy mô các widget và các nút ngừng hoạt động sau đó. Bất kỳ trợ giúp nào bạn có thể cung cấp? Cảm ơn. – MartinC

+0

Cần lưu ý rằng giá trị mặc định của 'WebView.setInitialScale (int)' là 0 không phải 100. [Link to Documentation] (https://developer.android.com/reference/android/webkit/WebView.html# setInitialScale (int)) – DBX12

1

Tôi đang làm việc với tải hình ảnh cho câu trả lời này và tôi muốn chúng được chia tỷ lệ theo chiều rộng của thiết bị. Tôi thấy rằng, đối với các điện thoại cũ có phiên bản ít hơn API 19 (KitKat), hành vi đối với câu trả lời của Brian không hoàn toàn giống như tôi thích nó. Nó đặt rất nhiều khoảng trắng xung quanh một số hình ảnh trên điện thoại cũ, nhưng hoạt động trên một cái mới hơn của tôi. Đây là giải pháp thay thế của tôi, với sự trợ giúp từ câu trả lời này: Can Android's WebView automatically resize huge images? Thuật toán bố cục SINGLE_COLUMN không được dùng nữa, nhưng nó hoạt động và tôi cảm thấy thích hợp để làm việc với các bản xem trước cũ hơn.

WebSettings settings = webView.getSettings(); 

// Image set to width of device. (Must be done differently for API < 19 (kitkat)) 
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
    if (!settings.getLayoutAlgorithm().equals(WebSettings.LayoutAlgorithm.SINGLE_COLUMN)) 
     settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); 
} else { 
    if (!settings.getLoadWithOverviewMode()) settings.setLoadWithOverviewMode(true); 
    if (!settings.getUseWideViewPort()) settings.setUseWideViewPort(true); 
} 
Các vấn đề liên quan