2011-02-06 38 views
17

Tôi có một trang web mà tôi đang cố gắng hiển thị trên thiết bị Android của mình (được tải từ thư mục tài sản của dự án) bằng cách sử dụng PhoneGap (sử dụng WebView bình thường được đặt làm "appview"), nhưng webview hoàn toàn bỏ qua những điều sau :Android-- PhoneGap/WebView bỏ qua thẻ meta chế độ xem?

<meta name = "viewport" content = "user-scalable=no,width=device-width" /> 

Không có vấn đề gì tôi đặt trong dòng này (tôi đã cố gắng một cách rõ ràng thiết lập zoom, thiết lập chiều rộng/chiều cao tính bằng pixel, vv), các thiết bị hoàn toàn bỏ qua nó và làm cho các trang web rất nhỏ và được neo vào góc trên bên trái của màn hình. Tôi có thể phóng to bằng cử chỉ chụm (ngay cả khi tôi vô hiệu hóa thu phóng bằng mã html ở trên), nhưng tôi muốn trang được phóng to để phù hợp với thiết bị khi tải.

Dưới đây là một chút thú vị ... Nếu tôi đặt cùng một trang web trên máy chủ web và điều hướng đến trang web bằng trình duyệt mặc định trên thiết bị thử nghiệm của tôi, trang tải đúng cách (được chia tỷ lệ phù hợp với thiết bị).

Vui lòng trợ giúp.

Cảm ơn.

EDIT1:

thiết lập hiện tại của tôi là:

<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,target-densitydpi=device-dpi,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" /> 

Điều đó nữa cũng là hoàn toàn bị bỏ qua.

EDIT2:

Dưới đây là một cái gì đó thú vị ...

<meta name="viewport" content="width=device-width, initial-scale=2.0, maximum-scale=2.0, user-scalable=no" /> 

Dòng trên tỷ lệ trang 2x trong giả lập chưa có gì thay đổi trên thiết bị của tôi (Samsung Epic chạy 2.2.1) . Tuy nhiên, ngay cả ở 2x, trang không được thu nhỏ đến chiều rộng của trình mô phỏng ... Tôi phải đặt nó thành cái gì đó như "ban đầu-scale = 2,5".

+0

làm thêm ban đầu quy mô = 1 thay đổi bất cứ điều gì? – davejohnson

+0

Xin chào. cài đặt hiện tại của tôi là: ... Điều này không có gì. Nó hoàn toàn bị bỏ qua. Cảm ơn – RyanM

+0

Bạn có thể muốn xem qua bài đăng của tôi ở đây: http://goo.gl/P1nK3, cũng trỏ đến lỗi mà tôi đã gửi. Nó có khả năng không phải là họ đang bị bỏ qua, nhưng rằng các giá trị là mâu thuẫn và bị bỏ rơi. Tôi có rất nhiều kết quả về các hoán vị khác nhau của các tham số. Bạn có thể tìm thấy một cái gì đó hữu ích. :) – lilbyrdie

Trả lời

-1

tôi sử dụng này trên iphone với PhoneGap

<meta name="description" content="trevorrudolph.com"> 
<meta name="format-detection" content="telephone=no"> 
<meta name="apple-mobile-web-app-capable" content="yes"> 
<meta names="apple-mobile-web-app-status-bar-style" content="black-translucent"> 
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> 
<link rel="apple-touch-icon" href="http://trevorrudolph.com/wordpress/apple-touch-icon.png"> 
+0

Tôi tin rằng vấn đề là mặc dù Android cụ thể, không phải iPhone. – courtsimas

+0

tôi đã viết điều này từ lâu trước khi tôi hiểu rằng –

+0

Đây là dành cho iPhone. Viewport hoạt động tốt ở đó. – Sithys

11

Hãy thử thêm hai dòng sau trong phương thức onCreate() của lớp Java mà kéo dài DroidGap.

this.appView.getSettings().setUseWideViewPort(true); 
this.appView.getSettings().setLoadWithOverviewMode(true); 

Hãy cho tôi biết nếu thẻ khung nhìn của bạn bây giờ bắt đầu hoạt động.

+0

Đây là nó (và câu trả lời của Ivan là tốt) - điều này cần hàng triệu upvotes hơn. Mặc dù, đối với tôi đó là 'lớp công khai MyApp mở rộng phương thức CordovaActivity' cần phải hẹn hò, chứ không phải' DroidGap'. Có thể bạn có thể cập nhật câu trả lời của mình vì câu trả lời vẫn có liên quan! –

+0

Xin lỗi các bạn, tôi mới làm quen với điều này. Tôi phải thêm mã này ở đâu, tôi phải làm gì để có được chế độ xem của mình? Tôi đã có dự án cordova 3.6 và tầm nhìn của tôi không hoạt động. Vì vậy ... tôi tìm thấy giải pháp này và nó có vẻ tốt nhưng ... yep, tôi không biết nơi để thực hiện mã. : -/ – Sithys

+1

Câu trả lời hay nhưng API đã thay đổi một chút. Bây giờ là: ((SystemWebView) appView.getEngine(). GetView()) getSettings(). Xxx – Philippe

2

Tôi đã thử

this.appView.getSettings().setUseWideViewPort(true); 
this.appView.getSettings().setLoadWithOverviewMode(true); 

Phóng to không được kích hoạt.

Với các thiết lập sau đây, zoom kích hoạt

this.appView.getStrings().setSupportZoom(true); 

Nhưng nó không được kiểm soát một cách chính xác bằng thẻ viewport, tất cả các trang đang Zoomable bây giờ thậm chí với mức tối thiểu quy mô = 1 và tối đa quy mô = 1 bộ trong khung nhìn nhãn.

Và điều hướng trang bị lỗi ngay bây giờ, nhấp vào nút trên trang và nút quay lại Android không hoạt động chính xác.

+0

sai lầm: 'this.appView.getSettings(). SetSupportZoom (true);' – Velda

1

Nếu bạn muốn android để mở rộng nội dung để chiều rộng cố định (1024 trong ví dụ) sử dụng này:

<meta name="viewport" id="viewport" content="width=1024"> 
<script type="text/javascript"> 
    var viewPortWidth = 1024; 
    function setViewport() { 
    if ((navigator.userAgent.toLowerCase().indexOf("android")!=-1)) { 
     var wW0 = window.screen.width; 
     var scale = wW0/viewPortWidth; 
     var vPort = "width="+viewPortWidth+", maximum-scale="+scale+", minimum-scale="+scale+", initial-scale="+scale+", user-scalable=yes"; 
     document.getElementById("viewport").setAttribute("content", vPort); 
    } 
    } 
    setViewport(); 
</script> 

Ngoài ra, bạn nên thêm event listener cho onorientationchange gọi setViewport chức năng.

+0

Tôi phải đảo ngược phân chia tỷ lệ thành có được điều này để làm việc –

+0

Tôi đã hy vọng về điều này nhưng nó không hoạt động. Trang của tôi là 760px và màn hình là 1080px, nó phù hợp với tỷ lệ tại ~ 0.465. 760/1080 là ~ 0,704. –

+0

Tôi nghĩ * mẹo ở đây là bạn không chỉ cung cấp thuộc tính 'width', được cho là hoạt động nhưng dường như không có, mà còn là thuộc tính quy mô nhỏ, có quy mô tối đa, có thể hoạt động thay thế. – commonpike

2

Có câu trả lời hay ở đây nhưng Cordova API dường như đã thay đổi một chút.

Trong phương pháp OnCreate (sau loadUrl hoặc sau khi bạn gọi init rõ ràng):

CordovaWebViewEngine engine = appView.getEngine(); 
    SystemWebView webView = (SystemWebView)engine.getView(); 
    WebSettings settings = webView.getSettings(); 
    settings.setUseWideViewPort(true); 
    settings.setLoadWithOverviewMode(true); 
Các vấn đề liên quan