我有一个ListView,其中每行有两个并排的webview,占据整行。我在ListActivity中设置了onListItemClick(),但是当我点击其中一行时它们不会被触发(除非我碰巧碰到的地方在webview的边界之外 - 但这不太可能是行为,用户会大多数可能想点击webview中的图片。)
我尝试过设置setFocusable(false)和setFocusableInTouchMode(false),但这些都没有帮助。
理想情况下,这可以像Facebook的新闻源一样操作,在那里你可以点击某人墙贴的个人资料图片,就好像你已经点击了整个行(在FB案例中,墙贴的文字)
答案 0 :(得分: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);
}
}
可以覆盖sendClick方法以执行特定情况下所需的操作。使用案例:
WebView image = (WebView) findViewById(R.id.myImage);
image.setOnTouchListener(new WebViewClickListener(image, parent, position));
答案 1 :(得分:7)
我设法使用以下内容:
class NoClickWebView extends WebView {
public NoClickWebView(Context context) {
super(context);
setClickable(false);
setLongClickable(false);
setFocusable(false);
setFocusableInTouchMode(false);
}
}
您可以使用此类,也可以只在标准WebView上设置这些属性。
答案 2 :(得分: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;
}
}
答案 3 :(得分:3)
设置到每个WebView的父布局:
android:descendantFocusability="blocksDescendants"
android:layout_width="match_parent"
android:layout_height="wrap_content"
答案 4 :(得分:2)
我刚试过这篇文章WebView inside the Custom ListView: Click Listener is not Working中的建议,我不知道为什么,但如果你在XML中设置这些功能,它们似乎不起作用。动态执行此操作可以让您单击listview项目=)
答案 5 :(得分:1)
我在ListView中使用了以下布局,它运行得很好,即点击,滚动等等。
TextView1
ImageView1 TextView2 ImageView2
TextView3
然后我用以下方法更改了布局,即我在最左边的角落添加了WebView控件来代替ImageView1
TextView1
WebView TextView2 ImageView2
TextView3
执行此操作后,点击对我不起作用。
我通过将此问题添加到Webview来解决此问题:
webView.setFocusable(false);
webView.setClickable(false);