2017-05-11 8 views
6

Diese Frage wurde bereits gestellt here, aber es hat keine Lösung.Warum funktioniert das Attribut minHeight in WebView Android nicht?

Ich habe eine WebView. Ich möchte die Mindesthöhe auf WebView mit minHeight Attribut festlegen, aber es funktioniert nicht. Das gleiche Attribut funktioniert für Button.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.anshul.webview.WebActivity"> 

<WebView 
    android:id="@+id/webView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="400dp"></WebView> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:minHeight="150dp" 
    android:text="This is a Button. It's minHeight is set to 150 dp and it works !!"/> 

klar aus der unten Bild wird die Unterstützung der WebView nicht minHeight Attribut. Kennt jemand eine Lösung für dieses Problem?

enter image description here

+0

in welcher Android-Version haben Sie dieses Problem? – savepopulation

+0

Ich habe es auf Android 25 versucht und dieses Problem konfrontiert. Aber ich denke, dass es nicht mit der Android-Version zusammenhängt. – thedarkpassenger

+0

gab es einige Probleme über Webview in Pre-Kit-Versionen. Also habe ich gefragt. – savepopulation

Antwort

7

Lassen Sie uns zunächst verstehen, wie andere Verwendung android:minHeight Attribut Sicht. Nehmen wir zum Beispiel Spinner. In AbsSpinner#onMeasure() Code, den wir folgendes Stück Code sehen:

... 
preferredHeight = Math.max(preferredHeight, getSuggestedMinimumHeight()); 
preferredWidth = Math.max(preferredWidth, getSuggestedMinimumWidth()); 

heightSize = resolveSizeAndState(preferredHeight, heightMeasureSpec, 0); 
widthSize = resolveSizeAndState(preferredWidth, widthMeasureSpec, 30); 

setMeasuredDimension(widthSize, heightSize); 
... 

So soll getSuggestedMinimumHeight() angesehen werden, wenn bevorzugte Höhe zu berechnen.

Jetzt, mal sehen, wie WebView gemessen wird.

AwLayoutSizer ist die letzte Komponente, die für die Messung und WebViewwe can clearly see verantwortlich ist, dass seine onMeasure() nicht getSuggestedMinimumHeight() v nicht respektiert alue.

Ich bin mir nicht sicher, ob dies ein beabsichtigtes Verhalten ist oder nicht. Nichtsdestotrotz kann ich enough seams nicht finden, um irgendwie diesen Messvorgang zu beeinflussen. Here's das Futter des Codes in Klasse, wo das Objekt, das schließlich WebViewChromium (der erste Schritt in der oben genannten Reihenfolge) zurückgeben würde initialisiert wird.

 

    private void ensureProviderCreated() { 
     checkThread(); 
     if (mProvider == null) { 
      // As this can get called during the base class constructor chain, pass the minimum 
      // number of dependencies here; the rest are deferred to init(). 
      mProvider = getFactory().createWebView(this, new PrivateAccess()); 
     } 
    } 
 

Wie Sie sehen können, ist dies nicht etwas, das leicht angepasst/geändert werden kann.

-1

Versuchen Sie es:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     WebView webView = (WebView)findViewById(R.id.webView); 
     webView.loadDataWithBaseURL(null, "<html><body bgcolor=\"#E6E6FA\"> hehehe </body></html>", "text/html", "utf-8", null); 

    } 



<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:background="@color/blue" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:minHeight="300dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     > 
     <WebView 
      android:id="@+id/webView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 
    </LinearLayout> 


    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:minHeight="150dp" 
     android:text="This is a Button. It's minHeight is set to 150 dp and it works !!"/> 
    </RelativeLayout> 

enter image description here

+0

Sie sollten [Warnungen] (http://i.imgur.com/v1OfFzl.png) berücksichtigen, dass lint gibt. – azizbekian

+0

Wir können es per Code nehmen. Definieren Sie die Höhe für LinearLayout. – MrTy

0

Ich denke, mehr webview Dimensionen arbeiten nach Seitenporteigenschaften ...

prüfen https://developer.android.com/guide/webapps/targeting.html#Viewport

Das Ansichtsfenster ist der Bereich, in welche Ihre Webseite gezeichnet wird. Obwohl der gesamte sichtbare Bereich des Ansichtsfensters bei vollständiger Vergrößerung der Größe des Bildschirms entspricht, hat das Ansichtsfenster seine eigenen Pixelmaße, die für eine Webseite verfügbar sind.Obwohl ein Gerätebildschirm beispielsweise eine physische Breite von 480 Pixeln haben kann, kann das Ansichtsfenster eine Breite von 800 Pixeln haben. Dadurch kann eine mit einer Breite von 800 Pixeln erstellte Webseite vollständig auf dem Bildschirm angezeigt werden, wenn der Darstellungsbereich 1,0 beträgt. Die meisten Webbrowser auf Android (einschließlich Chrome) setzen das Ansichtsfenster standardmäßig auf eine große Größe (bekannt als "Wide Viewport Mode" bei etwa 980 Pixel Breite). Viele Browser verkleinern auch so weit wie möglich, um die volle Ansichtsfensterbreite anzuzeigen (bekannt als "Übersichtsmodus").

0

Verwenden Sie Constraint-Layout. Das wird dazu beitragen, alle diese Arten von Fehlern zu lösen und sehr einfach zu bedienen.

Wenn Ihre Android Studio-Version unter 2.3.1 ist, fügen Sie diese Abhängigkeit hinzu.

compile 'com.android.support.constraint:constraint-layout:1.0.0-beta1' 
Verwandte Themen