Nel*_*oso 9 android android-webview android-listview
我有一个ListView,其中每行有两个并排的webview,占据整行.我在ListActivity中设置了onListItemClick(),但是当我点击其中一行时它们不会被触发(除非我碰巧碰到的地方在webview的边界之外 - 但这不太可能是行为,用户会大多数可能想点击webview中的图像).
我已经尝试过设置setFocusable(false)和setFocusableInTouchMode(false),但那些没有帮助.
理想情况下,这可以像Facebook的新闻源一样操作,在那里你可以点击某人墙贴的个人资料图片,就好像你已经点击整个行(在FBs案例中,墙贴的文字)
Nel*_*oso 22
想出来,发布我的解决方案以防其他人想要做类似的事情:
我不得不使用OnTouchListener,因为OnClick和OnFocus不起作用.我扩展了一个可重用的类:
private class WebViewClickListener implements View.OnTouchListener {
private int position;
private ViewGroup vg;
private WebView wv;
public WebViewClickListener(WebView wv, ViewGroup vg, int position) {
this.vg = vg;
this.position = position;
this.wv = wv;
}
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_CANCEL:
return true;
case MotionEvent.ACTION_UP:
sendClick();
return true;
}
return false;
}
public void sendClick() {
ListView lv = (ListView) vg;
lv.performItemClick(wv, position, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
可以重写sendClick方法以执行特定情况下所需的操作.使用案例:
WebView image = (WebView) findViewById(R.id.myImage);
image.setOnTouchListener(new WebViewClickListener(image, parent, position));
Run Code Online (Sandbox Code Playgroud)
我设法使用以下内容:
class NoClickWebView extends WebView {
public NoClickWebView(Context context) {
super(context);
setClickable(false);
setLongClickable(false);
setFocusable(false);
setFocusableInTouchMode(false);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用此类,也可以只在标准WebView上设置这些属性.
小智 6
使用与上面的bjdodson相同的方法在Android 4.4中工作,但也覆盖了dispatchTouchEvent
public class NonClickableWebview extends WebView {
public NonClickableWebview(Context context, AttributeSet attrs) {
super(context, attrs);
setClickable(false);
setLongClickable(false);
setFocusable(false);
setFocusableInTouchMode(false);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10226 次 |
| 最近记录: |