当前位置:   article > 正文

Android自定义Dialog对话框的几种方法(精简版)_android 弹出自定义对话框

android 弹出自定义对话框

自定义对话框是经常使用的功能,我们常用的弹窗操作,除了使用popwindow就是使用dialog来实现,这两种组件都支持之定义布局和功能来满足我们个性化的需求,也可以不采用自定义而直接使用系统封装好的api来实现功能。今天简单总结下在使用dialog做弹窗功能的方法和会遇到的问题与解决方案。
方法一:直接使用系统的,不自定义布局和功能方式

  1. /* @setIcon 设置对话框图标
  2. * @setTitle 设置对话框标题
  3. * @setMessage 设置对话框消息提示
  4. */
  5. final AlertDialog.Builder normalDialog =
  6. new AlertDialog.Builder(MainActivity.this);
  7. normalDialog.setIcon(R.drawable.icon_dialog);
  8. normalDialog.setTitle("我是一个普通Dialog")
  9. normalDialog.setMessage("你喜欢系统对话框吗?");
  10. normalDialog.setPositiveButton("确定",
  11. new DialogInterface.OnClickListener() {
  12. @Override
  13. public void onClick(DialogInterface dialog, int which) {
  14. //...To-do
  15. }
  16. });
  17. normalDialog.setNegativeButton("关闭",
  18. new DialogInterface.OnClickListener() {
  19. @Override
  20. public void onClick(DialogInterface dialog, int which) {
  21. //...To-do
  22. }
  23. });
  24. //如果想自定义三个按钮的对话框,可以把下面的方法注释打开
  25. // normalDialog.setNeutralButton("第三个按钮",
  26. // new DialogInterface.OnClickListener() {
  27. // @Override
  28. // public void onClick(DialogInterface dialog, int which) {
  29. // // ...To-do
  30. // }
  31. // });
  32. // 显示
  33. normalDialog.show();

方法二:采用自定义布局和功能方式

自定义对话框布局: high_opinion_dialog_layout.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:paddingTop="@dimen/dp_20"
  6. android:paddingBottom="@dimen/dp_10"
  7. android:paddingLeft="@dimen/dp_15"
  8. android:paddingRight="@dimen/dp_15"
  9. android:orientation="vertical">
  10. <TextView
  11. android:text="Rate US"
  12. android:gravity="center"
  13. android:textSize="@dimen/sp_18"
  14. android:textColor="@color/black"
  15. android:layout_gravity="center_horizontal"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content" />
  18. <TextView
  19. android:text="We're glad you're enjoying using our app! Would you mind giving us a review?"
  20. android:gravity="center"
  21. android:textSize="@dimen/sp_12"
  22. android:layout_marginTop="@dimen/dp_5"
  23. android:textColor="@color/black"
  24. android:layout_gravity="center_horizontal"
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content" />
  27. <LinearLayout
  28. android:layout_width="match_parent"
  29. android:layout_marginTop="@dimen/dp_15"
  30. android:layout_height="@dimen/dp_37">
  31. <Button
  32. android:id="@+id/btn_cancel_high_opion"
  33. android:layout_width="0dp"
  34. android:layout_height="match_parent"
  35. android:text="Maybe later"
  36. android:background="@drawable/btn_cancer_high_opion_shape"
  37. android:textColor="@color/white"
  38. android:layout_weight="1"/>
  39. <View
  40. android:layout_width="@dimen/dp_20"
  41. android:layout_height="match_parent"
  42. />
  43. <Button
  44. android:id="@+id/btn_agree_high_opion"
  45. android:layout_width="0dp"
  46. android:text="Sure"
  47. android:textColor="@color/white"
  48. android:background="@drawable/btn_agree_high_opinion_shape"
  49. android:layout_height="match_parent"
  50. android:layout_weight="1"/>
  51. </LinearLayout>
  52. </LinearLayout>

然后在activity或者fragment中想要加点击弹出对话框的控件的监听事件中调用初始化下面方法

  1. public class HomeActivity extends AppCompatActivity{
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_home);
  6. Button btn= findViewById(R.id.btn)
  7. //点击按钮弹出对话框
  8. btn.setOnClickListener(new View.OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. showDialog();
  12. }
  13. });
  14. }
  15. //初始化并弹出对话框方法
  16. private void showDialog(){
  17. View view = LayoutInflater.from(this).inflate(R.layout.high_opinion_dialog_layout,null,false);
  18. final AlertDialog dialog = new AlertDialog.Builder(this).setView(view).create();
  19. Button btn_cancel_high_opion = view.findViewById(R.id.btn_cancel_high_opion);
  20. Button btn_agree_high_opion = view.findViewById(R.id.btn_agree_high_opion);
  21. btn_cancel_high_opion.setOnClickListener(new View.OnClickListener() {
  22. @Override
  23. public void onClick(View v) {
  24. SharedPreferencesUnitls.setParam(getApplicationContext(),"HighOpinion","false");
  25. //... To-do
  26. dialog.dismiss();
  27. }
  28. });
  29. btn_agree_high_opion.setOnClickListener(new View.OnClickListener() {
  30. @Override
  31. public void onClick(View v) {
  32. //... To-do
  33. dialog.dismiss();
  34. }
  35. });
  36. dialog.show();
  37. //此处设置位置窗体大小,我这里设置为了手机屏幕宽度的3/4
  38. dialog.getWindow().setLayout((ScreenUtils.getScreenWidth(this)/4*3),LinearLayout.LayoutParams.WRAP_CONTENT);
  39. }
  40. }

此处附上ScreenUtils工具类代码

  1. public class ScreenUtils {
  2. /**
  3. * 获取屏幕高度(px)
  4. */
  5. public static int getScreenHeight(Context context) {
  6. return context.getResources().getDisplayMetrics().heightPixels;
  7. }
  8. /**
  9. * 获取屏幕宽度(px)
  10. */
  11. public static int getScreenWidth(Context context) {
  12. return context.getResources().getDisplayMetrics().widthPixels;
  13. }
  14. }

需要注意的问题总结:系统的dialog的宽度默认是固定的,即使你自定义布局的怎么修改宽高也不起作用,如果想修改弹出窗体大小,可以使用下面这段代码在调用dialog.show()方法之后来实现改变对话框的宽高的需求

  1. //此处设置位置窗体大小,
  2. dialog.getWindow().setLayout(width,height);

今天的分享先到这里,后续会不断添加和更新更多更好的学习资料,如果你喜欢可以关注加好友,互相探讨学习,我们互相学习一起成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/318463
推荐阅读
相关标签
  

闽ICP备14008679号