2010-11-27 34 views
10

Tôi đang chiến đấu với quản lý tập trung của WebView: WebView messes với quản lý tập trung của các thành phần cổ điển. Đây là một ứng dụng đơn giản chỉ với một EditBox và một WebView trong đó tải Google!Android WebView tập trung vấn đề

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:and="http://schemas.android.com/apk/res/android" 
       xmlns:webtag="http://schemas.android.com/apk/res/com.webtag" 
       and:orientation="vertical" and:layout_width="fill_parent" and:layout_height="fill_parent"> 
    <LinearLayout and:id="@+id/HorizontalScrollView02" 
        and:layout_width="fill_parent" and:layout_height="wrap_content"> 
     <EditText and:id="@+id/EditText01" 
        and:layout_width="wrap_content" and:layout_height="wrap_content" 
        and:text="@+id/EditText01"/> 
    </LinearLayout> 
    <WebView and:id="@+id/uiContent" 
      and:layout_weight="1" 
      and:layout_width="fill_parent" 
      and:layout_height="fill_parent"/> 
</LinearLayout> 

Và đây là đoạn code Java:

public class WebtagActivity extends Activity 
{ 
    // UI components. 
    private WebView mContent; 
    private EditText mUrl; 


    @Override 
    public void onCreate (Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     mContent = (WebView) findViewById(R.id.uiContent); 
     mContent.getSettings().setJavaScriptEnabled(true); 
     mContent.loadUrl("http://www.google.fr/"); 
    } 
} 

Dựa trên ví dụ rất đơn giản này, nó không thể được tập trung vào các WebView (ví dụ: google thuật ngữ tìm kiếm hộp đầu vào)! Tuy nhiên, khi thêm "mContent.requestFocus();" trong quá trình khởi tạo, mọi thứ trở nên tốt hơn. Nhưng tôi có thể chuyển từ EditText sang WebView nếu tôi chỉ nhấp vào WebView đầu tiên ... Nhưng hành vi sẽ sớm trở nên "thất thường", với WebView đôi khi không tập trung khi chạm vào nó, đôi khi nhận được nó nhưng ở lại với một hình chữ nhật tiêu điểm xung quanh các trường WebView (màu cam hoặc màu xanh lá cây tùy thuộc vào điện thoại của bạn) sau một lần chạm khác để quay lại thành phần EditText (trong đó tôi có thể viết văn bản)!

Dù sao, một giải pháp tôi thấy là thêm một touchListener và yêu cầu tập trung khi nhấp vào một WebView:

mContent.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
        case MotionEvent.ACTION_UP: 
         if (!v.hasFocus()) { 
          v.requestFocus(); 
         } 
         break; 
       } 
       return false; 
      } 
    }); 

Điều này giải quyết hầu hết các vấn đề (chuyển đổi từ các thành phần cổ điển để WebView và viết văn bản) trừ một: WebView giữ tiêu điểm Hình chữ nhật (màu xanh lá cây hoặc màu cam) xung quanh các trường cho dù nó có tiêu điểm hay không. Trong ảnh chụp màn hình dưới đây, EditText của tôi có tiêu điểm và nhận văn bản nhưng WebView vẫn có vẻ như nó có tiêu điểm. Tôi cố gắng clearFocus nhưng điều đó không làm bất cứ điều gì:

See the result

Bất kỳ ý tưởng làm thế nào để giải quyết này? Cảm ơn rất nhiều sự giúp đỡ của bạn!

+0

xem câu trả lời của tôi ở đây: https://stackoverflow.com/questions/3981716/ cant-click-on-listview-which-rows-are-made-of-webviews/48652004 # 48652004 Chỉ cần sử dụng sự kiện onTouch –

Trả lời

2

Chỉ cần thêm android: đặt tiêu điểm = "true" để bố trí WebView của bạn:

<WebView android:id="@+id/uiContent" 
    android:layout_weight="1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:focusable="true"/> 
+6

Cảm ơn, nhưng nó không hoạt động với tôi –

5

này giúp vấn đề của tôi cho tập trung:

Webview.requestFocus(View.FOCUS_DOWN|View.FOCUS_UP);

và điều này cho cảm ứng nhạy cảm:

Webview.getSettings().setLightTouchEnabled(true);

+1

chỉ cần thêm 'webView.requestFocus(); 'làm việc cho tôi. – Paul

+4

Cảm ơn, nhưng nó không làm việc cho tôi –

5

chắc chắn rằng bố trí cha mẹ mà kéo dài "ViewGroup" không có tài sản

android:descendantFocusability = "blocksDescendants" mà ngăn chặn bố trí con khỏi bị tập trung

+0

tôi muốn làm điều ngược lại, tôi không muốn tập trung vào nội dung, vì vậy nó làm việc cho tôi: P cảm ơn –

Các vấn đề liên quan