2009-10-24 2 views
0

Ive는 Android WebView의 HTML 페이지에 입력 태그가 있습니다. 배경이 투명 해지기를 바랍니다. 그것은 (background-color: transparent을 통해) 사용자가 그것을 선택하기 전까지는 (초점을 맞추고 데이터를 입력 할 때까지). 그런 다음 배경은 흰색입니다.선택한 텍스트 상자의 Android WebView 배경을 설정하는 방법

나는 background-colortextboxtextbox:focus에 시도했으며 Ive는 -webkit-appearance: none을 시도했습니다. 이들 중 어느 것도 효과가 없었다.

누구나이 사람을 괴롭 혔습니까?

+0

Android 2.1에서 수정 된 것으로 보입니다. –

답변

0

나는 틀릴 수도 있지만, 실제로 이것은 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

.