EDIT
Ok, vậy quên đi mọi thứ tôi đã trả lời trước đó. Tôi đã chạy một số xét nghiệm và điều này có vẻ là một vấn đề trên Android 4.0.3 chỉ. Và có một số tin xấu.
Tôi bắt đầu đào sâu vào nguồn và tôi tin rằng sự cố nằm trên lớp WebTextView. Lớp học xử lý textviews và textareas.
Nếu bạn thấy trên các dòng 233-240, phương pháp vẽ nền luôn vẽ hình chữ nhật màu xanh và hình chữ nhật màu trắng bên trong. Đó là chính xác những gì ảnh chụp màn hình của bạn hiển thị.
Một giải pháp tốt sẽ là mở rộng lớp này và sửa nó. Thật không may là there is no WebTextView class in the sdk. Có nghĩa là bạn không thể ghi đè lên nó.
Tôi đã thử tất cả các loại javascript để thay đổi màu văn bản, even overlapping the element nhưng không hiệu quả. Nó không phải là một cái gì đó chúng ta có thể đạt được từ bên trong mã html.
Vì vậy, bạn không thể sửa lỗi trên java và bạn không thể sửa lỗi trên javascript. Tôi e rằng không có giải pháp cho vấn đề này.
EDIT
Tôi đứng sửa chữa. Nhờ @grandstaish cho đề xuất lấy nét, chúng ta có thể dễ dàng thay đổi màu nền sau khi tạo TextView
. Tôi đã cố gắng sử dụng ViewTreeObserver
cho một giải pháp thanh lịch nhưng tôi không thể chỉ nhắm mục tiêu các lượt xem mà tôi muốn. Mỗi TextView sẽ có một nền trong suốt và tôi không muốn điều đó. Vì vậy, một cách tiếp cận lai giải quyết nó:
HTML:
<div style="background:red; position:relative; width:100%; height:500px; z-index:0;" id='behind' >
<textarea name="Name"style="background:green; border:none; height:100px; width:250px; position:absolute; top:0; left:0; z-index:1;"
id='area1' onFocus='runOnFocus()' ></textarea>
</div>
JS:
function runOnFocus(){
if (window.device.platform == "Android" && window.device.version =="4.0.3")
//I had to set a timeout here or this would trigger before the TextView was created. 1ms seems to be enough though.
window.setTimeout(function(){
window.AndroidLayer.setBackground();},1);
}
Java:
private String TAG = "TextArea";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/index.html");
appView.addJavascriptInterface(this, "AndroidLayer");
}
public void setBackground(){
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("native","gotFocus");
View tv = (View) appView.getFocusedChild();
if (tv == null)
Log.d("native","isNull");
else
tv.setBackgroundColor(Color.TRANSPARENT);
}
});
}
Vì vậy, chúng ta có thể kiểm soát các yếu tố trên trang sẽ kích hoạt thay đổi nền. Tôi không thể tìm thấy bất kỳ tác dụng phụ không mong muốn này nhưng tôi không có thời gian để kiểm tra nó trong tất cả các phiên bản, vì vậy tôi đã chọn giới hạn nó thành 4.0.3, phiên bản duy nhất tôi có thể tìm ra vấn đề đó.
Tôi đã thấy công việc này trên một số phiên bản Android (Tôi không biết phiên bản nào, máy tính bảng đó đã bị đập vỡ). Trên máy tính bảng hiện tại của tôi chạy 4.0.x, nó không hoạt động ... Bạn đang chạy phiên bản Android nào? –
Đó là một vấn đề trên 4.0.3 chỉ rõ ràng. Và theo như tôi có thể nói không có giải pháp. – caiocpricci2
Cuối cùng tôi đã có thời gian để quay trở lại điều này. Tôi thực sự chỉ overrode OnHierarchyChangeListener của weebview và thiết lập mọi view thành minh bạch trong onChildViewAdded. Như bạn đã nói, tôi không thể chọn cái nào sẽ có cái này, nhưng cái này làm việc cho ứng dụng cụ thể của tôi. Cảm ơn rất nhiều vì đã dành thời gian để giúp tôi! : D: D –