2017-10-04 5 views
-2

Hy everyone, J'ai un problème avec les liens hypertexte dans le WebView. Veuillez noter que j'ai parcouru tous les liens qui traitent d'un problème similaire, mais que je n'ai trouvé aucun adressage exactement le même problème.Les fonctions GestureScanner remplacent les liens hypertexte cliquez sur

En fait, j'ai une vue Web personnalisée, qui implémente certaines actions sur certains gestes. Je suppose que cela désactive la touche pour les hyperliens.

Je me demande comment puis-je garder les gestes et permettre aux hyperliens de travailler et d'appeler shouldOverrideUrlLoading

Ceci est l'affichage Web personnalisé Je:

public class newBTWebView extends WebView implements QuickAction.OnDismissListener, PopoverView.PopoverViewDelegate, GestureDetector.OnGestureListener { 
public newBTWebView(Context context) { 
    super(context); 
    this.ctx = context; 
    setup(context); 
    init(context); 

} 

public newBTWebView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    this.ctx = context; 
    setup(context); 
    init(context); 

} 

public void init(Context context) { 
    this.context = context; 

    setInitialScale(100); 
    this.getSettings().setJavaScriptEnabled(true); 

    Configuration conf = getResources().getConfiguration(); 

    int screenLayout = 1; 
    try 
    { 
     Field field = conf.getClass().getDeclaredField("screenLayout"); 
     screenLayout = field.getInt(conf); 
    } 
    catch (Exception e) { 

    } 

    loadingNewChap = false; 

    screenType = screenLayout & 15; 

    gestureScanner = new GestureDetector(this); 
    this.setVerticalScrollBarEnabled(false); 
    this.setHorizontalScrollBarEnabled(false); 


    this.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      int action = event.getAction(); 

      if(event.getAction() == MotionEvent.ACTION_DOWN) 
      { 
       countDown++; 
      } 

      if(event.getAction() == MotionEvent.ACTION_UP && isLongPress) 
      { 
       //do selection 

      } 
      return gestureScanner.onTouchEvent(event); 
     } 
    }); 
} 

J'ai également mis en œuvre les fonctions du geste: onFlingDo, onSingleTapUp, onShowPress, onLongPress, onDown

Voici comment j'appelle la WebView dans l'activité:

testWV = (newBTWebView) findViewById(R.id.mywebview1); 
testWV.setVerticalScrollBarEnabled(false); 
testWV.setHorizontalScrollBarEnabled(false); 

testWV.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { 
      super.shouldOverrideUrlLoading(view, url); 
      return false; 
    } 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
    } 
} 

Une idée de comment je peux garder les gestes et encore capturer les clics des hyperliens?

+0

chers électeurs, avec plaisir, j'indique la raison de ce vote afin que je puisse y remédier. Je vous remercie. – coder

Répondre

0

S'il vous plaît Utilisez ce ci-dessous le code qu'il va résoudre le problème:

testWV .setWebChromeClient(new WebChromeClient()); 
testWV .getSettings().setJavaScriptEnabled(true); 
testWV .getSettings().setPluginsEnabled(true); 
testWV .loadUrl(url); 
testWV .setWebViewClient(new WebViewClient(){ 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url){ 
    view.loadUrl(url); 
    return true; 
} 
}); 
+0

merci de votre réponse, veuillez noter que les liens hypertextes ne sont même pas en cliquant pour appeler cette fonction shouldOverrideUrlLoading – coder

0
this.setOnTouchListener(new View.OnTouchListener() { 

    public boolean onTouch(View v, MotionEvent event) { 
     int action = event.getAction(); 

     if(event.getAction() == MotionEvent.ACTION_DOWN) 
     { 
      countDown++; 
     } 

     if(event.getAction() == MotionEvent.ACTION_UP && isLongPress) 
     { 
      //do selection 

     } 
     gestureScanner.onTouchEvent(event); 
     return false; 
    } 
}); 

en rappel OnTouch, return false pour mettre en œuvre le comportement tactile par défaut.

+0

Je vais essayer ce qui suit et de revenir à vous, merci pour votre contribution – coder