【问题标题】:RelativeLayout onClick fails to get triggered when EditText is embedded inside嵌入 EditText 时,RelativeLayout onClick 无法触发
【发布时间】:2013-07-17 07:54:48
【问题描述】:

预期结果

RelativeLayout 中使用EditText 实现了一个搜索栏。由于某种原因,要搜索的查询不会直接输入到EditText,而是在单击搜索栏时触发 WebView 并加载搜索页面,用户可以在其中输入搜索查询。

问题

android:onClick="selectCellSearch"设置为RelativeLayout,点击EditTextonClick给出的selectCellSearch回调函数好像没有被触发。

源代码

layout.xml

<!-- Start of Search Bar Cell -->
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="87dp"
    android:background="#212121"
    android:clickable="true"
    android:onClick="selectCellSearch"
    android:tag="search" >

    <EditText
        android:id="@+id/edit_text_search_id"
        android:layout_width="fill_parent"
        android:layout_height="85dp"
        android:layout_marginBottom="1dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="1dp"
        android:hint="@string/edit_text_search_id"
        android:textSize="28sp"
        android:textStyle="normal"
        android:enabled="false"
        android:inputType="none" />

</RelativeLayout>
<!-- End of Search Bar Cell -->

注意事项

android:tag="search" 用于在单击搜索栏后生成要加载的搜索页面的 URL,例如 http://mywebsite.com/search

更新

selectCellSearch() 现已发布在此处。

MainActivity.java

public void selectCellSearch(View view) {
    final String tag = (String) view.getTag();
    if (tag != null) {
        buttonForWebViewSlideInAnimation.performClick();
        mWebView.loadUrl(WEB_BASE_URI + tag);
    }
}

【问题讨论】:

  • 你能发布你的 selectCellSearch() 代码吗?
  • selectCellSearch() 已发帖

标签: android user-interface event-handling


【解决方案1】:

首先,不建议使用xml属性onClick来设置onClickListener。使用 setOnClickListener 方法总是这样做。

其次,EditTest 占据了相对布局的所有大小,并且是“over the relative”。这种情况导致RelativeLayout的onClick从来没有被调用过。

要获得点击,您可以:

  • 您确定绝对需要RelativeLayout 吗?
  • 可以在EditText上设置onClick
  • 覆盖RelativeLayout 上的onInterceptTouchEvent 或dispatchTouchEvent。该方法将接收到触摸事件(所有,关心这个!)

【讨论】:

  • RelativeLayout 是否比EditText 更早收到触摸事件?
  • 没有“早期”。如果你问,方法 onIntercep 和 onDispach 在 editText 之前接收触摸
  • 它通过创建自定义布局来工作,将覆盖的 dispatchTouchEvent() 的返回值设置为 true。
【解决方案2】:

在 EditText 中尝试android:duplicateParentState="true"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    相关资源
    最近更新 更多