11

ユーザーが入力フィールドまたはテキストエリアをクリックすると、アプリケーションがズームインします。それを無効にする簡単な方法はありますか?

現在、メタタグがあります:

meta name="viewport" content="width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi;"

Android 2.2 、 特にHTC Evo 4Gを搭載したデバイスで見るまでは、すべてが素晴らしく見えます。

4

10 に答える 10

3

私はこれをたくさんいじりました。

サーバー側で行うには、さまざまな画面サイズと電話に対してさまざまなソリューションを用意する必要があります。

これは、たとえば HTC の要望に応えます。

<meta content='True' name='HandheldFriendly' />
<meta content='width=640px; initial-scale=0.50; maximum-scale=0.50;minimum-scale=0.50;' name='viewport' />
<meta name="viewport" content="width=640px" />

これはiphone用です:

<meta name="viewport" content="width=640px,user-scalable=0" />
于 2010-11-02T08:32:06.643 に答える
2
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); 

このメソッドは、API レベル 19 で廃止されました。

これは、最後の Android バージョン 4.4.2 で機能します。

webView.setInitialScale(0);//default,no zoom
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setLoadWithOverviewMode(false);
webView.getSettings().setUseWideViewPort(false);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
于 2014-08-08T04:18:41.730 に答える
1

これは単なる文字サイズ調整の問題ではないでしょうか。

body{ 
    -webkit-text-size-adjust:none; 
}
于 2011-09-20T20:34:10.217 に答える
1

マニフェストに設定するだけです:

android:windowSoftInputMode="adjustPan"
于 2015-02-23T21:35:59.167 に答える
1

少なくとも私にとっては、答えが見つかりました。HTC の欲望と Sansung 3 低解像度で動作します。

  • ビューポート メタ タグを HTML から削除します。

  • Java では、ここにある解決策を適用します。

    this.appView.getSettings().setSupportZoom( true ); //Modify this
    this.appView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);//Add this
    

    WebSettings.ZoomDensity.FARお使いの SDK バージョン (7 以降) で が利用可能かどうかを忘れずにテストしてください。

于 2011-06-20T01:37:20.763 に答える
0

これが私がそれを解決した方法です:

私が持っているすべてのページで:

<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:0.75)" href="css/ldpi.css" />
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1)" href="css/mdpi.css" />
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="css/hdpi.css" />
<meta name="viewport" content="target-densitydpi=device-dpi" />

入力フィールドのあるページには、次のものがあります。

<link rel="stylesheet" media="screen" href="css/mdpi.css" />
<meta name="viewport" content="target-densitydpi=medium-dpi" />

だから、私はフォームのhdpiの恩恵を受けませんが、少なくともそれはズームインしません

于 2011-05-16T14:51:53.710 に答える
0

このスレッドが古い歴史であることは知っていますが、仮想キーボードでスケーリングの問題が発生し、最終的にこのリンクで解決策を見つけました:

http://rickluna.com/wp/2012/02/set-app-scaling-in-phonegap-android/

これらの行をアプリの Java ソースに追加します

appView.getSettings().setSupportZoom(false);
appView.getSettings().setUseWideViewPort(false);
WebSettings ws = appView.getSettings();
ws.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
appView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
appView.setInitialScale(0);
ws.setSupportZoom(false);
ws.setBuiltInZoomControls(false);
ws.setUseWideViewPort(false);

MEDIUM を FAR に変更して、画面を元の倍率 1.0 に保ちます。

うまくいけば、他の人が検索する手間が省けます

于 2012-12-29T23:25:16.730 に答える
0

WebViewClassic.java では、実際の縮尺がデフォルトの縮尺よりも小さい場合、 displaySoftKeyboardはズームインおよびパンします。WebWiew.class mDefaultScale float にはフィールドがあり、ソース コードは、ソフトキーボードを表示すると mAActualScale が変化することを示しています。

したがって、mActualScale が >= mDefaultScale であることを確認すると、パンと再スケーリングを防ぐことができます。(以下は、grepcode サイトからの WebView.java のソース コードです。このサイトはもう実行されていません。)

private void  displaySoftKeyboard(boolean isTextView) {
     InputMethodManager imm = (InputMethodManager)
     getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (isTextView) {
            if (mWebTextView == null) return;
            imm.showSoftInput(mWebTextView, 0);

            if (mActualScale < mDefaultScale) {

                // bring it back to the default scale so that user can enter

                // text.
                mInZoomOverview = false;
                mZoomCenterX = mLastTouchX;
                mZoomCenterY = mLastTouchY;
                // do not change text wrap scale so that there is no reflow
                setNewZoomScale(mDefaultScale, false, false);
                adjustTextView(false);
            }
        }

        else { // used by plugins
            imm.showSoftInput(this, 0);
        }

    }

googleSourceのコード- Frameworks/base/core/java/android/webkit/WebViewClassic.java の WebViewClassic.java (JellyBean api 17 用) は、同様の機能を示しています。

/**
 * Called in response to a message from webkit telling us that the soft
 * keyboard should be launched.
 */
private void displaySoftKeyboard(boolean isTextView) {
    InputMethodManager imm = (InputMethodManager)
            mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    // bring it back to the default level scale so that user can enter text
    boolean zoom = mZoomManager.getScale() < mZoomManager.getDefaultScale();
    if (zoom) {
        mZoomManager.setZoomCenter(mLastTouchX, mLastTouchY);
        mZoomManager.setZoomScale(mZoomManager.getDefaultScale(), false);
    }
    // Used by plugins and contentEditable.
    // Also used if the navigation cache is out of date, and
    // does not recognize that a textfield is in focus.  In that
    // case, use WebView as the targeted view.
    // see http://b/issue?id=2457459
    imm.showSoftInput(mWebView, 0);
}
于 2011-08-27T11:21:21.493 に答える
0

(HTC Incredible で) 同じ問題が発生しましたが、まだ適切な修正方法が見つかりません。しかし、Google モバイル サイト (http://google.com/m) を使用している場合、この動作が得られないことに気付きました。その理由を突き止めようとしています。

このスレッドを含め、stackoverflow で言及されているすべての修正を試しましたが、これまでのところ何も見つかりませんでした。

私が見つけた厄介な修正の1つは、初期スケールを150(1.5X)に設定し、それに応じてWebサイトをスケーリングすると、このズーム動作も得られないことです.1.5Xのズームレベルが必要なためです。テキスト入力をクリックしても、既にそのズーム レベルにある場合は何も起こりませんか? しかし、これは非常にハッキーに感じられ、おそらくすべての電話で堅牢であるとは限りません.

于 2011-04-01T14:43:36.303 に答える