Wie zu Verwenden Blick.isInEditMode() in benutzerdefinierten Ansichten zu überspringen-code?
Ich bin mit einem benutzerdefinierten Ansicht zu zeigen Farbverlauf gefüllt TextView als Gebrüll:
public class GradientTextView extends TextView {
public GradientTextView(Context context) {
super(context, null, -1);
}
public GradientTextView(Context context,
AttributeSet attrs) {
super(context, attrs, -1);
}
public GradientTextView(Context context,
AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
if (!isInEditMode()) {
GradientTextView.getTextColor(context, null, defStyle);
}
}
@Override
protected void onLayout(boolean changed,
int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (changed) {
getPaint().setShader(new LinearGradient(
0, 0, 0, getHeight(),
Color.parseColor(Color.WHITE), Color.parseColor(Color.BLACK),
Shader.TileMode.CLAMP));
}
}
}
Funktioniert es fein auf dem Gerät oder emulator, aber ich bekomme Rendering-Problem im xml-Vorschau von Android studio, die nahelegt, mit Blick.isInEditMode() in Ihrer benutzerdefinierten Ansichten zu überspringen, code oder Karte von sample-Daten angezeigt, wenn in der IDE ein und zeigt diese Fehler-stack:
java.lang.NullPointerException
Kann jemand bitte helfen Sie mir über diese?
InformationsquelleAutor Ossen | 2014-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick.isInEditMode:
Hier ist, was Ihre benutzerdefinierte Ansicht-Layout-Datei Aussehen könnte:
Und Ihre entsprechende view-Klasse:
Hinweis: ich habe aus deinen anderen Konstruktoren aber sehen, wie im Konstruktor zur Verfügung gestellt, die ich einpacken Sachen in einem
isInEditMode()
überprüfen.Bitte beachten Sie, dass ich ausgelassen Ihren ersten zwei Konstruktoren, wie Sie aufgetaucht sind überflüssig. Wenn Sie müssen Sie haben, Ketten Sie wie ich schon editiert oben.
Sie müssen auch, um einen sinnvollen Standard
defStyle
als-1
scheint aus meinen Tests, die Wurzel IhrerNullPointerException
InformationsquelleAutor cognant