2013-05-16 3 views

Antwort

8

EDIT

Ok, vergessen, so alles, was ich vorher beantwortet hatte. Ich habe einige Tests durchgeführt und dies scheint nur bei Android 4.0.3 ein Problem zu sein. Und es gibt schlechte Nachrichten.

Ich fing an, in die Quelle zu graben und ich glaube, dass das Problem auf der WebTextView Klasse liegt. Die Klasse, die Textviews und Textareas behandelt.

Wenn Sie in den Zeilen 233-240 sehen, zeichnet die Methode, die den Hintergrund zeichnet, immer ein blaues Rechteck und ein weißes Rechteck. Welches ist genau das, was dein Screenshot zeigt?

Eine gute Lösung wäre, diese Klasse zu erweitern und zu beheben. Leider there is no WebTextView class in the sdk. Das heißt, Sie können es nicht überschreiben.

Ich versuchte alle Arten von Javascript, um die Textarea Farbe, even overlapping the element zu ändern, aber es hilft nicht. Es ist nicht etwas, was wir aus dem HTML-Code erreichen können.

So können Sie es nicht auf Java reparieren und Sie können es nicht auf Javascript beheben. Ich fürchte, es gibt keine Lösung für dieses Problem.

EDIT

ich korrigiert stehen. Dank @grandstaish für den Fokusvorschlag können wir leicht die Hintergrundfarbe ändern, nachdem die TextView erstellt wurde. Ich habe versucht, für eine elegante Lösung zu verwenden, aber ich konnte nicht nur die Ansichten, die ich wollte. Jeder TextView hätte einen transparenten Hintergrund und das wollte ich nicht. So ein Hybrid-Ansatz gelöst es:

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

} 

So können wir steuern, welche Elemente auf der Seite der triggert Hintergrund ändern. Ich konnte keine unerwünschten Nebenwirkungen feststellen, aber ich hatte keine Zeit, es in allen Versionen zu testen, also habe ich beschlossen, es auf Version 4.0.3 zu beschränken, die einzige Version, die ich mit diesem Problem herausfinden konnte.

+0

Ich habe diese Arbeit auf einigen Versionen von Android gesehen (ich weiß nicht, welche Version, das Tablet wurde zerschlagen). Auf meinem aktuellen Tablet mit 4.0.x funktioniert es nicht ... Welche Version von Android laufen Sie? –

+0

Das ist ein Problem auf 4.0.3 nur scheinbar. Und soweit ich sagen kann, gibt es keine Lösung. – caiocpricci2

+0

Ich habe endlich Zeit, darauf zurück zu gehen. Ich habe gerade den OnHierarchyChangeListener von weebview übersteuert und jede Sicht in onChildViewAdded auf transparent gesetzt. Wie du gesagt hast, kann ich nicht wählen, welche das haben wird, aber das funktioniert für meine spezielle Anwendung. Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen! : D: D –

1

Android platziert eine native Textansicht über das Webtextfeld, wenn es fokussiert ist. Dies ist Code, den Sie nicht stoppen können, es ist in der Webansicht integriert.

Sie können das Problem umgehen, indem Sie die systemeigene Textansicht auf View.GONE setzen. Wenn Sie weitere Informationen dazu benötigen, lassen Sie es mich wissen!

Edit: Ich habe gerade den Quellcode für Jellybean überprüft, und dieses Verhalten scheint sich geändert zu haben. Es gibt kein natives Overlay WebTextView auf Jellybean! Vielleicht war das Tablet, auf dem du deinen Hintergrund gesehen hast, ein Jellybean-Tablet. Wie auch immer, was ich sagte, gilt immer noch für ICS und darunter.

+0

Ich weiß nicht über ihn, aber ich würde gerne mehr Informationen darüber benötigen, wenn Sie zur Verfügung stellen können. Wie genau können Sie gezielt auf diese Textansicht zugreifen? – caiocpricci2

+0

Wenn dies für eine Web-App ist, gibt es ein paar Möglichkeiten, wie Sie es tun könnten. Verwenden Sie entweder einen ViewTreeObserver (http://developer.android.com/reference/android/view/ViewTreeObserver.html), um auf Fokusänderungen zu warten, oder rufen Sie getCurrentFocus() einfach über die übergeordnete Ansicht auf. –

+0

Ich werde das versuchen, sobald ich kann. Leider sind dringendere Probleme aufgetaucht und ich werde keine Zeit haben, es bald zu versuchen. Ich werde sicherstellen, dass du dein Kopfgeld bekommst, wenn ich es versuche. Vielen Dank! –

Verwandte Themen