android自定义更新,Android如何自定义升级对话框示例详解

本文详细介绍了如何在Android中创建一个自定义的升级对话框,包括UI设计、DialogFragment的使用以及如何调整Dialog的样式,如设置圆角和屏幕占比。通过实例展示了如何在MainActivity中调用并展示此对话框,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

前言

本文主要给大家介绍了关于Android自定义升级对话框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

实现的效果如下所示

1508cc55554c322f3f3d1534e012a009.gif

其实这也只是一个DialogFragment 而已,重点只是在于界面的设计

想要使用做出这样一个DialogFragment ,需要自定义一个View,然后将该View传入到该Dialog中

先定义布局,一个TextView用于标题,一个TextView用于升级内容阐述,一个ImageView,一个确认升级的按钮

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/tv_title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="20dp"

android:gravity="center"

android:textColor="#0474dc"

android:textSize="22sp"

android:textStyle="bold" />

android:id="@+id/tv_description"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="15dp"

android:gravity="center"

android:textColor="#0474dc"

android:textSize="18sp" />

android:layout_width="70dp"

android:layout_height="70dp"

android:layout_gravity="center"

android:layout_marginBottom="20dp"

android:layout_marginTop="20dp"

android:src="@drawable/upgrade" />

android:id="@+id/btn_upgrade"

style="@style/blueButtonStyle"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="20dp"

android:layout_marginEnd="20dp"

android:layout_marginStart="20dp"

android:gravity="center"

android:text="立即更新" />

当中,按钮需要用到自定义Style

@drawable/button_blue_background

@style/blueButtonTextStyle

@android:color/white

17sp

建立 DialogFragment 的子类

/**

* 作者: 叶应是叶

* 时间: 2017/3/23 12:36

* 描述:

*/

public class VersionDialogFragment extends DialogFragment {

private static final String TITLE = "title";

private static final String DESCRIPTION = "description";

private View.OnClickListener positiveCallback;

private String title;

private String description;

public static VersionDialogFragment getInstance(String title, String description) {

Bundle bundle = new Bundle();

bundle.putString(TITLE, title);

bundle.putString(DESCRIPTION, description);

VersionDialogFragment versionDialogFragment = new VersionDialogFragment();

versionDialogFragment.setArguments(bundle);

return versionDialogFragment;

}

@Override

public void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Bundle bundle = getArguments();

title = bundle.getString(TITLE);

description = bundle.getString(DESCRIPTION);

}

public void show(FragmentManager fragmentManager, View.OnClickListener positiveCallback) {

this.positiveCallback = positiveCallback;

show(fragmentManager, "VersionDialogFragment");

}

@NonNull

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

LayoutInflater inflater = getActivity().getLayoutInflater();

final View view = inflater.inflate(R.layout.version_dialog, null);

TextView tv_title = (TextView) view.findViewById(R.id.tv_title);

TextView tv_description = (TextView) view.findViewById(R.id.tv_description);

Button btn_upgrade = (Button) view.findViewById(R.id.btn_upgrade);

tv_title.setText(title);

tv_description.setText(description);

btn_upgrade.setOnClickListener(positiveCallback);

builder.setView(view);

return builder.create();

}

}

然后再到 MainActivity 中调用Dialog

public void showDialog(View view) {

final VersionDialogFragment dialogFragment = VersionDialogFragment.getInstance("2.0.1新版本发布啦", "更多功能等你体验");

dialogFragment.show(getSupportFragmentManager(), new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, "进行更新操作吧", Toast.LENGTH_SHORT).show();

dialogFragment.dismiss();

}

});

}

此时界面是这样的

55c87e49aabd3b010817ca9a96bdad60.png

可以看到 Dialog 中有较大的空白区,显得有点虚浮

这里可以选择在 VersionDialogFragment 的 onStart() 方法中指定 Dialog 所占屏幕宽度的比例

@Override

public void onStart() {

super.onStart();

Dialog dialog = getDialog();

if (dialog != null) {

DisplayMetrics dm = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

if (dialog.getWindow() != null) {

dialog.getWindow().setLayout((int) (dm.widthPixels * 0.7), ViewGroup.LayoutParams.WRAP_CONTENT);

}

}

}

这里设置占据屏幕宽度的百分之七十

效果图如下所示

3a07ec297a51526f7d72b8c842dfe5bc.png

此时 Dialog 的四个角还都是直的,这里再来将之修改为圆角

在drawable文件夹下新建一个root.xml文件,作为Dialog使用到的布局的根Layout的背景

android:shape="rectangle">

@Override

public void onStart() {

super.onStart();

Dialog dialog = getDialog();

if (dialog != null) {

DisplayMetrics dm = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

if (dialog.getWindow() != null) {

dialog.getWindow().setLayout((int) (dm.widthPixels * 0.8), ViewGroup.LayoutParams.WRAP_CONTENT);

}

}

}

然后再修改onStart()方法,为Dialog的Window设置透明背景色

@Override

public void onStart() {

super.onStart();

Dialog dialog = getDialog();

if (dialog != null) {

DisplayMetrics dm = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

if (dialog.getWindow() != null) {

dialog.getWindow().setLayout((int) (dm.widthPixels * 0.7), ViewGroup.LayoutParams.WRAP_CONTENT);

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

}

}

}

这样,总的效果就都完成了

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值