2013-10-18 4 views
2

나는 WebView와 페이지 상단에 메뉴가있는 앱을 만들고 있습니다. 그 메뉴를 보이지 않게하고 버튼을 클릭했을 때만 나타납니다. 그 괜찮 았는데 그 버튼이 어디서나 멋지게 그래서 내가 대신 화면에 두 번 탭하면 나타납니다 버튼을 클릭했다 그것을 만들 수 없습니다 적합하지 않았다. 그래서 여기에 문제가 있습니다. 두 번 탭하면 빈 공간에서만 작동하지만 WebView에서는 작동하지 않습니다. 내가 어떻게하면 화면을 두 번 누를 때마다 나타나거나 사라지게 될까?안드로이드 - 더블 탭 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); 
      } 
     }); 
    } 
}