Ich habe eine benutzerdefinierte EditText
erstellt und die onDraw()
-Funktion überschrieben. Alles hat gut funktioniert (ich konnte etwas in den EditText zeichnen), bis ich die Eingabemethode für dieses EditText
ändern wollte und diese Funktion aufgerufen habe:
Egal, wann und wo ich es nenne: nachdem es aufgerufen wurde, verschwindet meine benutzerdefinierte EditText
, und nur die ursprüngliche EditText
wird angezeigt, obwohl meine überschriebene onDraw()
-Funktion und darin entweder die Super-Funktion ist Funktion wird aufgerufen (egal wo genau ich sie aufruft).
Ich habe auch versucht, mit transparenten Farben zu spielen, wie in einigen Posts hier vorgeschlagen:
setBackgroundColor(Color.TRANSPARENT)
für die Basisklasse und auch
paint.setColor(0x80FF0000)
für mein Objekt Paint
in der Funktion onDraw()
aber sie hatten keine Wirkung.
BEARBEITEN:
Ich habe festgestellt, dass das Problem nicht darin liegt, den Eingabetyp zu setzen, sondern gleichzeitig den Eingabetyp AND gravity von EditText
zu setzen:
Wenn einer von ihnen nicht festgelegt ist, wird meine benutzerdefinierte Ansicht wie erwartet gezeichnet. Auch (und was noch seltsamer ist): mit Gravity.CENTER_VERTICAL
gibt es kein Problem, nur mit Gravity.CENTER_HORIZONTAL
und Gravity.CENTER
.
Diese beiden Einstellungen scheinen sich gegenseitig auszuschließen. Könnte das möglich sein?
Überprüfen Sie Ihre getScrollX()
-Werte. Ich wette, Sie werden Werte wie 1000000 Pixel sehen. EditText übersetzt seine Leinwand auf diese seltsame Art und Weise, obwohl Sie tatsächlich darauf zeichnen, ist es weit weg vom sichtbaren Clip.
Um es zu lösen, fügen Sie einfach den scrollX-Wert zu Ihren Zeichenkoordinaten hinzu.
Dank @simekadams Antwort konnte ich es endlich beheben. So habe ich es behoben, falls du es nicht verstanden hast
%Vor%Tags und Links android android-edittext android-custom-view android-inputtype