温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android Dialog如何实现仿ios9中的UIAlertController控件

发布时间:2021-06-28 14:02:49 来源:亿速云 阅读:153 作者:小新 栏目:移动开发

这篇文章给大家分享的是有关Android Dialog如何实现仿ios9中的UIAlertController控件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

效果:

Android Dialog如何实现仿ios9中的UIAlertController控件

如图所示,当我封装的Dialog被触发时,从底部弹出,点击取消键整个弹框会消失,当点击不同的TextView会有相应的点击事件发生,目前只写了三个能被点击的TextView(以后会改为可以动态添加个数)。
以下代码是我封装的BottomDialog:

public class BottomDialog extends Dialog {  private TextView mTitleTv;  private TextView mOneTv;  private TextView mTwoTv;  private TextView mCancelTv;  private Dialog myDialog;  private ClickListenerInterface clickListenerInterface;  public interface ClickListenerInterface {   void onTitleClick();//点击标题TextView   void onOneClick();//点击第一个TextView   void onTwoClick();//点击第二个TextView  }  public BottomDialog(@NonNull Context context) {   super(context);   init();  }  public BottomDialog(@NonNull Context context, @StyleRes int themeResId) {   super(context, themeResId);   init();  }  protected BottomDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {   super(context, cancelable, cancelListener);   init();  }  private void init() {   myDialog = new Dialog(getContext(), R.style.BottomDialogStyle);   //填充对话框的布局   View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_bottom, null);   //初始化控件   mTitleTv = (TextView) view.findViewById(R.id.tv_dialog_title);   mOneTv = (TextView) view.findViewById(R.id.tv_dialog_one);   mTwoTv = (TextView) view.findViewById(R.id.tv_dialog_two);   mCancelTv = (TextView) view.findViewById(R.id.tv_dialog_cancel);   mTitleTv.setOnClickListener(new DialogClickListener());   mOneTv.setOnClickListener(new DialogClickListener());   mTwoTv.setOnClickListener(new DialogClickListener());   mCancelTv.setOnClickListener(new DialogClickListener());   //将布局设置给Dialog   myDialog.setContentView(view);   //获取当前Activity所在的窗体   Window dialogWindow = myDialog.getWindow();   //设置Dialog从窗体底部弹出   dialogWindow.setGravity(Gravity.BOTTOM);   //获得窗体的属性   WindowManager.LayoutParams lp = dialogWindow.getAttributes();   lp.width = (int) (dialogWindow.getWindowManager().getDefaultDisplay().getWidth() * 0.95);   lp.y = 20; //设置Dialog距离底部的距离   dialogWindow.setAttributes(lp); //将属性设置给窗体   myDialog.show();//显示对话框  }  public void setClicklistener(ClickListenerInterface clickListenerInterface) {   this.clickListenerInterface = clickListenerInterface;  }  private class DialogClickListener implements View.OnClickListener {   @Override   public void onClick(View v) {    switch (v.getId()) {     case R.id.tv_dialog_title:      clickListenerInterface.onTitleClick();      break;     case R.id.tv_dialog_one:      clickListenerInterface.onOneClick();      break;     case R.id.tv_dialog_two:      clickListenerInterface.onTwoClick();      break;     case R.id.tv_dialog_cancel:      myDialog.dismiss();      break;    }   }  }  public void dismissDialog() {   if (myDialog != null && myDialog.isShowing()) {    myDialog.dismiss();   }  }  /**   * 设置标题栏文本文字   *   * @param stringId   * @see #setTitleText(String)   */  public void setTitleText(@StringRes int stringId) {   setTitleText(getContext().getString(stringId));  }  /**   * 设置标题栏文本文字   *   * @param text   */  public void setTitleText(String text) {   mTitleTv.setText(text);   mTitleTv.setVisibility(View.VISIBLE);  }  /**   * 设置第一个TextView文字   *   * @param stringId   */  public void setOneText(@StringRes int stringId) {   setOneText(getContext().getString(stringId));  }  /**   * 设置第一个TextView文字   *   * @param text   */  public void setOneText(String text) {   mOneTv.setText(text);   mOneTv.setVisibility(View.VISIBLE);  }  /**   * 设置第二个TextView文字   *   * @param stringId   */  public void setTwoText(@StringRes int stringId) {   setTwoText(getContext().getString(stringId));  }  /**   * 设置第二个TextView文字   *   * @param text   */  public void setTwoText(String text) {   mTwoTv.setText(text);   mTwoTv.setVisibility(View.VISIBLE);  }  /**   * 获取标题栏文本   *   * @return   */  public final TextView getTitleTv() {   return mTitleTv;  }  /**   * 获取第一个文本   *   * @return   */  public final TextView getOneTv() {   return mOneTv;  }  /**   * 获取第二个文本   *   * @return   */  public final TextView getTwoTv() {   return mTwoTv;  }  /**   * 设置字体颜色   *   * @param titleColor 标题的颜色,默认是灰色   * @param otherColor 其他的颜色,默认是蓝色   * @param i   有2种模式,1(标题和其他颜色不一样)2(标题和其他颜色一样,取消键不一样)   */  public void setColor(int titleColor, int otherColor, int i) {   if (i == 1) {    mTitleTv.setTextColor(ContextCompat.getColor(getContext(), titleColor));    mOneTv.setTextColor(ContextCompat.getColor(getContext(), otherColor));    mTwoTv.setTextColor(ContextCompat.getColor(getContext(), otherColor));   }   if (i == 2) {    mTitleTv.setTextColor(ContextCompat.getColor(getContext(), titleColor));    mOneTv.setTextColor(ContextCompat.getColor(getContext(), titleColor));    mTwoTv.setTextColor(ContextCompat.getColor(getContext(), titleColor));    mCancelTv.setTextColor(ContextCompat.getColor(getContext(), otherColor));   }  }  @Override  public void onProvideKeyboardShortcuts(List<KeyboardShortcutGroup> data, @Nullable Menu menu, int deviceId) {  } }

在Activity中的应用:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {  private BottomDialog bottomDialog;  private Button mButton;  private TextView mTextView;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mButton = (Button) findViewById(R.id.button);  mTextView = (TextView) findViewById(R.id.textView);  mButton.setOnClickListener(this);  }  @Override  public void onClick(View v) {  switch (v.getId()) {   case R.id.button:    showBottomDialog();   break;  }  }  /**  * 展示  */  private void showBottomDialog() {  bottomDialog = new BottomDialog(this);  bottomDialog.setClicklistener(new BottomDialog.ClickListenerInterface() {   @Override   public void onTitleClick() {   }   @Override   public void onOneClick() {   mTextView.setText(bottomDialog.getOneTv().getText().toString());   }   @Override   public void onTwoClick() {   mTextView.setText(bottomDialog.getTwoTv().getText().toString());   }  });  } }


被封装的Dialog主要提供的方法有:修改相应的TextView文字和颜色,提供点击相应的TextView的点击事件。

这里的点击事件主要用的是回调的方法,在Dialog中定义一个接口,在点击事件调用这个接口,当在Activity中触发这个回调接口时,点击事件产生。

主要代码是:

 private ClickListenerInterface clickListenerInterface;  public interface ClickListenerInterface {   void onTitleClick();//点击标题TextView   void onOneClick();//点击第一个TextView   void onTwoClick();//点击第二个TextView  }   public void setClicklistener(ClickListenerInterface clickListenerInterface) {   this.clickListenerInterface = clickListenerInterface;  }  private class DialogClickListener implements View.OnClickListener {   @Override   public void onClick(View v) {    switch (v.getId()) {     case R.id.tv_dialog_title:      clickListenerInterface.onTitleClick();      break;     case R.id.tv_dialog_one:      clickListenerInterface.onOneClick();      break;     case R.id.tv_dialog_two:      clickListenerInterface.onTwoClick();      break;     case R.id.tv_dialog_cancel:      myDialog.dismiss();      break;    }   }  }

最后说一下更改文字颜色的方法:

public void setColor(int titleColor, int otherColor, int i) {}

第一个传的颜色是修改最上面的TextView,第二个传的颜色是修改其他的文字颜色,第三个参数是表明你选用哪种模式,分别传1或2,有2种模式

  1. 标题和其他颜色不一样

  2. 标题和其他颜色一样,取消键不一样

感谢各位的阅读!关于“Android Dialog如何实现仿ios9中的UIAlertController控件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI