6

この質問はすでにここで尋ねられていますが、解決策はありません。

私は持っていWebViewます。WebViewusing属性に最小の高さを設定したいのですがうまくいきminHeightません。同じ属性がボタンにも機能します。

<?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 !!"/>

以下の画像から明らかなように、WebView はminHeight属性をサポートしていません。この問題の解決策を知っている人はいますか?

ここに画像の説明を入力

4

4 に答える 4

8

android:minHeightまず、他のビューがどのように属性を使用しているかを理解しましょう。例を挙げてみましょうSpinnerAbsSpinner#onMeasure()コードでは、次のコードのチャンクが表示されます。

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

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

setMeasuredDimension(widthSize, heightSize);
...

そのため、getSuggestedMinimumHeight()優先高さを計算する際に考慮する必要があります。

WebViewでは、 がどのように測定されているか見てみましょう。

AwLayoutSizerWebViewは測定を担当する最後のコンポーネントであり、値を尊重しないことがはっきりとわかります。onMeasure()getSuggestedMinimumHeight()

これが意図した動作であるかどうかはわかりません。それにもかかわらず、その測定プロセスに何らかの影響を与えるほどの継ぎ目を見つけることができません。クラス内のコードの一部を次に示します。ここWebViewでは、最終的に返されるオブジェクトWebViewChromium(上記の順序の最初のステップ) が初期化されます。


    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());
        }
    }

ご覧のとおり、これは簡単にカスタマイズ/変更できるものではありません。

于 2017-05-17T18:54:21.073 に答える
0

それを試してみてください :

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>

ここに画像の説明を入力

于 2017-05-17T19:15:00.610 に答える
0

コンテンツビューポートのプロパティに応じて、webview の寸法がより機能すると思います...

https://developer.android.com/guide/webapps/targeting.html#Viewport を確認してください

ビューポートは、Web ページが描画される領域です。ビューポートの表示領域の合計は、完全にズームアウトしたときの画面のサイズと一致しますが、ビューポートには Web ページで使用できる独自のピクセル寸法があります。たとえば、デバイス画面の物理的な幅は 480 ピクセルですが、ビューポートの幅は 800 ピクセルにすることができます。これにより、ビューポート スケールが 1.0 の場合、幅 800 ピクセルで設計された Web ページが画面上に完全に表示されます。Android のほとんどの Web ブラウザー (Chrome を含む) は、デフォルトでビューポートを大きなサイズに設定します (幅約 980 ピクセルの「ワイド ビューポート モード」と呼ばれます)。多くのブラウザは、デフォルトで可能な限りズームアウトして、ビューポートの幅全体を表示します (「オーバービュー モード」と呼ばれます)。

于 2017-05-19T19:51:19.507 に答える
-1

これらすべてのタイプのエラーを解決するのに役立ち、非常に使いやすい制約レイアウトを使用します。

Android Studio のバージョンが 2.3.1 未満の場合は、この依存関係を追加してください。

compile 'com.android.support.constraint:constraint-layout:1.0.0-beta1'
于 2017-05-24T09:28:26.043 に答える