Как установить Android WebView фон выделенного текстового поля - PullRequest
0 голосов
/ 24 октября 2009

Я получил тег ввода на странице HTML в Android WebView. Я хочу, чтобы фон был прозрачным. Это (через background-color: transparent), пока пользователь не выберет его (дает ему фокус для ввода данных). Тогда фон белый.

Я пробовал background-color на textbox и textbox:focus, а я пробовал -webkit-appearance: none. Ничто из этого не сработало.

Кто-нибудь с этим связывался?

1 Ответ

0 голосов
/ 24 октября 2009

Я могу ошибаться, но на самом деле это выглядит как небольшая ошибка в коде пакета 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...