PopWindow:基本使用與自定義PopWindow
PopWindow是Android開發中常見的控制元件,至於PopWindow是什麼道長就不在這裡安利了,這裡道長說一下PopWindoiw的常見的使用方式,不過道長還是沒有動圖。
一、基本使用
- 建立一個PopWindow物件
// 建立一個PopupWindow物件
// 設定PopupWindow要顯示的內容
ListView contentView = createListView();
// 設定PopupWindow的寬
int width = et_number.getWidth();
// 設定PopupWindow的高
int height = 500;
// 設定PopupWindow是否可以獲取焦點
boolean focusable = true;
popupWindow = new PopupWindow(contentView, width, height, focusable);
這裡PopWindow要顯示的物件程式碼如下:
private ListView createListView() {
ListView listView = (ListView) View.inflate(this, R.layout.layout_number_list, null);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) {
String number = (String) parent.getItemAtPosition(position);
et_number.setText(number);
popupWindow.dismiss();
}
});
adapter = new NumberListAdapter(HomeActivity.this,list);
listView.setAdapter(adapter);
return listView;
}
ListView的介面卡NumberListAdaper的實現程式碼如下:
public class NumberListAdapter extends BaseAdapter {
private ArrayList<String> mLists;
private Context mContext;
public NumberListAdapter(Context context, ArrayList<String> list) {
this.mContext = context;
this.mLists = list;
}
@Override
public int getCount() {
return mLists.size();
}
@Override
public Object getItem(int position) {
return mLists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item_number, null);
holder = new ViewHolder();
holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number);
holder.ib_del = (ImageView) convertView.findViewById(R.id.ib_del);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String number = mLists.get(position);
holder.tv_number.setText(number);
holder.ib_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mLists.remove(position);
notifyDataSetChanged(); // 通知ListView重新整理介面
}
});
return convertView;
}
static class ViewHolder {
TextView tv_number;
ImageView ib_del;
}
}
- 設定點選PopWindow之外彈窗消失
// 下面的兩行程式碼是用於實現在點PopupWindow之外的地方的時候可以隱藏PopupWindow
// 設定PopupWindow的外部可以點選
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable());
- 設定PopWindow的顯示位置
// 顯示PopupWindow
// 指定PopupWindow顯示在哪個View的下方
View anchor = et_number;
// 指定PopupWindow的x方向的偏移量 xoff > 0向右偏移
int xoff = 15;
// 指定PopupWindow的y方向的偏移量 以et_number的底部為yoff = 0,yoff > 0向下偏移
int yoff = -5;
popupWindow.showAsDropDown(anchor, xoff, yoff);
雖然指定的PopWindow是顯示在那個View的下方,但是可以通過PopWindow的偏移量來改變PopWindow的顯示位置。
二、自定義PopWindow
- 初始化構造方法
public MenuPop(Activity context, OnClickListener onClick) {
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.menu_popup, null);
h = context.getWindowManager().getDefaultDisplay().getHeight();
w = context.getWindowManager().getDefaultDisplay().getWidth();
click = onClick;
initView();
initPopWindow();
}
- 初始介面
private void initView(){
tv_regulation = (TextView) view.findViewById(R.id.tv_regulation);
tv_task = (TextView) view.findViewById(R.id.tv_task);
tv_card = (TextView) view.findViewById(R.id.tv_card);
tv_share = (TextView) view.findViewById(R.id.tv_share);
tv_regulation.setBackgroundColor(Color.parseColor(tv_bgColor));
tv_task.setBackgroundColor(Color.parseColor(tv_bgColor));
tv_card.setBackgroundColor(Color.parseColor(tv_bgColor));
tv_share.setBackgroundColor(Color.parseColor(tv_bgColor));
tv_regulation.setOnClickListener(click);
tv_task.setOnClickListener(click);
tv_card.setOnClickListener(click);
tv_share.setOnClickListener(click);
}
- 初始化PopWindow
private void initPopWindow(){
this.setOutsideTouchable(false);
this.setContentView(view);
// 設定彈出窗體的寬
this.setWidth(w);
// 設定彈出窗體的高
this.setHeight(LayoutParams.WRAP_CONTENT);
// 設定彈出窗體可點選
this.setFocusable(true);
// 設定彈出窗體動畫效果
// this.setAnimationStyle(R.style.AnimTop_gradualChange);
// 例項化一個ColorDrawable顏色為半透明
ColorDrawable dw = new ColorDrawable(0x00FFFFFF);
//設定彈出窗體的背景
this.setBackgroundDrawable(dw);
// mMenuView新增OnTouchListener監聽判斷獲取觸屏位置如果在選擇框外面則銷燬彈出框
// view.setBackgroundDrawable(new ColorDrawable());
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = view.findViewById(R.id.rl_competeMenu).getBottom();
int y = (int) event.getY();
if (event.getAction() == MotionEvent.ACTION_UP) {
if (y > height) {
dismiss();
}
}
return true;
}
});
}
這裡道長又使用了另外一種方法來實現點選彈窗外,銷燬彈窗。當然也可已設定彈窗的動畫。
這兩種方式實現的PopWindow就到這裡,希望這篇部落格可以給你提供一些幫助。
原始碼下載
相關文章
- popWindow 根據內容計算高度
- Android:PopWindow — 對Android的底部彈窗、頂部彈窗選單及自定義介面的使用封裝Android封裝
- PopupWindow使用詳解(二)Popwindow製作常見花哨效果
- 萬能的dialog庫(包括類似popwindow效果)
- Android在初始化時彈出popwindow的方法Android
- 餅圖元件的基本使用和自定義調整元件
- jQuery的三組基本動畫與自定義動畫總結jQuery動畫
- samba 基本配置及自定義控制Samba
- matlab自定義函式建立與使用Matlab函式
- 系統級別的window,應用級別的彈出框Dialog/popwindow (dismiss和cancel和hide)IDE
- Android自定義View-Canvas基本操作AndroidViewCanvas
- 使用Photos自定義相簿
- MySQL使用之五_自定義函式和自定義過程MySql函式
- 使用PHP實現詞法分析與自定義語言PHP詞法分析
- 使用 Dockerfile 自定義 Nginx 映象DockerNginx
- jquery自定義事件的使用jQuery事件
- GitLab使用自定義埠Gitlab
- C#使用自定義特性C#
- 自定義Directive使用ngModel
- 安卓自定義View進階:繪製基本形狀安卓View
- openfire使用自定義使用者表
- Android自定義action與permission!!!Android
- FineUIMvc隨筆(4)自定義回發引數與自定義回發UIMVC
- Android自定義控制元件之基本原理Android控制元件
- docker 筆記(基本概念、快速執行、自定義映象)Docker筆記
- spark:自定義分割槽,自定義排序,spark與jdbc,廣播變數等Spark排序JDBC變數
- 使用 FVWM 自定義 Linux 桌面Linux
- Angular 自定義管道 pipes 的使用Angular
- video.js 自定義使用IDEJS
- 使用「即刻」APP建立自定義提醒APP
- 使用PhotosKit自定義多選相簿
- 何時使用自定義HTTP 方法HTTP
- iOS使用xib自定義UIViewiOSUIView
- 使用者自定義異常
- 使用 voyager 如何自定義,使用者表
- 自定義View:自定義屬性(自定義按鈕實現)View
- 【IOS初學者】UITableView與自定義UITableViewCelliOSUIView
- WKWebView Cookie管理與資源自定義WebViewCookie