2016-10-05 17 views
8

Tôi có một WebView với android:layout_height="wrap_content" bên trong một ScrollView. Trước Android 7, điều này dẫn đến việc thay đổi kích thước WebView thành chiều cao của nội dung html cục bộ mà tôi đã đặt với loadData. Trên Nexus 5X của tôi với Android 7, chiều cao của WebView dường như không đáng tin cậy, đôi khi nó chỉ hiển thị các phần của dòng văn bản đầu tiên, đôi khi có một khoảng cách lớn ở cuối nội dung.
Tôi nghĩ có thể là do Google hiện đang sử dụng Chrome dành cho WebView bắt đầu bằng Nougat. Có ai có lời giải thích hoặc khắc phục/giải quyết sự cố cho vấn đề này không?Android 7 WebView với wrap_content

Điều cũng có thể quan trọng là các chế độ xem được chứa trong các ô của một RecyclerView.

+0

Sử dụng WebView để hiển thị nội dung hơi rủi ro –

Trả lời

1

Sử dụng WebView để hiển thị nội dung bên trong RecyclerView hơi rủi ro và không hiệu quả. Bạn không có ý tưởng làm thế nào nó hoạt động trong các thiết bị khác nhau!

Tôi đề nghị thay đổi giải pháp của bạn sử dụng TextView và chuyển đổi nội dung HTML để định dạng văn bản sử dụng lệnh này

textView.setText(Html.fromHtml(<YOUR HTML CONTENT>)) 

Bằng cách này, đây là một số nỗ lực tôi đã thực hiện với WebView để đạt được một kích thước cố định cho hiển thị một số banner quảng cáo nội dung:

public class AdsWebView extends WebView { 

// some setup codes... 
private static final int MAX_SCALE = 120; 

public AdsWebView(Context context) { 
    setVerticalScrollBarEnabled(false); 
    setHorizontalScrollBarEnabled(false); 
    setScrollbarFadingEnabled(false); 

    setupAdsScale(); 
} 

private int getAdsScale() { 
    int width = getDisplayWidth(getContext()); 
    Double val = Double.valueOf(width)/Double.valueOf(480); 
    val = val * 100d; 
    return val.intValue(); 
} 


private void setupAdsScale() { 
    int scale = getAdsScale(); 

    if (scale > MAX_SCALE) 
     scale = MAX_SCALE; 

    setInitialScale(scale); 
} 

private int getDisplayWidth(Context context) { 
    try { 
     Activity activity = (Activity) context; 
     if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) < 13) { 
      Display display = activity.getWindowManager() 
        .getDefaultDisplay(); 
      return display.getWidth(); 
     } else { 
      Display display = activity.getWindowManager() 
        .getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      return size.x; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return 0; 
    } 
} 
+0

Tôi đã biết về giải pháp này, nhưng tôi thực sự cần hỗ trợ nội dung đa dạng, vì vậy nhiều thẻ hơn TextView sẽ hỗ trợ. Nhưng cảm ơn bạn đã ủng hộ! – Alf

1

Cách giải quyết là:

chờ đợi trong khi trang html sẽ được nạp và chạy JS bên trong trang để phát hiện heigh nội dung t và đặt nó vào WebView Layout Tham số chiều cao.

Nó rất dễ dàng để chạy JS bên trong trang, chỉ cần điều hướng đến URL như

javascript:Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight); 

Để vượt qua các kết quả để mã Java bạn phải cung cấp giao diện Java Java Script như mô tả ở đây https://developer.android.com/guide/webapps/webview.html (Binding mã JavaScript để Android code)

url của bạn để di chuyển phải trông giống như

javascript:myfunc(Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)); 

các myfunc sẽ được gọi và bạn sẽ nhận được chiều cao của trang . Bây giờ chỉ cần thiết lập chiều cao cho chiều cao WebView.

Các vấn đề liên quan