Я могу ошибаться, но на самом деле это выглядит как небольшая ошибка в коде пакета android.webkit.
Кажется, что WebView
использует класс android.webkit.TextDialog
для представления полей ввода даже в отображаемом HTML.
Однако этот код скрывает рендеринг webkit с помощью текстового виджета Android. Обратите внимание на переменные слои LayerDrawable, вызов setBackgroundDrawable () и два слоя в LayerDrawable, нижний из которых установлен на , всегда будет белым.
Как видите, отрисованный в WebCore текст скрыт за этим белым фоном. Комментарий даже заходит так далеко, что прямо заявляет об этом.
Конечно, переменная TextDialog mTextEntry в WebView.java не будет фокусироваться до тех пор, пока текстовое поле не будет сфокусировано, поэтому до тех пор не будет скрыто, что именно отрисовывает webkit.
/**
* Create a new TextDialog.
* @param context The Context for this TextDialog.
* @param webView The WebView that created this.
*/
/* package */ TextDialog(Context context, WebView webView) {
super(context);
mWebView = webView;
ShapeDrawable background = new ShapeDrawable(new RectShape());
Paint shapePaint = background.getPaint();
shapePaint.setStyle(Paint.Style.STROKE);
ColorDrawable color = new ColorDrawable(Color.WHITE);
Drawable[] array = new Drawable[2];
array[0] = color;
array[1] = background;
LayerDrawable layers = new LayerDrawable(array);
// Hide WebCore's text behind this and allow the WebView
// to draw its own focusring.
setBackgroundDrawable(layers);
// Align the text better with the text behind it, so moving
// off of the textfield will not appear to move the text.
setPadding(3, 2, 0, 0);
mMaxLength = -1;
// Turn on subpixel text, and turn off kerning, so it better matches
// the text in webkit.
TextPaint paint = getPaint();
int flags = paint.getFlags() | Paint.SUBPIXEL_TEXT_FLAG |
Paint.ANTI_ALIAS_FLAG & ~Paint.DEV_KERN_TEXT_FLAG;
paint.setFlags(flags);
// Set the text color to black, regardless of the theme. This ensures
// that other applications that use embedded WebViews will properly
// display the text in textfields.
setTextColor(Color.BLACK);
setImeOptions(EditorInfo.IME_ACTION_NONE);
}
Исходный код в git.