2013-05-16 62 views

回答

8

編輯

好了,忘了我以前回答一切。我已經運行了一些測試,這似乎只是在Android 4.0.3上的一個問題。還有一些壞消息。

我開始挖掘源代碼,我相信問題在於WebTextView類。處理textviews和textareas的類。

如果您在第233-240行看到繪製背景的方法總是在裏面繪製一個藍色的矩形和一個白色的矩形。這正是你的屏幕截圖顯示的內容。

一個好的解決辦法是擴展這個類並修復它。不幸的是there is no WebTextView class in the sdk。意思是你不能覆蓋它。

我試過各種javascript來改變textarea的顏色,even overlapping the element但它沒有幫助。這不是我們可以在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);   
} 

的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

我已經看到了一些版本的Android上的這項工作(我不知道什麼版本,該平板被砸)。在我運行4.0.x的當前平板電腦上不起作用...您運行的是哪個版本的Android? –

+0

這只是4.0.3上的一個問題而已。據我所知,沒有解決辦法。 – caiocpricci2

+0

我終於有時間回到這個了。我實際上只是覆蓋了weebview的OnHierarchyChangeListener,並將每個視圖設置爲在onChildViewAdded中透明。就像你說的那樣,我不能選擇哪個會有這個,但是這對我的特殊應用很有用。非常感謝您花時間幫助我! :D:D –

1

Android將重點放在Web文本字段頂部的原生Textview上。這是你不能停止發生的代碼,它被嵌入到webview中。

您可以通過爲View.GONE設置原生Textview的可見性來解決此問題。如果您需要更多關於如何操作的信息,請告訴我!

編輯:我剛剛檢查了Jellybean的源代碼,並且這種行爲似乎已經改變。 Jellybean上沒有本地覆蓋WebTextView!也許你看到你的背景的平板電腦是一種Jellybean平板電腦。無論如何,我所說的仍然適用於ICS及以下。

+0

不瞭解他,但如果你能提供的話,我很想知道更多關於這方面的信息。你究竟如何專門針對該文本視圖? – caiocpricci2

+0

如果這是一個Web應用程序,有幾種方法可以做到這一點。使用ViewTreeObserver(http://developer.android.com/reference/android/view/ViewTreeObserver.html)來偵聽焦點更改,或者從父視圖中調用getCurrentFocus()。 –

+0

我會盡快嘗試。不幸的是,更緊迫的問題出現了,我沒有時間儘快嘗試。當我嘗試時,我會確保你得到你的賞金。謝謝! –