android webview输入框_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 信息,是不是可以重载呢,于是添加自己的

@drawable/ic_launcher

@drawable/aa

@drawable/ic_launcher

替换掉系统的资源,再添加android:theme="@style/MyTheme" 自己的主题风格,问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值