Android开发之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" 自己的主题风格,问题解决

时间: 2024-07-30 18:17:24

Android开发之WebView输入框提示解决办法的相关文章

Android开发之WebView输入框提示解决办法_Android

做基于WebView应用时,页面上有一个输入框,当输入的文字过多时,超过输入框的行数时,输入框能够滚动,这时间问题来了,输入的提示箭头会移动到输入框外,如何解决这个问题呢,查找chromium源码如下: void LoadIfNecessary(jobject context) { if (loaded_) return; loaded_ = true; TRACE_EVENT0("browser", "HandleResources::Create"); JNIE

Android开发之WebView组件的使用解析_Android

在 Android 手机中内置了一款高性能 webkit 内核浏览器, SDK 中封装为一个叫做 WebView 组件. WebView 类是 WebKit 模块 Java 层的视图类,( 所有需要使用 Web 浏览功能的Android应用程序都要创建该视图对象显示和处理请求的网络资源.目前,WebKit 模块支持 HTTP.HTTPS.FTP 以及 javascript 请求. WebView 作为应用程序的 UI 接口,为用户提供了一系 列的网页浏览.用户交互接口,客户程序通过这些接口访问

Android开发之WebView的使用进阶

1.当打开WebView所显示网页上的超链接时,会调用系统的浏览器打开,而不是在原先的WebView上显示. 2.当我按下返回键时,并不是返回的上次打开的网页,而是直接退出程序.下面说明如果解决上面的两个问题 在原WebView上显示打开的链接需要自定义一个类,继承自WebViewClient,并设置WebView的WebViewClient即可:  代码如下 复制代码 class MyWebViewClient extends WebViewClient {    public boolean

Android开发之WebView

感觉在显示信息时,用途还可以的. 只是不知和React Native的应用场合有何分别? package com.tw.flag.ch13_hellowebview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebV

Android程序开发之WebView使用总结

前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 使用场景: 1.)添加权限 <uses-permission android:name="android.permission.INTERNET" /> 2.)布局文件 <WebView android:id="@+id/webView" android:layout_width="match_parent" andr

Android开发之APP安装后在桌面上不显示应用图标的解决方法

本文实例讲述了Android开发之APP安装后在桌面上不显示应用图标的解决方法.分享给大家供大家参考,具体如下: 一.问题: 前几天在写项目的时候运行的时候突然Android桌面上没有了应用图标,但是应用里面下载的应用有.调试版本和发布正式的版本都没有,之前以为是因为用了不同的keystore发布了两个不同的正式版本造成的问题.后来在看别人的文章才知道是什么问题. 二.分析: 原因就是activity中的intent-filter用了不同的data和action属性.intent-filter必

Android 开发之旅:view的几种布局方式及实践

引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是"Hello World!" 我们对Android应用程序运行原理及布局文件可谓有了比较深刻的认识和理解,并且用"Hello World!"程序来实践证明了.在继续深入Android开发之旅之前,有必要解决前两篇中没有介绍的遗留问题:View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍.View的布局显示方式有下面几种:线

Android开发之ListView实现Item局部刷新_Android

对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView.在这种模式下,我们会在getView中,根据不同的数据源,让控件显示不同的内容.这种模式是最常见的刷新模式,当我们来回滑动ListView的时候,调用adapter的getView方法,然后listview对adapter返回的View进行绘制.这种模式下,View的显示内容或状态都记录在adapter里面

Android 开发之dataBinding与ListView及事件_Android

2015年Google IO大会分布了DataBinding库,能够更快捷便利的实现MVVM结构模式.但是,通过对DataBinding的学习,其中踩过得坑,今天要在这里记录一下.对于DataBinding一些比较基础的使用,在这里就不在记录了,毕竟现在Google一下,出来很多的教程,而且,android developer官网中,也已经对其基本使用方法做了详细介绍,有英语基础的童鞋,还是去看比较官方的文章.如果英文基础不太好的,https://realm.io/cn/news/data-bi