当前位置: 首页 > news >正文

地方网站做哪些内容投诉网站建设

地方网站做哪些内容,投诉网站建设,凡客诚品售后服务,wordpress图片管理前言 具体的代码以及示例我都放上 Github 了#xff0c;有需要的朋友可以去看一下 DialogFragmentDemos#xff0c;欢迎 star 和 fork. 本文的主要内容 DialogFragment 是什么创建通用的 CommonDialogFragment实现各种类型的 DialogFragment在写正文之前#xff0c;先来一波…前言 具体的代码以及示例我都放上 Github 了有需要的朋友可以去看一下 DialogFragmentDemos欢迎 star 和 fork. 本文的主要内容 DialogFragment 是什么创建通用的 CommonDialogFragment实现各种类型的 DialogFragment在写正文之前先来一波效果展示吧 一、DialogFragment 是什么 DialogFragment 在 Android 3.0 时被引入是一种特殊的 Fragment用于在 Activity 的内容之上显示一个静态的对话框。例如警告框、输入框、确认框等。 1、DialogFragment 的优点 其实在 Android 中显示对话框有两种类型可供使用一种是 DialogFragment而另一种则是 Dialog。在 DialogFragment 产生之前我们创建对话框一般采用 Dialog而且从代码的编写角度来看Dialog 使用起来其实更加简单但是 Google 却是推荐尽量使用 DialogFragment是不是感觉很奇怪其实原因也很简单 DialogFragment 有着 Dialog 所没有的非常好的特性 DialogFragment 本身是 Fragment 的子类有着和 Fragment 基本一样的生命周期使用 DialogFragment 来管理对话框当旋转屏幕和按下后退键的时候可以更好的管理其生命周期在手机配置变化导致 Activity 需要重新创建时例如旋转屏幕基于 DialogFragment 的对话框将会由 FragmentManager 自动重建然而基于 Dialog 实现的对话框却没有这样的能力2、DialogFragment 的使用 使用 DialogFragment 至少需要实现 onCreateView() 或者 onCreateDialog() 方法onCreateView() 即使用自定义的 xml 布局文件来展示 Dialog而 onCreateDialog() 即使用 AlertDialog 或者 Dialog 创建出 我们想要的 Dialog因为这篇文章主要是讲 DialogFragment 的封装至于 DialogFragment 具体的使用可以参考下洋神的这篇文章 Android 官方推荐 : DialogFragment 创建对话框 二、创建通用的 CommonDialogFragment 这个类是 DialogFragment 的子类对 DialogFragment 进行封装依赖外部传入的 AlertDialog 来构建同时也处理了 DialogFragment 中 AlertDialog 不能设置外部取消的问题 public class CommonDialogFragment extends DialogFragment {/*** 监听弹出窗是否被取消*/private OnDialogCancelListener mCancelListener;/*** 回调获得需要显示的dialog*/private OnCallDialog mOnCallDialog;public interface OnDialogCancelListener {void onCancel();}public interface OnCallDialog {Dialog getDialog(Context context);}public static CommonDialogFragment newInstance(OnCallDialog call, boolean cancelable) {return newInstance(call, cancelable, null);}public static CommonDialogFragment newInstance(OnCallDialog call, boolean cancelable, OnDialogCancelListener cancelListener) {CommonDialogFragment instance new CommonDialogFragment();instance.setCancelable(cancelable);instance.mCancelListener cancelListener;instance.mOnCallDialog call;return instance;}Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {if (null mOnCallDialog) {super.onCreateDialog(savedInstanceState);}return mOnCallDialog.getDialog(getActivity());}Overridepublic void onStart() {super.onStart();Dialog dialog getDialog();if (dialog ! null) {//在5.0以下的版本会出现白色背景边框若在5.0以上设置则会造成文字部分的背景也变成透明if(Build.VERSION.SDK_INT Build.VERSION_CODES.KITKAT) {//目前只有这两个dialog会出现边框if(dialog instanceof ProgressDialog || dialog instanceof DatePickerDialog) {getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));}}Window window getDialog().getWindow();WindowManager.LayoutParams windowParams window.getAttributes();windowParams.dimAmount 0.0f;window.setAttributes(windowParams);}}Overridepublic void onCancel(DialogInterface dialog) {super.onCancel(dialog);if (mCancelListener ! null) {mCancelListener.onCancel();}}} 可以看到这个类的代码量也是很少的先定义了两个接口 OnDialogCancelListenerOnCallDialog前者用于监听弹出窗是否被取消后者则可以让我们回调获得想要显示的 Dialog可以看到在 onCreateDialog() 中我们返回的 是 mOnCallDialog.getDialog(getActivity);当我们在传入 Dialog 的时候便会回调到此处让 onCreateDialog() 返回我们传入的 Dialog对接口回调不是很清楚的朋友可以看下这篇文章 一个经典例子让你彻彻底底理解java回调机制 接着在 onStart() 中进行了一些特殊性的处理因为在 5.0 以下的版本ProgressDialog 和 DatePickerDialog 会出现白色的边框这使得用户体验非常不好所以我们要在此处进行相应的处理 最后便是封装我们的构造函数 newInstance(OnCallDialog call, boolean cancelable, OnDialogCancelListener cancelListener)当我们要使用这个 CommonDialogFragment 的时候先 new 一个 OnCallDialog将我们想要显示的 Dialog 传进去cancelable用于设置对话框是否能被取消可以看到在 onCancel() 有这样一段代码 if(mCancelListener ! null){mCancelListener.onCancel(); } 这便是我们在构造函数中传入 OnCancelListener 的原因当我们想要做一些取消对话框后的处理时只要在构造函数中传入 OnCancelListener实现 onCancel() 方法就行了 三、实现各种类型的 DialogFragment 既然前面我们创建了 CommonFragment 作为所有 DialogFragment 的基类那么接下来我们当然要好好地来实现各种类型的 DialogFragment 了我的思路是创建一个 DialogFragmentHelper 作为实现提示框的帮助类帮我们把代码都封装起来使用的时候只需要关注与 AlertDialog 的交互Helper 会帮助我们用 DialogFragment 来进行显示这样既能统一整个应用的 Dialog 风格又能让我们实现各种各样的对话框变得相当的简单 在实现 DialogFragmentHelper 之前我们有两件事先要做一下 1、在 styles 文件中定义我们定义我们对话框的风格样式 style nameBase_AlertDialog parentBase.Theme.AppCompat.Light.Dialog!--不设置在6.0以上会出现宽度不充满屏幕的情况--item namewindowMinWidthMinor90%/item!-- 取消标题栏如果在代码中settitle的话会无效 --item nameandroid:windowNoTitletrue/item!-- 标题的和Message的文字颜色 --!--item nameandroid:textColorPrimarycolor/black/item--!-- 修改顶部标题背景颜色具体颜色自己定可以是图片 --item nameandroid:topDarkcolor/app_main_color_deep/item!--item nameandroid:backgroundcolor/white/item--!-- 在某些系统上面设置背景颜色之后出现奇怪的背景处这里设置背景为透明为了隐藏边框 --!--item nameandroid:windowBackgroundandroid:color/transparent/item--!--item nameandroid:windowFramenull/item--!-- 进入和退出动画左进右出系统自带 --!--item nameandroid:windowAnimationStyleandroid:style/Animation.Translucent/item--!-- 按钮字体颜色,全部一起改单个改需要在Java代码中修改 --item namecolorAccentcolor/app_main_color/item/style 我已经打上了详细的注释相信应该很容易理解 2、写一个接口用于 DialogFragmentHelper 与逻辑层之间进行数据监听 public interface IDialogResultListenerT {void onDataResult(T result); } 准备工作做完了就让我们开工撸 DialogFragmentHelper 吧因为篇幅有限我只是代表性的选了其中的一些效果来讲具体的代码可以参考下 DialogFragmentDemos public class DialogFragmentHelper {private static final String TAG_HEAD DialogFragmentHelper.class.getSimpleName();/*** 加载中的弹出窗*/private static final int PROGRESS_THEME R.style.Base_AlertDialog;private static final String PROGRESS_TAG TAG_HEAD :progress;public static CommonDialogFragment showProgress(FragmentManager fragmentManager, String message){return showProgress(fragmentManager, message, true, null);}public static CommonDialogFragment showProgress(FragmentManager fragmentManager, String message, boolean cancelable){return showProgress(fragmentManager, message, cancelable, null);}public static CommonDialogFragment showProgress(FragmentManager fragmentManager, final String message, boolean cancelable, CommonDialogFragment.OnDialogCancelListener cancelListener){CommonDialogFragment dialogFragment CommonDialogFragment.newInstance(new CommonDialogFragment.OnCallDialog() {Overridepublic Dialog getDialog(Context context) {ProgressDialog progressDialog new ProgressDialog(context, PROGRESS_THEME);progressDialog.setMessage(message);return progressDialog;}}, cancelable, cancelListener);dialogFragment.show(fragmentManager, PROGRESS_TAG);return dialogFragment;}/*** 带输入框的弹出窗*/private static final int INSERT_THEME R.style.Base_AlertDialog;private static final String INSERT_TAG TAG_HEAD :insert;public static void showInsertDialog(FragmentManager manager, final String title, final IDialogResultListenerString resultListener, final boolean cancelable){CommonDialogFragment dialogFragment CommonDialogFragment.newInstance(new CommonDialogFragment.OnCallDialog() {Overridepublic Dialog getDialog(Context context) {// ...AlertDialog.Builder builder new AlertDialog.Builder(context, INSERT_THEME);builder.setPositiveButton(DIALOG_POSITIVE, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {if(resultListener ! null){resultListener.onDataResult(editText.getText().toString());}}});builder.setNegativeButton(DIALOG_NEGATIVE, null);return builder.create();}}, cancelable, null);dialogFragment.show(manager, INSERT_TAG);} } 可以看到因为我们实现封装了 CommonFragment所有这些效果的实现都变得相当的简单吗这便是封装给我们带来的便利和好处。 就以 加载中的弹出窗 为例来看看我们是怎么实现的 public static CommonDialogFragment showProgress(FragmentManager fragmentManager, final String message, boolean cancelable, CommonDialogFragment.OnDialogCancelListener cancelListener){CommonDialogFragment dialogFragment CommonDialogFragment.newInstance(new CommonDialogFragment.OnCallDialog() {Overridepublic Dialog getDialog(Context context) {ProgressDialog progressDialog new ProgressDialog(context, PROGRESS_THEME);progressDialog.setMessage(message);return progressDialog;}}, cancelable, cancelListener);dialogFragment.show(fragmentManager, PROGRESS_TAG);return dialogFragment;} 我们先调用了 CommonDialogFragment 的构造函数将一个 ProgressDialog 传进去然后依次传入 cancelable 和 cancelListener最后调用 show() 函数将DialogFragment 显示出来因为我们使用了构造函数的重载可以看到最简单的构造函数只需要传入两个参数就行了是不是相当的简洁啊。 应该还没忘了我们上面创建了一个 IDialogResultListenerlt;Tgt; 用于 DialogFragment 与逻辑层之间进行数据监听吧为了能传入各种各样类型的数据这里我使用了 泛型 来进行处理就以 带输入框的弹出窗 为例来看看究竟要怎么使用吧 public static void showInsertDialog(FragmentManager manager, final String title, final IDialogResultListenerString resultListener, final boolean cancelable){CommonDialogFragment dialogFragment CommonDialogFragment.newInstance(new CommonDialogFragment.OnCallDialog() {Overridepublic Dialog getDialog(Context context) {// ... 这里省略一部分代码AlertDialog.Builder builder new AlertDialog.Builder(context, INSERT_THEME);builder.setPositiveButton(DIALOG_POSITIVE, new DialogInterface.OnClickListener() {Overridepublic void onClick(DialogInterface dialog, int which) {if(resultListener ! null){resultListener.onDataResult(editText.getText().toString());}}});builder.setNegativeButton(DIALOG_NEGATIVE, null);return builder.create();}}, cancelable, null);dialogFragment.show(manager, INSERT_TAG);} 可以看到我们在 showInsertDialog() 方法中传入了IDialogResultListenerlt;Stringgt; resultListener当我们想要处理输入的内容的时候只要在外部调用的时候new 一个IDialogResultListener 传进去然后实现 onDataResult() 方法就行了 以上便是全文的内容具体的代码以及示例我都放上 Github 了有需要的朋友可以去看一下 DialogFragmentDemos如果觉得对你有所帮助的话就赏个 star 吧 猜你喜欢 手把手教你从零开始做一个好看的 APPAndroid 能让你少走弯路的干货整理Android 一款十分简洁、优雅的日记 APP转载于:https://blog.51cto.com/11365063/2072445
http://wiki.neutronadmin.com/news/25581/

相关文章:

  • 成品ppt的网站免费观看网站建设和开发
  • 个人做网站平台免费下wordpress
  • 北京网站建设正邦绍兴seo全网营销
  • 番禺网站设计公司公司内部网站建设
  • 微网站开发价格中小企业网络营销
  • 公司想做个网站怎么办外贸展示网站多少钱
  • 做色流网站要注意什么地方百度框架户一级代理商
  • 公司网站开发建设什么会计科目网站建设的目的包含哪些方面
  • 死链接对网站的危害有哪些营销型网站四大功能
  • 仿牌网站 域名注册惠州网站建设怎么样
  • 网站移动转换网站费做进什么科目
  • 吴忠门户网站建设网站后台html模板
  • 公司网站设计定制做企业网站需要买什么
  • 好的网站制作平台中文域名可以做网站吗
  • 做教育网站多少钱湘潭网站建设 x磐石网络
  • 南昌网站建设模板下载网址南宁网站制作公
  • 制作化妆品网站好听罕见绝不重名的公司名称
  • 垂直行业门户网站如何建设平台型的网站
  • 免费收录网站大全用wordpress建一个网站吗
  • 做的最好的本地生活网站湛江专业网站建设公司
  • 唐山专业网站建设公司网站开发 网页上传 网页制作
  • 网站优化怎样提高网站用户体验有了域名空间怎么做网站
  • 舆情网站入口做网站的要到处跑吗
  • 做网站最快多久密云建设银行招聘网站
  • 泉州自助建站软件php与mysql网站开发全接触
  • 极乐宝盒网站建设铁岭 网站建设
  • 网站建设销售策划方案网页建设推荐
  • 深圳网站建设(龙华信科)赣州网站建设方案
  • 网站建设项目需求说明旅游公司网站建设策划书
  • 网站对公司的意义建筑工程承包方式