在Android中弹出窗口中没有触发OnClick事件

时间:2012-12-27 05:10:09

标签: android android-layout android-event

enter image description here我在应用中制作了一个自定义弹出窗口,弹出窗口的布局如下:

<?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">

    <ScrollView 
        android:id="@+id/scroller"
        android:layout_margin="4dp"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/popup3"
        android:fadingEdgeLength="0dip"
        android:scrollbars="none">

        <LinearLayout
            android:id="@+id/tracks"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:padding="8dip"/>

    </ScrollView >


    <Button
        android:id="@+id/popup_closer"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_below="@id/scroller"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="0dip"
        android:layout_marginLeft="0dip"
        android:background="@drawable/close_popup"
        android:text=" X " />   
</RelativeLayout>

在“track”(LinearLayout)中我添加了一个webview,现在在我的代码中我在这个布局中的按钮上添加了OnClick事件监听器,但它永远不会工作,我添加了一个Log.i(“clicked”,“。 ...“);检查onclick是否触发但是它不是

其他信息:

弹出窗口包含以下内容:

mWindow.setTouchable(true);
mWindow.setFocusable(true);
mWindow.setOutsideTouchable(true);
mWindow.setContentView(mRootView); // mRootView is the inflated layout above.

弹出窗口的完整代码在这里:

http://pastebin.com/6UQRRJq4

并且Extended类在这里:

http://pastebin.com/BFb3e6MG

注意:这是“QuickAction对话框”的修改版本

以下是我的弹出窗口的样子(如果有另一种方法可以使用相同的布局)并且能够点击那个小圆形按钮它会很棒)

更新 我在我的代码中发现了问题:

View rootView = mInflater.inflate(R.layout.popup_fullscreen,null);
final Button b = (Button) rootView.findViewById(R.id.popup_closer

我应该使用膨胀视图的相同实例,而不是膨胀新视图;

,正确的代码是:

// Changed the View rootView .....etc  to mRootView;
final Button b = (Button) mRootView.findViewById(R.id.popup_closer

现在我还有另一个问题:我必须触摸按钮2次以使其工作似乎第一次触摸事件被弹出窗口或WebView消耗然后第二次工作。

4 个答案:

答案 0 :(得分:0)

删除mWindow.setOutsideTouchable(true),剩下的就是:

mWindow.setTouchable(true);
mWindow.setFocusable(true);
mWindow.setContentView(mRootView); // mRootView is the inflated layout above.

这应该允许您的PopupWindow接收触摸事件,以便转发到该按钮。此外,确保在窗口显示后您没有执行任何此操作。这一切都必须事先调用。

HTH

答案 1 :(得分:0)

首先在主布局上膨胀弹出布局。 创建一个popupwindow对象然后iniside你的onclicklistener使用showasdropdown函数来显示你的popupwindow。

以下给出的样本

查看popuplayout = LayoutInflater.from(getApplicationContext())。inflate(R.layout.popup_layout,null,false);                     PopUpWindow pw = new PopupWindow(popuplayout,260,90,true);                     pw.showAsDropDown(buttonid,x坐标,y坐标);

这会显示你的弹出窗口

答案 2 :(得分:0)

您是否确认在运行期间打算使用正确的布局并点击右键?

正如我已经看到你的代码,你将根据方向膨胀两个xml文件。

代码:

  if (mOrientation == HORIZONTAL) {
        setRootViewId(R.layout.popup_horizontal);
        mAnimStyle  = ANIM_AUTO;
        mChildPos   = 0;
    }
    else if(mOrientation == FULLSCREEN){
            setRootViewId(R.layout.popup_fullscreen);
            mAnimStyle      = ANIM_REFLECT;
        mChildPos   = 0;
    }
    else {
        setRootViewId(R.layout.popup_notifications);
        mAnimStyle  = ANIM_AUTO;
        mChildPos   = 0;
    }

现在,请检查这是您点击右键还是点击另一个布局的关闭按钮。

确保管理布局并使其膨胀。

希望你明白我的意思。

随意发表评论。

答案 3 :(得分:0)

只是猜测,而不是

View rootView = mInflater.inflate(R.layout.popup_fullscreen,null);
final Button b = (Button) rootView.findViewById(R.id.popup_closer);

DO

final Button b = (Button) mRootView.findViewById(R.id.popup_closer);