关于popupwindow,是一个很简单的控件,也比较好用,今天也主要是搞了这个东西,分享一下;
先上代码:
private voidinitMoviePopupWindow() {
View contentViewMovie = LayoutInflater.from(mContext).inflate(R.layout.float_tab_movie, null);
mMoviePopWindow=newPopupWindow();
mMoviePopWindow.setContentView(contentViewMovie);
mMoviePopWindow.setWidth(222);
mMoviePopWindow.setHeight(134);
mMoviePopWindow.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.home_cinema));
mMoviePopWindow.setOutsideTouchable(true);
mMoviePopWindow.setTouchable(true);
mDvdLayout= (LinearLayout) contentViewMovie.findViewById(R.id.llyt_dvd);
mLocalMovieLayout= (LinearLayout) contentViewMovie.findViewById(R.id.llyt_local_movie);
mImageDvd= (ImageView) contentViewMovie.findViewById(R.id.imv_dvd);
mImageLocalMovie= (ImageView) contentViewMovie.findViewById(R.id.imv_local_movie);
//设置各个控件的点击响应
mDvdLayout.setOnClickListener(newNoDoubleClickListener() {
@Override
public voidonNoDoubleClick(View v) {
mImageDvd.setVisibility(VISIBLE);
mImageLocalMovie.setVisibility(INVISIBLE);
mSelectedItem=TAB_DVD;
openSeletedItem();
HoverTabViewManager.getInstance().updateCommonView();
}
});
mLocalMovieLayout.setOnClickListener(newNoDoubleClickListener() {
@Override
public voidonNoDoubleClick(View v) {
mImageDvd.setVisibility(INVISIBLE);
mImageLocalMovie.setVisibility(VISIBLE);
mSelectedItem=TAB_LOCAL_MOVIE;
openSeletedItem();
}
});
mMoviePopWindow.setOnDismissListener(newPopupWindow.OnDismissListener() {
@Override
public voidonDismiss() {//因为common模式下,左侧栏不退出,所以设计在军营点歌和扩音播放点击之后,未选中tab下,popupwindow消失时当前选中tab恢复高亮
if(mSelectedItem!=TAB_DVD&&mSelectedItem!=TAB_LOCAL_MOVIE){
mOutLayout.setMinimumWidth(236);
showSelectedLeftTab(mSelectedItem);
}
}
});
}
这个代码主要是初始化popupwindow。首先,popupwindow需要传入一个布局,还需要设置宽和高,设置是否可点击,设置点击空白区域是否自动消失。之后就是跟大部分类似的绑定控件,设置内部控件点击事件啦。还可以设置消失的时候需要做的操作,通过添加一个dismisslistener,代码中可以看到重写了popupwindow类的setdismisslistener函数,在函数中实现了dismisslistener接口,这样popupwindow消失的时候就可以通过回调进入到接口内部的逻辑。有人会问,代码中还有setbackgrpund函数,看名字是给popupwindow设置背景的把,我不需要添加背景,是不是就不用添加了呢?答案是no,如果你不加,你就进入坑了,跟我一样的。没加的话你是看不到popupwindow的界面的,我参考了一些资料说是部分设备不设置背景的话,是不显示popupwindow的,我的确是的。听从建议就加上了。但是加了是不是还不显示呢?
是的呀,原因很简单,因为你只是定义并初始化了popupwindow,但是代码中还缺少最后一步,就是显示出来呀!话不多说,先贴上显示代码:
private voidshowMoviePopupWindow() {
//显示PopupWindow
mMoviePopWindow.showAsDropDown(mView,232,-593,Gravity.LEFT);
mMoviePopWindow.update();
}
显示代码很简单,就是一行代码而已,显示popupwindow主要是有两类函数,一种就是代码中显示的,showasdropdown函数,卡看到有四个参数,第一个是要依附的view,popupwindow是要·依附于其他view显示的,是在依附的view内部,如果超过view边界的话,系统会自动挪动,使不越界。所以就要注意了这里是要有一个依附的view的!!!这个问题刚开始我不知道。坑了我好久,代码写完了,才知道有这个问题,索性还好最后被机智的自己化解。第二,三个参数是x,y方向上的位移。第四个是参考点。一行代码就可以搞定popupwindow显示的位置啦!
update函数可以加也可以不加,但是如果popupwindow内部控件有修改到界面显示得话,最好还是加一下,及时更新界面。
好啦,今天的分享就到这里,希望对你有所帮助。