WebView输入框提示

做基于WebView应用时,页面上有一个输入框,当输入的文字过多时,超过输入框的行数时,输入框能够滚动,这时间问题来了,输入的提示箭头会移动到输入框外,如何解决这个问题呢,查找chromium源码如下

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

做基于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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120401.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java switch是什么意思_java switch语句详解[通俗易懂]

    java switch是什么意思_java switch语句详解[通俗易懂]switch语句的格式:switch(整型或字符型变量){case变量可能值1:分支一;break;case变量可能值2:分支二;break;case变量可能值3:分支三;break;…default:最后分支;}在switch的语法里,我们要学到4个关键字:switch、case、break、default。在 switch(变量) 这一行里,变量只能是整型…

    2022年7月7日
    19
  • 测试用例的设计方法:等价类划分法[通俗易懂]

    测试用例的设计方法:等价类划分法[通俗易懂]欢迎大家关注我的个人公众号:小朱谈软件测试,全是干货哦。测试用例的设计方法对测试人员来说,非常重要,在工作中,确实会用到。测试用例设计的越全面,线上问题肯定越少,合理地运用这些设计方法,可以减少冗余用例,提高测试效率和覆盖率。常见测试用例的设计方法有八种,下图中标红的是需要掌握的。优先级从等价类划分法,边界值分析法方向排序。每种设计方法,我都会分析,今天我们先一起看看什么是等价类划分法。等价类划分法:官方定义:将程序所有可能的输入数据…

    2022年10月18日
    3
  • MS17010漏洞利用姿势

    MS17010漏洞利用姿势MSF在msf中常规的17-010打法如下扫描是否存在ms17-010漏洞:nmap-n-p445–scriptsmb-vuln-ms17-010192.168.1.0/24–openMSF常规漏洞利用msf>useexploit/windows/smb/ms17_010_eternalbluemsf>setrhost192.168.1.112目标出网时反向打:msf>setpayloadwindows/x64/met..

    2022年4月29日
    500
  • Caffe2安装_caffe教程

    Caffe2安装_caffe教程一、依赖库的安装首先1.首先需要安装Ubuntu16.04与14.04都需要的依赖库。sudoaptupdatesudoaptinstall-y–no-install-recommends\build-essential\cmake\git\libgoogle-glog-dev\lib…

    2025年7月18日
    3
  • Spring StoredProcedure调用ORACLE存储过程或函数

    Spring StoredProcedure调用ORACLE存储过程或函数废话不说,直接上代码:应用实例//引用方式package.function或package.procedureStoredProceduresp=neworg.springframework.jdbc.object.StoredProcedure(ds,”PACKAGE_NAME.PROCEDURE_NAME”);//调用函数时必须,调用存储过程不要sp.setFun

    2022年7月26日
    6
  • HTTP与TCP的区别和联系[通俗易懂]

    HTTP与TCP的区别和联系[通俗易懂]     相信不少初学应用网络程序开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。一、基本概念1、TCP连接     手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。     建立起一个TCP…

    2022年9月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号