仿IOS弹出框及提示框(含Demo)

举报
再见孙悟空_ 发表于 2022/01/14 00:42:29 2022/01/14
【摘要】 做项目经常需要用到各种各样的提示框,今天先把通用的提示框和仿IOS的弹出框写到demo里面后面会持续更新其他的。   1.提示框效果 2.仿IOS弹出框效果 Activity代码 package com.example.iosdialog; import com.example.iosdialog....

做项目经常需要用到各种各样的提示框,今天先把通用的提示框和仿IOS的弹出框写到demo里面后面会持续更新其他的。

 

1.提示框效果

2.仿IOS弹出框效果

Activity代码


  
  1. package com.example.iosdialog;
  2. import com.example.iosdialog.IosDialog.MyPopClickListener;
  3. import com.example.iosdialog.R;
  4. import com.example.iosdialog.TipsDialog.OnMySimpleDialogListener;
  5. import android.support.v7.app.ActionBarActivity;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Toast;
  10. public class MainActivity extends ActionBarActivity {
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. findViewById(R.id.tips_dialog_btn).setOnClickListener(new OnClickListener() {
  16. @Override
  17. public void onClick(View v) {
  18. showTipsDialog();
  19. }
  20. });
  21. findViewById(R.id.ios_dialog_btn).setOnClickListener(new OnClickListener() {
  22. @Override
  23. public void onClick(View v) {
  24. showIosDialog();
  25. }
  26. });
  27. }
  28. private void showTipsDialog() {
  29. new TipsDialog(MainActivity.this, "温馨提示", "缺少系统数据库,是否下载?", "稍后下载", "下载", false).SetOnMySimpleDialogListener(new OnMySimpleDialogListener() {
  30. @Override
  31. public void onMySure() {
  32. }
  33. @Override
  34. public void onMyCancle() {
  35. }
  36. });
  37. }
  38. private void showIosDialog() {
  39. new IosDialog(MainActivity.this, "取消",
  40. new String[] { "孙悟空", "猪八戒", "沙僧" }, true)
  41. .setOnMyPopClickListener(new MyPopClickListener() {
  42. @Override
  43. public void myListItemClick(int itemPosition,String itemContent) {
  44. if (itemPosition == 0) {
  45. Toast.makeText(MainActivity.this, "点击了孙悟空", Toast.LENGTH_SHORT).show();
  46. } else if (itemPosition == 1) {
  47. Toast.makeText(MainActivity.this, "点击了猪八戒", Toast.LENGTH_SHORT).show();
  48. } else if (itemPosition == 2) {
  49. Toast.makeText(MainActivity.this, "点击了沙僧", Toast.LENGTH_SHORT).show();
  50. }
  51. }
  52. @Override
  53. public void myCancleClick(String cancleContent) {
  54. }
  55. });
  56. }
  57. }

IOS弹框


  
  1. package com.example.iosdialog;
  2. import com.example.iosdialog.R;
  3. import android.annotation.SuppressLint;
  4. import android.app.Activity;
  5. import android.content.Context;
  6. import android.graphics.drawable.BitmapDrawable;
  7. import android.view.Gravity;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.ViewGroup;
  12. import android.view.WindowManager;
  13. import android.widget.BaseAdapter;
  14. import android.widget.ListView;
  15. import android.widget.PopupWindow;
  16. import android.widget.PopupWindow.OnDismissListener;
  17. import android.widget.TextView;
  18. public class IosDialog {
  19. private Context mContext;
  20. private String mCancleContent;
  21. private String[] mItems;
  22. private Boolean mCancleAbleOutSide = true;
  23. private PopupWindow mPopupWindow;
  24. private View mShowAtView = null ;
  25. /**
  26. *
  27. * @param mContext 上下文
  28. * @param mCancleContent 取消按钮文字
  29. * @param mItems 文字菜单数组
  30. * @param mCancleAbleOutSide 是否让点击外部取消
  31. */
  32. public IosDialog(Context mContext,String mCancleContent, String[] mItems, Boolean mCancleAbleOutSide) {
  33. super();
  34. this.mContext = mContext;
  35. this.mCancleContent = mCancleContent;
  36. this.mItems = mItems;
  37. this.mCancleAbleOutSide = mCancleAbleOutSide;
  38. showMyBottomPop();
  39. }
  40. /**
  41. * 此种情况适用于在弹框上弹出pop
  42. * @param mShowAtView 弹框的布局
  43. * @param mContext 上下文
  44. * @param mCancleContent 取消按钮文字
  45. * @param mItems 文字菜单数组
  46. * @param mCancleAbleOutSide 是否让点击外部取消
  47. */
  48. public IosDialog(View mShowAtView ,Context mContext,String mCancleContent, String[] mItems, Boolean mCancleAbleOutSide) {
  49. super();
  50. this.mContext = mContext;
  51. this.mCancleContent = mCancleContent;
  52. this.mItems = mItems;
  53. this.mCancleAbleOutSide = mCancleAbleOutSide;
  54. this.mShowAtView = mShowAtView;
  55. showMyBottomPop();
  56. }
  57. @SuppressWarnings("deprecation")
  58. @SuppressLint("InflateParams")
  59. public void showMyBottomPop() {
  60. View view = LayoutInflater.from(mContext).inflate(R.layout.layout_ios_pop, null);
  61. ListView list = (ListView) view.findViewById(R.id.pop_list);
  62. TextView cancle = (TextView) view.findViewById(R.id.cancle_tv);
  63. cancle.setText(mCancleContent);
  64. list.setAdapter(new MyItemAdapter());
  65. mPopupWindow = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
  66. mPopupWindow.setFocusable(true);
  67. // 点击外面popupWindow消失
  68. mPopupWindow.setOutsideTouchable(mCancleAbleOutSide);
  69. if (mCancleAbleOutSide) {
  70. mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
  71. }
  72. // 设置popWindow的显示和消失动画
  73. mPopupWindow.setAnimationStyle(R.style.mypopwindow_anim_style);
  74. // 在底部显示
  75. if (mShowAtView!=null) {
  76. mPopupWindow.showAtLocation(mShowAtView, Gravity.BOTTOM, 0, 0);
  77. }else {
  78. mPopupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
  79. }
  80. backgroundAlpha(0.5f);
  81. cancle.setOnClickListener(new OnClickListener() {
  82. @Override
  83. public void onClick(View v) {
  84. disMissPop();
  85. if (myPopClickListener!=null) {
  86. myPopClickListener.myCancleClick(mCancleContent);
  87. }
  88. }
  89. });
  90. mPopupWindow.setOnDismissListener(new OnDismissListener() {
  91. @Override
  92. public void onDismiss() {
  93. backgroundAlpha(1f);
  94. }
  95. });
  96. }
  97. class MyItemAdapter extends BaseAdapter{
  98. @Override
  99. public int getCount() {
  100. int conut = 0;
  101. if (mItems!=null && mItems.length>0) {
  102. conut = mItems.length;
  103. }
  104. return conut;
  105. }
  106. @Override
  107. public Object getItem(int position) {
  108. String item = "暂无内容";
  109. if (mItems!=null && mItems.length>0) {
  110. item = mItems[position];
  111. }
  112. return item;
  113. }
  114. @Override
  115. public long getItemId(int position) {
  116. return position;
  117. }
  118. @Override
  119. public View getView(final int position, View convertView, ViewGroup parent) {
  120. ViewHolder holder;
  121. if (convertView == null) {
  122. holder= new ViewHolder();
  123. convertView = LayoutInflater.from(mContext).inflate(R.layout.layout_pop_list_item, parent , false);
  124. holder.item_tv = (TextView) convertView.findViewById(R.id.item_tv);
  125. convertView.setTag(holder);
  126. }else {
  127. holder = (ViewHolder) convertView.getTag();
  128. }
  129. holder.item_tv.setText(getItem(position).toString());
  130. if (getCount()==1) {
  131. convertView.setBackgroundResource(R.drawable.pop_cancle);
  132. }else {
  133. if (position == 0) {
  134. convertView.setBackgroundResource(R.drawable.pop_item_first_bg);
  135. }else if (position == (mItems.length - 1)) {
  136. convertView.setBackgroundResource(R.drawable.pop_item_last_bg);
  137. }else {
  138. convertView.setBackgroundResource(R.drawable.pop_item_middle_bg);
  139. }
  140. }
  141. convertView.setOnClickListener(new OnClickListener() {
  142. @Override
  143. public void onClick(View v) {
  144. disMissPop();
  145. if (myPopClickListener!=null) {
  146. myPopClickListener.myListItemClick(position, getItem(position).toString());
  147. }
  148. }
  149. });
  150. return convertView;
  151. }
  152. class ViewHolder {
  153. TextView item_tv;
  154. }
  155. }
  156. private MyPopClickListener myPopClickListener;
  157. public void setOnMyPopClickListener(MyPopClickListener myPopClickListener){
  158. this.myPopClickListener = myPopClickListener;
  159. }
  160. public interface MyPopClickListener{
  161. public void myListItemClick(int itemPosition, String itemContent);
  162. public void myCancleClick(String cancleContent);
  163. }
  164. private void disMissPop(){
  165. if (mPopupWindow!=null && mPopupWindow.isShowing()) {
  166. mPopupWindow.dismiss();
  167. }
  168. }
  169. /**
  170. * 设置添加屏幕的背景透明度
  171. *
  172. * @param bgAlpha
  173. */
  174. public void backgroundAlpha(float bgAlpha) {
  175. WindowManager.LayoutParams lp = ((Activity) mContext).getWindow().getAttributes();
  176. lp.alpha = bgAlpha; // 0.0-1.0
  177. ((Activity) mContext).getWindow().setAttributes(lp);
  178. }
  179. }


通用提示框代码


  
  1. package com.example.iosdialog;
  2. import android.app.AlertDialog;
  3. import android.content.Context;
  4. import android.text.util.Linkify;
  5. import android.util.DisplayMetrics;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.view.WindowManager;
  10. import android.view.WindowManager.LayoutParams;
  11. import android.widget.Button;
  12. import android.widget.TextView;
  13. public class TipsDialog implements OnClickListener {
  14. private AlertDialog mDialog;
  15. private Context mContext;
  16. public TextView mTitleTv , mContentTv;
  17. private Button mCancleBtn , mSureBtn;
  18. private String mTextTitle,mTextContent, mTextCancle, mTextSure;
  19. private boolean mCanceledOnTouchOutside = true;
  20. /**
  21. * @param context 上下文
  22. * @param textTitle 标题
  23. * @param textContent 内容
  24. * @param textCancle 取消
  25. * @param textSure 确定
  26. * @param canceledOnTouchOutside 能否点击外部消失弹框
  27. */
  28. public TipsDialog(Context context , String textTitle,String textContent, String textCancle, String textSure , boolean canceledOnTouchOutside) {
  29. this.mContext = context;
  30. this.mTextTitle = textTitle;
  31. this.mTextContent = textContent;
  32. this.mTextCancle = textCancle;
  33. this.mTextSure = textSure;
  34. this.mCanceledOnTouchOutside = canceledOnTouchOutside;
  35. createDialog();
  36. }
  37. private void createDialog() {
  38. AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
  39. View view = LayoutInflater.from(mContext).inflate(R.layout.layout_simple_dialog, null);
  40. mTitleTv = (TextView) view.findViewById(R.id.dialog_tv_title);
  41. mContentTv = (TextView) view.findViewById(R.id.dialog_tv_content);
  42. mCancleBtn = (Button) view.findViewById(R.id.dialog_btn_cancle);
  43. mSureBtn = (Button) view.findViewById(R.id.dialog_btn_sure);
  44. mContentTv.setAutoLinkMask(Linkify.ALL);
  45. mCancleBtn.setOnClickListener(this);
  46. mSureBtn.setOnClickListener(this);
  47. builder.setView(view);
  48. mDialog = builder.create();
  49. mDialog.setCanceledOnTouchOutside(mCanceledOnTouchOutside);
  50. showMySimpleDialog();
  51. }
  52. public void showMySimpleDialog(){
  53. if(!mDialog.isShowing()){
  54. mTitleTv.setText(mTextTitle);
  55. mContentTv.setText(mTextContent);
  56. mCancleBtn.setText(mTextCancle);
  57. mSureBtn.setText(mTextSure);
  58. mDialog.show();
  59. WindowManager.LayoutParams layoutParams = mDialog.getWindow().getAttributes();
  60. DisplayMetrics dm = new DisplayMetrics();
  61. dm = mContext.getResources().getDisplayMetrics();
  62. int screenWidth = dm.widthPixels;
  63. layoutParams.width = (int) (screenWidth * 0.8);
  64. layoutParams.height = LayoutParams.WRAP_CONTENT;
  65. mDialog.getWindow().setAttributes(layoutParams);
  66. }
  67. }
  68. public void disMissMySimpleDialog(){
  69. if(mDialog !=null && mDialog.isShowing()){
  70. mDialog.dismiss();
  71. }
  72. }
  73. public void setCancleBtnVisibility(boolean visibile){
  74. if (visibile) {
  75. mCancleBtn.setVisibility(View.VISIBLE);
  76. }else {
  77. mCancleBtn.setVisibility(View.GONE);
  78. }
  79. }
  80. public void setSureBtnVisibility(boolean visibile){
  81. if (visibile) {
  82. mSureBtn.setVisibility(View.VISIBLE);
  83. }else {
  84. mSureBtn.setVisibility(View.GONE);
  85. }
  86. }
  87. //确定取消监听
  88. private OnMySimpleDialogListener mSimpleDialogistener;
  89. public void SetOnMySimpleDialogListener(OnMySimpleDialogListener listener){
  90. this.mSimpleDialogistener = listener;
  91. }
  92. public interface OnMySimpleDialogListener{
  93. public void onMyCancle();
  94. public void onMySure();
  95. }
  96. @Override
  97. public void onClick(View v) {
  98. if (v.getId() == R.id.dialog_btn_cancle) {
  99. disMissMySimpleDialog();
  100. if(mSimpleDialogistener != null ){
  101. mSimpleDialogistener.onMyCancle();
  102. }
  103. }else if (v.getId() == R.id.dialog_btn_sure) {
  104. disMissMySimpleDialog();
  105. if(mSimpleDialogistener != null ){
  106. mSimpleDialogistener.onMySure();
  107. }
  108. }
  109. }
  110. }


核心的就这些,具体的参照demo就可以。

DEMO下载

大家如果有其他问题可以加入我的qq开发群讨论:

开发一群:454430053开发二群:537532956

文章来源: wukong.blog.csdn.net,作者:再见孙悟空_,版权归原作者所有,如需转载,请联系作者。

原文链接:wukong.blog.csdn.net/article/details/78894890

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。