Cách đặt thu phóng / chiều rộng ban đầu cho chế độ xem web


76

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 chúng với màn hình. Tuy nhiên, hoạt động mặc định của WebView là bắt đầu ở tỷ lệ pixel 100% nên nó bắt đầu được phóng to ở góc trên cùng bên trái.

Tôi đã dành vài giờ qua để cố gắng tìm cách làm cho WebView mở rộng trang trên màn hình giống như trong trình duyệt nhưng tôi không gặp may. Có ai đã tìm thấy một cách để thực hiện điều này?

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

Bất kỳ ai có bất kỳ dẫn?

Cảm ơn

CHỈNH SỬA: Phương pháp của Brian dường như hoạt động khi điện thoại ở chế độ ngang nhưng không hoạt động ở chế độ dọc. Ở chế độ dọc, nó gần nhưng vẫn không vừa với toàn bộ màn hình trong trang. Tôi bắt đầu phần thưởng này với hy vọng có một cách chắc chắn để thu phóng ban đầu cho vừa với chiều rộng của trang theo bất kỳ hướng hoặc kích thước màn hình nào.


bạn đã tìm thấy một giải pháp cho điều này.
Samuel

@Sam, vâng, giải pháp được chấp nhận bên dưới phù hợp với tôi.
cottonBallPaws 13/12/11

vì một số lý do tôi đã dành cả ngày để làm việc này và nó chỉ hoạt động trong api7 và 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. Nhân tiện, tôi có một hình ảnh duy nhất với kích thước 480x800.
Samuel

Làm việc đối với tôi trên mọi thiết bị Tôi đã thử nó trên, từ cấp api 7 lên qua 14.
cottonBallPaws

Câu trả lời:


159

Đoạn mã sau tải phiên bản máy tính để bàn của trang chủ Google được thu nhỏ hoàn toàn để vừa webviewvới tôi trong Android 2.2 trên màn hình 854x480 pixel. Khi tôi định hướng lại thiết bị và nó tải lại ở chế độ dọc hoặc ngang, chiều rộng trang hoàn toàn vừa với 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();
        }
    }
}

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

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

nó không làm việc cho tôi. Có vẻ như các zoom được thiết lập sau khi tải trang
jiduvah

Điều này hoạt động tuyệt vời ... làm thế nào để mọi người đưa ra các giải pháp này ?? Thử và sai, hoặc bạn có một số tome thiêng liêng?
CloudMeta

6
Giải pháp này cũng không làm việc cho tôi. Tôi nhận được rất nhiều khoảng đen ở bên phải và dưới cùng của nội dung. Tuy nhiên, tôi đang tải một hình ảnh từ thư mục nội dung thay vì một trang web. Đó có thể là lý do tại sao?
SilithCrowe 10/12/12

20

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

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

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

Hi vọng điêu nay co ich


12

Đó là một câu hỏi cũ nhưng hãy để tôi thêm một chi tiết đề phòng có nhiều người như tôi đến đây.

Câu trả lời xuất sắc được đăng bởi Brian không phù hợp với tôi trong Jelly Bean. Tôi cũng phải thêm vào:

browser.setInitialScale(30);

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


Trang web của tôi hiển thị trong webview bao gồm rất nhiều Javascript, nó giống OSD trong TV hơn, các widget 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, chế độ xem web bị đen 2. Câu hỏi thứ hai đúng, nhưng tôi có thể nhấn đúp và đó là điều tôi không muốn, vì nó có quy mô các widget và 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

Cần lưu ý, đó là giá trị mặc định WebView.setInitialScale(int)là 0 không 100. Liên kết với Tài liệu
DBX12

Cảm ơn, nó đã giúp. Tôi đã thử 5, 10, 30 và 70 phần trăm. Trong trường hợp 70, nó thay đổi kích thước một trang lớn thành 70%, do đó, các thanh cuộn xuất hiện. Trong trường hợp 5-30%, nó thay đổi kích thước trang bình thường.
CoolMind

7

Hãy thử sử dụng một khung nhìn rộng :

 webview.getSettings().setUseWideViewPort(true);

1
Cảm ơn bạn, điều đó có vẻ là đúng hướng. Điều đó tự nó dường như không làm được gì, nhưng với sự kết hợp của setInitialScale (50), nó hoạt động hoàn hảo ở chế độ dọc. Tuy nhiên, cầm điện thoại ngang, nó không vừa với màn hình. Có cài đặt nào khác mà tôi nên sử dụng ngoài cài đặt đó không? Đây là những gì tôi hiện có: setBuiltInZoomControls (true), setUseWideViewPort (true), setInitialScale (50). Tôi muốn nó vừa khít 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

3

// đối với 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);

bạn có thể giúp tôi về stackoverflow.com/questions/49098464/…
StuartDTO

1

Tôi đang làm việc với việc tải hình ảnh cho câu trả lời này và tôi muốn chúng được thu nhỏ 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 nhỏ hơn API 19 (KitKat), hành vi cho câu trả lời của Brian không hoàn toàn như tôi thích. Nó đặt nhiều khoảng trắng xung quanh một số hình ảnh trên điện thoại cũ hơn, nhưng hoạt động trên điện thoạ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: WebView của Android có thể tự động thay đổi kích thước hình ảnh lớn không? Thuật toán bố cục SINGLE_COLUMNkhông được dùng nữa nhưng nó hoạt động và tôi cảm thấy nó phù hợp để làm việc với các chế độ xem web 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);
}

0

Nếu bạn đã tìm ra chế độ xem web nhưng hình ảnh của bạn vẫn nằm ngoài quy mô, thì giải pháp tốt nhất mà tôi tìm thấy ( ở đây ) chỉ đơn giản là thêm trước tài liệu với:

<style>img{display: inline; height: auto; max-width: 100%;}</style>

Kết quả là tất cả các hình ảnh được chia tỷ lệ để phù hợp với chiều rộng của chế độ xem web.


0

trong Kotlin Bạn có thể sử dụng,

webView.isScrollbarFadingEnabled = true
webView.setInitialScale(100)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.