1717package android .webkit ;
1818
1919import android .content .Context ;
20+ import android .graphics .Canvas ;
2021import android .graphics .Color ;
2122import android .graphics .Paint ;
23+ import android .graphics .Paint .Style ;
2224import android .graphics .Rect ;
2325import android .graphics .drawable .ColorDrawable ;
2426import android .os .Bundle ;
4951import android .view .inputmethod .EditorInfo ;
5052import android .view .inputmethod .InputConnection ;
5153import android .view .inputmethod .InputMethodManager ;
54+ import android .widget .AbsoluteLayout ;
5255import android .widget .AbsoluteLayout .LayoutParams ;
5356import android .widget .AdapterView ;
5457import android .widget .ArrayAdapter ;
7174
7275 static final String LOGTAG = "webtextview" ;
7376
77+ private Paint mRingPaint ;
78+ private int mRingInset ;
79+
7480 private WebView mWebView ;
7581 private boolean mSingle ;
7682 private int mWidthSpec ;
@@ -201,7 +207,13 @@ public void handleMessage(Message msg) {
201207 }
202208 }
203209 };
210+ float ringWidth = 4f * context .getResources ().getDisplayMetrics ().density ;
204211 mReceiver = new MyResultReceiver (mHandler );
212+ mRingPaint = new Paint ();
213+ mRingPaint .setColor (0x6633b5e5 );
214+ mRingPaint .setStrokeWidth (ringWidth );
215+ mRingPaint .setStyle (Style .FILL );
216+ mRingInset = (int ) ringWidth ;
205217 }
206218
207219 public void setAutoFillable (int queryId ) {
@@ -210,6 +222,40 @@ public void setAutoFillable(int queryId) {
210222 mQueryId = queryId ;
211223 }
212224
225+ @ Override
226+ protected void onDraw (Canvas canvas ) {
227+ super .onDraw (canvas );
228+ if (isFocused ()) {
229+ final int ib = getHeight () - mRingInset ;
230+ canvas .drawRect (0 , 0 , getWidth (), mRingInset , mRingPaint );
231+ canvas .drawRect (0 , ib , getWidth (), getHeight (), mRingPaint );
232+ canvas .drawRect (0 , mRingInset , mRingInset , ib , mRingPaint );
233+ canvas .drawRect (getWidth () - mRingInset , mRingInset , getWidth (), ib , mRingPaint );
234+ }
235+ }
236+
237+ private void growOrShrink (boolean grow ) {
238+ AbsoluteLayout .LayoutParams lp = (AbsoluteLayout .LayoutParams ) getLayoutParams ();
239+ if (grow ) {
240+ Log .i ("webtextview" , "grow" );
241+ lp .x -= mRingInset ;
242+ lp .y -= mRingInset ;
243+ lp .width += 2 * mRingInset ;
244+ lp .height += 2 * mRingInset ;
245+ setPadding (getPaddingLeft () + mRingInset , getPaddingTop () + mRingInset ,
246+ getPaddingRight () + mRingInset , getPaddingBottom () + mRingInset );
247+ } else {
248+ Log .i ("webtextview" , "shrink" );
249+ lp .x += mRingInset ;
250+ lp .y += mRingInset ;
251+ lp .width -= 2 * mRingInset ;
252+ lp .height -= 2 * mRingInset ;
253+ setPadding (getPaddingLeft () - mRingInset , getPaddingTop () - mRingInset ,
254+ getPaddingRight () - mRingInset , getPaddingBottom () - mRingInset );
255+ }
256+ setLayoutParams (lp );
257+ }
258+
213259 @ Override
214260 public boolean dispatchKeyEvent (KeyEvent event ) {
215261 if (event .isSystem ()) {
@@ -511,6 +557,7 @@ protected void onFocusChanged(boolean focused, int direction,
511557 } else if (!mInsideRemove ) {
512558 mWebView .setActive (false );
513559 }
560+ growOrShrink (focused );
514561 mFromFocusChange = false ;
515562 }
516563
0 commit comments