博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebView输入框提示
阅读量:5930 次
发布时间:2019-06-19

本文共 3531 字,大约阅读时间需要 11 分钟。

做基于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++中会调用中的函数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://ukutx.baihongyu.com/

你可能感兴趣的文章
ApacheCN 翻译活动进度公告 2019.2.18
查看>>
SAP成都研究院DevOps那些事
查看>>
分布式系统(原创)
查看>>
mysql-数据查询语句-多表
查看>>
php Session gc机制下在window下与ununtu是不同的。
查看>>
linux入门总结
查看>>
我敢打赌,这份python入门教程看了绝对有用
查看>>
C++与C#相比,哪个更适合开发大型游戏?
查看>>
SQL中的DML、DDL以及DCL是什么?
查看>>
1082. Read Number in Chinese (25)
查看>>
redhat7 安装oracle 11g RAC 问题与处理
查看>>
使用 Capistrano 进行远程部署
查看>>
JavaWeb基础知识点之Servlet
查看>>
xcode编译报错unknown error -1=ffffffffffffffff Command /bin/sh failed with exit code 1
查看>>
漫画:女生/男生告白攻略
查看>>
php 截取字符串
查看>>
js、react、vue阻止事件冒泡
查看>>
Java 面向对象 之 内部类
查看>>
如何在VMware中创建虚拟机
查看>>
Java--Tomcat服务器学习和使用(一)
查看>>