2013-05-16 26 views
11

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

no background image on focused textarea

私は-webkit-タップハイライトカラー、-webkit-外観、-webkit-背面視認性、概要、および他のものの一握りを変えてみた、何も動いていないようにみえ。助けて!

答えて

8

[OK]をEDIT

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

私はソースを掘り始めました。問題はWebTextViewクラスにあると信じています。 textviewsとtextareasを扱うクラスです。

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

良い解決策は、このクラスを拡張して修正することです。残念ながらthere is no WebTextView class in the sdk。それを上書きすることはできません。

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

あなたはそれをJavaで修正することはできませんし、JavaScriptで修正することはできません。私はこの問題の解決策がないのではないかと心配しています。私は修正スタンド

EDIT

。フォーカス提案のための@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);   
} 

のJava:ページの要素がトリガする

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に制限することを選んだ、私はその問題で見つけることができる唯一のバージョンです。

+0

私はアンドロイドのいくつかのバージョンでこの作品を見てきました(私はどのバージョンのタブレットが壊れているのかわかりません)。現在のバージョンの4.0.xを実行している私のタブレットでは動作しません...あなたはどのAndroidのバージョンを使用していますか? –

+0

これは明らかに4.0.3の問題です。そして私が言う限りでは解決策はありません。 – caiocpricci2

+0

ついにこれに戻る時間がありました。私は実際にはweebviewのOnHierarchyChangeListenerをオーバーライドして、すべてのビューをonChildViewAddedの透明に設定しました。あなたが言ったように、私はどの人がこれを持っているかを選ぶことはできませんが、これは私の特定のアプリケーションのために働きます。私に手伝ってくれてありがとう! :D:D –

1

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

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

編集:Jellybeanのソースコードを確認したところ、この動作は変更されたようです。 JellybeanにネイティブオーバーレイWebTextViewはありません!あなたの背景を見たタブレットは、おそらくゼリーのタブレットでした。とにかく、私が言ったことはまだICS以下に適用されます。

+0

彼について知りませんが、もしあなたが提供できるなら、私は愛するでしょう。そのテキストビューをどのように正確にターゲット設定できますか? – caiocpricci2

+0

これはウェブアプリの場合は、あなたがそれを行うにはいくつかの方法があります。 ViewTreeObserver(http://developer.android.com/reference/android/view/ViewTreeObserver.html)を使用してフォーカスの変更をリスンするか、親ビューからgetCurrentFocus()を呼び出すだけです。 –

+0

できるだけ早くこれを試してみます。残念ながらもっと緊急な問題が出てきました。私はすぐに試してみる時間がありません。私はあなたがそれを試してもあなたの賞金を得ることを確認します。ありがとう! –