나는 틀릴 수도 있지만, 실제로 이것은 android.webkit 패키지 코드에서 약간의 버그처럼 보입니다. WebView
은 렌더링 된 HTML에서도 입력 상자를 나타 내기 위해 android.webkit.TextDialog
클래스를 사용합니다.
그러나 코드는 안드로이드의 텍스트 위젯으로 웹킷의 렌더링을 숨기고 있습니다. LayerDrawable 변수 레이어, setBackgroundDrawable()에 대한 호출 및 LayerDrawable의 두 레이어 (하단 배경은 , 항상은 흰색)로 설정됩니다.
여기서 볼 수 있듯이 WebCore 렌더링 텍스트는이 흰색 배경 뒤에 숨겨져 있습니다. 이 논평은 명시 적으로 이것을 진술하기까지한다.
물론 WebView.java의 TextDialog 변수 인 mTextEntry는 텍스트 상자에 포커스가있을 때까지 초점을 맞추지 않으므로 웹킷이 렌더링되는 것을 숨기지 않습니다.
/**
* 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);
}
자식의 source code
.
Android 2.1에서 수정 된 것으로 보입니다. –