2015-08-02 3 views
0

Я хочу получить событие click, когда пользователь onClickListener, щелкнув по экрану. У меня есть макет следующим образом:OnClickListener для компоновки экрана webview

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/layout_content"> 

    <WebView 
     android:id="@+id/webview_item" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

Я пытался сделать это с помощью макета Относительная setOnClickListener:

RelativeLayout layoutContent = (RelativeLayout) findViewById(R.id.layout_content); 
layoutContent.setOnClickListenner(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ...... 
    } 
}); 

я могу получить хорошее событие щелчка, пока WebView не закончил загрузку, я не могу получить больше clicklistener , Так есть ли у кого-нибудь предложения для меня, чтобы я мог получить onClicklistener после загрузки веб-просмотра?

+0

пардон, зачем вам событие OnClick на WebView? Я не могу представить себе случай использования. Кстати, пытались ли вы настроить этот onclick-прослушиватель на сам WebView? –

+0

, потому что мне нужно показать и скрыть меню при нажатии на экран –

ответ

1

Согласно this ответу,

WebView, кажется, не посылать событие щелчка на OnClickListener

Для этого необходимо реализовать onTouchListener события.

public class WebViewClicker extends Activity implements OnTouchListener, Handler.Callback { 

private static final int CLICK_ON_WEBVIEW = 1; 
private static final int CLICK_ON_URL = 2; 

private final Handler handler = new Handler(this); 

private WebView webView; 
private WebViewClient client; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.web_view_clicker); 

    webView = (WebView)findViewById(R.id.web); 
    webView.setOnTouchListener(this); 

    client = new WebViewClient(){ 
     @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      handler.sendEmptyMessage(CLICK_ON_URL); 
      return false; 
     } 
    }; 

    webView.setWebViewClient(client); 
    webView.setVerticalScrollBarEnabled(false); 
    webView.loadUrl("http://www.example.com"); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (v.getId() == R.id.web && event.getAction() == MotionEvent.ACTION_DOWN){ 
     handler.sendEmptyMessageDelayed(CLICK_ON_WEBVIEW, 500); 
    } 
    return false; 
} 

@Override 
public boolean handleMessage(Message msg) { 
    if (msg.what == CLICK_ON_URL){ 
     handler.removeMessages(CLICK_ON_WEBVIEW); 
     return true; 
    } 
    if (msg.what == CLICK_ON_WEBVIEW){ 
     Toast.makeText(this, "WebView clicked", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 
    return false; 
} 
} 
+0

sry, но мне нужно показать и скрыть меню, щелкнув по экрану. если использование touch будет запутано с веб-просмотром действия прокрутки. –

+0

@PhanSinh: см. Http://stackoverflow.com/questions/5116909/how-i-can-get-onclick-event-on-webview-in-android (замените ACTION_DOWN на ACTION_UP). – CoolMind

0
webView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       Intent intent; 
       ActivityModel activityModel = new ActivityModel(); 
       activityModel.setServerId(activityId); 
       if (action.equals("discussion")) { 
        intent = new Intent(BannerPopUp.this, DiscussionActivity.class); 
        intent.putExtra("activityModel", activityModel); 
       } else { 
        intent = new Intent(BannerPopUp.this, DisplayActivity.class); 
        intent.putExtra(Constants.MODEL_ACTIVITY, activityModel); 
        if (action.equals("join")) { 
         intent.putExtra(Constants.ACTION, "join"); 
        } 
       } 
       if (!isAppRunning) { 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       } 
       startActivity(intent); 
       finish(); 
       return false;` 
      } 
     }); 
Смежные вопросы