Dies kann ziemlich einfach durch Unterklassen EditText
erreicht werden, und Einfügen der Highlight-Effekt in seiner onDraw()
Methode, bevor alles andere gezeichnet wird. EditText
's Layout
Objekt kann uns die Zeilennummer von der aktuellen Cursorposition geben, mit der wir die Grenzen als Rect
bekommen können. Wir zeichnen dann das Highlight-Rechteck und rufen die Super-Methode auf, um den Rest der View
zu zeichnen.
Zum Beispiel:
public class HighlightEditText extends EditText {
private static final int HIGHLIGHTER_YELLOW = 0x88f3f315;
private Rect lineBounds;
private Paint highlightPaint;
private int lineNumber;
private boolean lineHighlightEnabled = true;
public HighlightEditText(Context context) {
this(context, null);
}
public HighlightEditText(Context context, AttributeSet a) {
super(context, a);
lineBounds = new Rect();
highlightPaint = new Paint();
highlightPaint.setColor(HIGHLIGHTER_YELLOW);
}
@Override
protected void onDraw(Canvas canvas) {
if (lineHighlightEnabled) {
lineNumber = getLayout().getLineForOffset(getSelectionStart());
getLineBounds(lineNumber, lineBounds);
canvas.drawRect(lineBounds, highlightPaint);
}
super.onDraw(canvas);
}
public void setLineHighlightEnabled(boolean enabled) {
lineHighlightEnabled = enabled;
invalidate();
}
public boolean isLineHighlightEnabled() {
return lineHighlightEnabled;
}
public void setLineHighlightColor(int color) {
highlightPaint.setColor(color);
if (lineHighlightEnabled) {
invalidate();
}
}
public int getLineHighlightColor() {
return highlightPaint.getColor();
}
}
Sie können in Ihren Layouts wie gewohnt diese benutzerdefinierte Klasse gehören. Zum Beispiel:
<com.mycompany.myapp.HighlightEditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top|left"
android:imeOptions="flagNoExtractUi" />
Bitte beachten Sie, dass, wenn Sie die AppCompat Bibliothek und seine Annehmlichkeiten verwenden, sollten Sie stattdessen extends AppCompatEditText
, die Tönung und so weiter entsprechend behandelt werden, um sicherzustellen.