我在应用中制作了一个自定义弹出窗口,弹出窗口的布局如下:
<?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.
弹出窗口的完整代码在这里:
并且Extended类在这里:
注意:这是“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消耗然后第二次工作。
答案 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);