Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> WebView輸入框提示,webview輸入框

WebView輸入框提示,webview輸入框

編輯:關於android開發

WebView輸入框提示,webview輸入框


做基於WebView應用時,頁面上有一個輸入框,當輸入的文字過多時,超過輸入框的行數時,輸入框能夠滾動,這時間問題來了,輸入的提示箭頭會移動到輸入框外,如何解決這個問題呢,查找chromium源碼如下:

  void LoadIfNecessary(jobject context) {
    if (loaded_)
      return;


    loaded_ = true;


    TRACE_EVENT0("browser", "HandleResources::Create");
    JNIEnv* env = base::Android::AttachCurrentThread();
    if (!context)
      context = base::android::GetApplicationContext();


    left_bitmap_ = CreateSkBitmapFromJavaBitmap(
        Java_HandleViewResources_getLeftHandleBitmap(env, context));
    right_bitmap_ = CreateSkBitmapFromJavaBitmap(
        Java_HandleViewResources_getRightHandleBitmap(env, context));
    center_bitmap_ = CreateSkBitmapFromJavaBitmap(
        Java_HandleViewResources_getCenterHandleBitmap(env, context));


    left_bitmap_.setImmutable();
    right_bitmap_.setImmutable();
    center_bitmap_.setImmutable();


    drawable_horizontal_padding_ratio_ =
        Java_HandleViewResources_getHandleHorizontalPaddingRatio(env);
  }

這個函數加載這幾個圖片,在java端,

    private static Bitmap getHandleBitmap(Context context, final int[] attrs) {
        // TODO(jdduke): Properly derive and apply theme color.
        TypedArray a = context.getTheme().obtainStyledAttributes(attrs);
        final int resId = a.getResourceId(a.getIndex(0), 0);
        final Resources res = a.getResources();
        a.recycle();


        final Bitmap.Config config = Bitmap.Config.ARGB_8888;
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = false;
        options.inPreferredConfig = config;
        Bitmap bitmap = BitmapFactory.decodeResource(res, resId, options);
        savePic( bitmap);
        if (bitmap != null) return bitmap;


        // If themed resource lookup fails, fall back to using the Context's
        // resources for attribute lookup.
        if (res != context.getResources()) {
            bitmap = BitmapFactory.decodeResource(context.getResources(), resId, options);
            if (bitmap != null) return bitmap;
        }


        Drawable drawable = getHandleDrawable(context, attrs);
        assert drawable != null;


        final int width = drawable.getIntrinsicWidth();
        final int height = drawable.getIntrinsicHeight();
        Bitmap canvasBitmap = Bitmap.createBitmap(width, height, config);
        Canvas canvas = new Canvas(canvasBitmap);
        drawable.setBounds(0, 0, width, height);
        drawable.draw(canvas);
        return canvasBitmap;
    }

C++中會調用java中的函數getHandleBitmap,這個函數通過 context.getTheme().obtainStyledAttributes 這個函數,從jdk中加載圖片資源,顯示時,通過GetBitmap函數獲取到圖像信息,通過layer_->SetBitmap( bitmap)設置顯示的內容,函數如下:



  const SkBitmap& GetBitmap(ui::TouchHandleOrientation orientation) {
    DCHECK(loaded_);
    switch (orientation) {
      case ui::TouchHandleOrientation::LEFT:
        return left_bitmap_;
      case ui::TouchHandleOrientation::RIGHT:
        return right_bitmap_;
      case ui::TouchHandleOrientation::CENTER:
        return center_bitmap_;
      case ui::TouchHandleOrientation::UNDEFINED:
        NOTREACHED() << "Invalid touch handle orientation.";
    };
    return center_bitmap_;
  }

這麼分析下來,想從顯示下手解決這個問題,似乎不太可能,那只有替換圖片資源,而圖像資源是在android.jar包中,還有其他辦法嗎? 分析源碼,

    public static Drawable getLeftHandleDrawable(Context context) {
        return getHandleDrawable(context, LEFT_HANDLE_ATTRS);
    }


    public static Drawable getCenterHandleDrawable(Context context) {
        return getHandleDrawable(context, CENTER_HANDLE_ATTRS);
    }


    public static Drawable getRightHandleDrawable(Context context) {
        return getHandleDrawable(context, RIGHT_HANDLE_ATTRS);
    }

有這幾個圖像id 信息,是不是可以重載呢,於是添加自己的

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <style name="MyTheme">
       <item name="android:textSelectHandleLeft">@drawable/ic_launcher</item>
       <item name="android:textSelectHandle">@drawable/aa</item>
       <item name="android:textSelectHandleRight">@drawable/ic_launcher</item>
     </style>
</resources>

替換掉系統的資源,再添加android:theme="@style/MyTheme" 自己的主題風格,問題解決

推薦:http://www.cnblogs.com/roucheng/p/androidservice.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved