Android开发之WebView输入框提示解决办法
2016-06-01 11:14
686 查看
做基于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" 自己的主题风格,问题解决
您可能感兴趣的文章:
- Android自动提示控件AutoCompleteTextView
- Android中AutoCompleteTextView自动提示
- Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用示例
- Android AutoCompleteTextView自动提示文本框实例代码
- Android AutoCompleteTextView连接数据库自动提示的方法(附demo源码下载)
- android开发 eclipse alt+”/”自动提示失效的解决方法
- Android实现动态显示或隐藏密码输入框的内容
- android输入框与文本框加滚动条scrollview示例
- Android输入法弹出时覆盖输入框问题的解决方法
- Android登陆界面实现清除输入框内容和震动效果
- Android输入框控件ClearEditText实现清除功能
- Android的支付密码输入框实现浅析
- Android编程实现输入框动态自动提示功能
相关文章推荐
- Firefox2中输入框丢失光标bug的解决方法
- 出错提示与对策
- 很可爱的输入框
- WinForm实现自定义右下角提示效果的方法
- js限制输入框可输入字节数代码
- PHP错误提示的关闭方法详解
- CSS 动态链接提示
- JavaScript动态提示输入框输入字数的方法
- js实现input密码框提示信息的方法(附html5实现方法)
- extjs 如何给column 加上提示
- JavaScript建立一个语法高亮输入框实现思路
- JS实现单击输入框弹出选择框效果完整实例
- 关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
- JavaScript实现输入框(密码框)出现提示语
- Js制作点击输入框时默认文字消失的效果
- javascript 输入框提示列表效果
- 制作符合用户体验的漂亮的input输入框
- Android 自制浏览器 二 前进后退返回主页退出