11

Android WebKit は、テキストエリアに白い背景と境界線を描画し、フォーカスがあるときに入力します。それをやめさせるにはどうすればよいですか?

フォーカスされたテキストエリアに背景画像がありません

-webkit-tap-highlight-color、-webkit-appearance、-webkit-backface-visibility、outline、およびその他のいくつかを変更しようとしましたが、何も機能していないようです。ヘルプ!

4

2 に答える 2

8

編集

わかりました。以前に回答したことはすべて忘れてください。いくつかのテストを実行しましたが、これは Android 4.0.3 のみの問題のようです。そして、いくつかの悪いニュースがあります。

ソースを掘り下げ始めましたが、問題はWebTextViewクラスにあると思います。テキストビューとテキストエリアを処理するクラス。

233 ~ 240 行目にあるように、背景を描画するメソッドは常に青い四角形と白い四角形を内部に描画します。これはまさにあなたのスクリーンショットが示すものです。

適切な解決策は、このクラスを拡張して修正することです。残念ながら、sdk には WebTextView クラスはありません。つまり、上書きすることはできません。

要素を重ねてもテキストエリアの色を変更するためにあらゆる種類のJavaScriptを試しましたが、役に立ちません。これは、html コード内から到達できるものではありません。

したがって、Javaで修正することはできず、JavaScriptで修正することもできません。この問題の解決策はありません。

編集

私は訂正します。フォーカスの提案をしてくれた @grandstaish のおかげで、 のTextView作成後に背景色を簡単に変更できます。エレガントなソリューションを使用しようとしましたが、必要ViewTreeObserverなビューだけをターゲットにすることはできませんでした。すべての TextView には透明な背景があり、私はそれを望んでいませんでした。したがって、ハイブリッドアプローチがそれを解決しました:

HTML:

 <div style="background:red; position:relative; width:100%; height:500px; z-index:0;" id='behind' >
    <textarea name="Name"style="background:green; border:none; height:100px; width:250px; position:absolute; top:0; left:0; z-index:1;" 
            id='area1' onFocus='runOnFocus()' ></textarea>
    </div>

JS:

function runOnFocus(){
if (window.device.platform == "Android" && window.device.version =="4.0.3")
//I had to set a timeout here or this would trigger before the TextView was created. 1ms seems to be enough though.
window.setTimeout(function(){
        window.AndroidLayer.setBackground();},1);        
}

ジャワ:

private String TAG = "TextArea";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/index.html");
        appView.addJavascriptInterface(this, "AndroidLayer");                       
    }

public void setBackground(){
    runOnUiThread( new Runnable() {         
        @Override
        public void run() {
            Log.d("native","gotFocus");
            View tv = (View) appView.getFocusedChild();     
            if (tv == null)
                Log.d("native","isNull");
            else
                tv.setBackgroundColor(Color.TRANSPARENT);               
        }
    });

}

したがって、ページ上のどの要素が背景の変更をトリガーするかを制御できます。これに対する望ましくない副作用は見つかりませんでしたが、すべてのバージョンでテストする時間がなかったので、その問題を見つけることができた唯一のバージョンである 4.0.3 に制限することにしました。

于 2013-05-22T13:21:25.213 に答える
1

Android は、フォーカスされると、Web テキスト フィールドの上にネイティブ テキストビューを配置します。これは、発生を止めることができないコードであり、webview に組み込まれています。

ネイティブ テキストビューの可視性を View.GONE に設定することで回避できます。これを行う方法についてさらに情報が必要な場合は、お知らせください。

編集: Jellybean のソース コードを確認したところ、この動作が変更されたようです。Jellybean にはネイティブ オーバーレイ WebTextView はありません。おそらく、あなたがバックグラウンドで使用していたタブレットは Jellybean タブレットでした。とにかく、私が言ったことはICS以下にも当てはまります。

于 2013-05-27T06:33:15.467 に答える