2013-10-18 71 views
2

我正在使用WebView和頁面頂部的菜單創建應用程序。我讓這個菜單不可見,只會在點擊一個按鈕時出現。這工作正常,但該按鈕無法適應任何地方很好,所以而不是點擊一個按鈕,使得當你雙擊屏幕時,菜單會出現。 所以問題在這裏。雙擊僅適用於空白空間,但不適用於WebView。我如何讓它工作,所以每當我雙擊屏幕時它會出現/消失?Android - 雙擊WebView檢測

public class MainActivity extends Activity implements OnGestureListener{ 

private WebView webView; 
LinearLayout toolbar; 
private GestureDetector gd; 

@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.activity_main); 

    webView =((WebView)findViewById(R.id.webView1)); 
    webView.setWebViewClient(new WebViewClient()); 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    webView.setVerticalScrollBarEnabled(true); 

    webView.loadUrl("URL_HERE"); 

    gd = new GestureDetector(this); 

    gd.setOnDoubleTapListener(new OnDoubleTapListener() 
    { 
     @Override 
     public boolean onDoubleTap(MotionEvent e) 
     { 
      LinearLayout toolbar= (LinearLayout)findViewById(R.id.toolbar); 

      if(toolbar.getVisibility() == View.GONE){ 
       toolbar.setVisibility(View.VISIBLE); 

      } 
      else { 
       toolbar.setVisibility(View.GONE); 

      } 
      return false; 
     } 

     @Override 
     public boolean onDoubleTapEvent(MotionEvent e) 
     { 
      return false; 
     } 

     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e) 
     { 
      return false; 
     } 
    }); 


} 

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    return gd.onTouchEvent(event);//return the double tap events 
} 

@Override 
public boolean onDown(MotionEvent e) 
{ 
    return false; 
} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
{ 
    return false; 
} 

@Override 
public void onLongPress(MotionEvent e) 
{ 
} 

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
{ 
    return false; 
} 

@Override 
public void onShowPress(MotionEvent e) 
{ 
} 

@Override 
public boolean onSingleTapUp(MotionEvent e) 
{ 
    return false; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
} 

任何幫助將不勝感激。

回答

3

你試過添加這個嗎?

webView.setOnTouchListener(new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return gd.onTouchEvent(event); 
    } 
}); 
+0

你先生剛纔救了我的命。有用。謝謝。 – Izak

+0

不要提到:)你能將我的答案標記爲正確答案嗎? –

+0

這確實是一個非常好的解決方案,如果用戶在webview上的輸入字段中單擊並在鍵盤上鍵入,如何捕獲事件? – Karoly

0

稍微簡單的配置:

public class DoubleTapDemonstration extends activity { 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main_layout); 

     // Create a `GestureDetector` that does something special on double-tap. 
     final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onDoubleTap(MotionEvent event) { 
       // TODO: Insert code to run on double-tap here. 

       // Consume the double-tap. 
       return true; 
      } 
     }); 

     // Get a handle for the `WebView`. 
     WebView webView = (WebView) findViewById(R.id.webview); 

     // Set the `WebView` to pass touch events through `gestureDetector`. 
     webView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 
     }); 
    } 
}