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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • windows server 2008 web服务器搭建

    windows server 2008 web服务器搭建在众多小企业中,Web服务器的应用也需是最广泛的,企业网站的建立促进了服务器进驻中小企业,而Web服务器的建立也越来越多。而面对诸多的Web服务器应用系统,可以说是多种多样,有大家最熟悉的微软的IIS,也有开源的Apache,还有大型网站应用比较多的Unix,总之可以说是各有各的优点。  今天介绍的是,微软的IIS,因其图形界面的操作方式,给人以直观的操作感受,部署简便,是很多用户的首选,而Apache的部署要相对复杂,一般新手很难马上上手,所以这里先跟大家讲解一下IIS7.0的搭建Web服务器的方法。

  • linux查看80端口占用情况_centos如何查看端口是否被占用

    linux查看80端口占用情况_centos如何查看端口是否被占用前言平常使用linux,我们经常需要查看哪个服务占用了哪个端口,接下来就为大家介绍了2种Linux查看端口占用情况可以使用lsof和netstat命令。1.lsof-i:端口号用

  • 深度搜索算法查找最短路径的方法_深度优先搜索算法

    深度搜索算法查找最短路径的方法_深度优先搜索算法如图,百度地图上有5个地点,各个地点间是单向的路径,试求出从1到5的最短路径。从图中可以得到一个5*5的二维矩阵,利用深度搜索算法,求出最短路径。从最后的运行结果,可以直观的看出搜索的过程代码实现如下:#include"pch.h"#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;vector&g…

  • Navicat_Premium激活码【2021最新】

    (Navicat_Premium激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1S…

  • 如何快速记忆小鹤双拼键位图?

    如何快速记忆小鹤双拼键位图?记忆方法:韵母表+图形单韵母aoeiu、üAOEIV双拼练习网址:https://api.ihint.me/shuang/

  • MySQL EXPLAIN type类型说明[通俗易懂]

    MySQL EXPLAIN type类型说明[通俗易懂]EXPLAIN执行计划中type字段分为以下几种:ALL    INDEX    RANGE    REF    EQ_REF    CONST,SYSTEM    NULL自上而下,性能从最差到最好 type=ALL,全表扫描,MYSQL扫描全表来找到匹配的行(因为film表中rating不是索引)mysql&gt;explainexten…

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

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