編輯:關於Android編程
做基於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如何寫一個自定義的dialog可以在Title的位置彈出來
先上效果圖: Title的Layout為: 彈出的dialog的Layout為
文卓爺安卓模擬器安裝不上教程
文卓爺(Windroye)產品是在PC上模擬安卓系統,使得安卓應用能運行在Windows平台上。文卓爺模擬器安裝不上怎麼辦?下面是文卓爺安卓模擬器安裝不上解
微信換手機號了怎麼辦 換手機號微信怎麼辦
如今我們大部分人都在玩微信,都用手機綁定了微信號,手機的功能太強大了,如果手機丟了,或者要換手機號碼怎麼辦?沒關系啦,騰訊公司也會想到這個問題,下面我來為大
設計模式 - 命令模式(command pattern) 詳解
命令模式(command pattern) 詳解本文地址: http://blog.csdn.net/caroline_wendy命令模式(command pattern