2013-06-15 12 views
11

Chrome ve Firefox gibi diğer tarayıcılara benzer şekilde, kullanıcının bir bağlantıyı uzun tıklaması ve sonra bir bağlam menüsü göstermesi gerekir; ancak uzun bir şey tıklarsa ve bir bağlantı değilse, o zaman hiçbir şey yapmazlar.Android Web İzlemesi, Uzun Tıklama Ayarı yalnızca bağlantılarda etkinleştirildi mi?

registerForContextMenu(myWebView); kullanımı, istemediğim herhangi bir nesneyi uzun tıklatmanıza izin verir. Bu nedenle, birinin registerForContextMenu(myWebView); nesnesini filtrelemesi veya fazladan görünen bağlantılar için html'yi ayrıştırması gerektiğini düşünüyorum. Ben de shouldOverrideUrlLoading yöntemi geçersiz kılmasını çalıştı var: Ben bu konuya Enable longClick in WebView baktım

private boolean isLongClicked = false; 

this.webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        if(isLongCLicked){ 
          //do something 
        }else 
       view.loadUrl(url); 

      return true; 
     } 

    }); 

    webView.setOnLongClickListener(new OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
         isLongClicked = true; 
        forumView.performClick(); 
         isLongCLicked = false; 
        return false; 
       } 
      }); 

ama bana yardım etmedi. Bunu uygulamaya çalıştım ama yakın bir güç alıyorum.

import android.content.Context; 
import android.view.ContextMenu; 
import android.view.MenuItem; 
import android.webkit.WebView; 

public class WebViewSub extends WebView { 


    public WebViewSub(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onCreateContextMenu(ContextMenu menu) { 
     super.onCreateContextMenu(menu); 

     HitTestResult result = getHitTestResult(); 

     MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() { 
      public boolean onMenuItemClick(MenuItem item) { 
       // do the menu action 
       return true; 
      } 
     }; 

     if (result.getType() == HitTestResult.IMAGE_TYPE 
       || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { 
      // Menu options for an image. 
      // set the header title to the image url 
      menu.setHeaderTitle(result.getExtra()); 
      menu.add("save image") 
        .setOnMenuItemClickListener(handler); 
      menu.add("View Image") 
        .setOnMenuItemClickListener(handler); 
     } else if (result.getType() == HitTestResult.ANCHOR_TYPE 
       || result.getType() == HitTestResult.SRC_ANCHOR_TYPE) { 
      // Menu options for a hyperlink. 
      // set the header title to the link url 
      menu.setHeaderTitle(result.getExtra()); 
      menu.add("Save Link") 
        .setOnMenuItemClickListener(handler); 
      menu.add("Share Link") 
        .setOnMenuItemClickListener(handler); 
     } 
    } 
} 

Son olarak ben Bu muhtemelen problemi çözmeye var en yakın olan , bir HitTestResult kullanarak çalıştı.

myWebView.setOnLongClickListener(new OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       registerForContextMenu(myWebView); 
       WebView.HitTestResult result = forumView.getHitTestResult(); 
       if(result.getType() == 7){ 


        openContextMenu(myWebView); 

       } 
       unregisterForContextMenu(myWebView); 
       return false; 
      } 
     }); 

Bu boş bir dikdörtgen gibi ancak benim bağlam menüsü görüntüler, sadece linklere çalışır. Gerçek OnLongClick Görünümü'nü kullanmayı denedim, ancak işe yaramıyor. İçerik Menümün yanlış olduğunu düşünmüyorum; OnLongClick dışında çalıştı.

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     getMenuInflater().inflate(R.menu.click, menu); 
    } 

Menünün doğru görünmesini nasıl sağlayabilirim? HitTestResult onLongClick'i kullanarak doğru yolda olduğumu düşünüyorum.

Düzenleme (YANIT): Uzun üzerine

myWebView.setOnLongClickListener(new OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       unregisterForContextMenu(myWebView); 
       WebView.HitTestResult result = forumView.getHitTestResult(); 
       if(result.getType() == 7){ 
       registerForContextMenu(myWebView); 


       } 

       return false; 
      } 
     }); 

Her zaman bu daha sonra bağlam menüsünü kaydığını menüsünü kadar haşhaş, bunu kaydeder tıklayın. Bunun işe yaradığına inanıyorum çünkü bir bağlantı tıklandığında kayıtlı içerik menüsünün kaydını kaldırır ve daha sonra içerik menüsünü açmak için bir bağlantı olup olmadığına karar verir. Önceden, kullanıcının bir seçenek seçmesi için zaman vermemesi ve içerik menüsünü kaydettirdikten hemen sonra kaydetmemesi gerekiyordu.

+1

Forum görünümü nedir? – WideFide

+1

forumview == webView :) –

cevap

0

Bunun nedeni üzerinde çalıştığım edilmiş bir uygulamaya aslında doğrusu son zamanlarda karşısında geliyordu bir durumdur - sen geldi çözüm aslında ben hayata aynı, yani burada tamamlamaları uğruna geçerli:

webView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      unregisterForContextMenu(webView); 
      WebView.HitTestResult result = webView.getHitTestResult(); 
      if (result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) { 
       registerForContextMenu(webView); 
      } else { 
       return true; 
      } 

      return false; 
     } 

result.getExtra() kullanarak, WebView'den filtrelenmiş sonuçları bu durumda a HTML::a tag with src=http'dan alacağınızı unutmayın. WebView'de gerçek (döndürülen) döndürülerek başka uzun tıklamaları da yok saydığımı unutmayın.

İlgili konular