Repository: Alex-Cin/Dialog Branch: master Commit: fcccb0a2353f Files: 92 Total size: 102.9 KB Directory structure: gitextract_tkf2eqbg/ ├── .gitignore ├── .idea/ │ ├── compiler.xml │ ├── copyright/ │ │ └── profiles_settings.xml │ ├── encodings.xml │ ├── gradle.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ └── vcs.xml ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ └── alex/ │ │ └── dialogdemo/ │ │ ├── App.java │ │ ├── dialog/ │ │ │ ├── BottomDialog.java │ │ │ ├── LoadingDialog.java │ │ │ ├── NoticeDialog.java │ │ │ ├── OneButtonDialog.java │ │ │ ├── SelectedProductDialog.java │ │ │ └── base/ │ │ │ ├── Bottom2TopDialog.java │ │ │ ├── CenterNormalDialog.java │ │ │ ├── CenterScaleDialog.java │ │ │ ├── SimpleDialog.java │ │ │ ├── TaoBaoDialog.java │ │ │ └── Top2BottomDialog.java │ │ └── ui/ │ │ └── MainActivity.java │ └── res/ │ ├── anim/ │ │ ├── alex_dialog_anim_bottom2top_in.xml │ │ ├── alex_dialog_anim_bottom2top_out.xml │ │ ├── alex_dialog_anim_fade_in.xml │ │ ├── alex_dialog_anim_fade_out.xml │ │ ├── alex_dialog_anim_scale_in.xml │ │ ├── alex_dialog_anim_scale_out.xml │ │ ├── alex_dialog_anim_top2bottom_in.xml │ │ └── alex_dialog_anim_top2bottom_out.xml │ ├── drawable/ │ │ ├── alex_dialog_layer_list_shadow_rectangle.xml │ │ ├── layer_list_shadow_dialog_one_button.xml │ │ ├── layer_list_shadow_rectangle.xml │ │ └── selector_dialog_one_button_submit.xml │ ├── layout/ │ │ ├── activity_main.xml │ │ ├── dialog_loading.xml │ │ ├── dialog_notice.xml │ │ ├── dialog_one_button.xml │ │ └── dialog_selected_product.xml │ ├── values/ │ │ ├── alex_color.xml │ │ ├── alex_dialog_anim_alpha_style.xml │ │ ├── alex_dialog_anim_bottom2top_style.xml │ │ ├── alex_dialog_anim_sacle_style.xml │ │ ├── alex_dialog_anim_top2bottom_style.xml │ │ ├── alex_dialog_base_dim_style.xml │ │ ├── alex_dialog_base_light_style.xml │ │ ├── alex_dialog_shadow_color_radius.xml │ │ ├── alex_dimens.xml │ │ ├── alex_string.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── shadow_color_radius.xml │ │ ├── shadow_color_radius_dialog_one_button.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── values-w820dp/ │ └── dimens.xml ├── build.gradle ├── dialog/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── org/ │ │ └── alex/ │ │ └── dialog/ │ │ ├── anim/ │ │ │ └── BaseAnimatorSet.java │ │ ├── annotation/ │ │ │ ├── AnimType.java │ │ │ ├── ClickPosition.java │ │ │ └── OnKeyType.java │ │ ├── base/ │ │ │ └── BaseDialog.java │ │ ├── callback/ │ │ │ ├── OnDialogClickListener.java │ │ │ ├── OnWait2DismissListener.java │ │ │ └── SimpleOnKeyListener.java │ │ ├── helper/ │ │ │ └── OnClickHelper.java │ │ └── util/ │ │ └── StatusBarUtils.java │ └── res/ │ └── values/ │ ├── alex_theme_no_title_app.xml │ └── strings.xml ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── sweeploadingview/ ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src/ └── main/ ├── AndroidManifest.xml ├── java/ │ └── org/ │ └── alex/ │ ├── callback/ │ │ └── SimpleAnimatorListener.java │ └── sweeploadingview/ │ └── SweepLoadingView.java └── res/ └── values/ ├── alex_sweep_loading_view_attrs.xml └── strings.xml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ *.iml .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures .externalNativeBuild ================================================ FILE: .idea/compiler.xml ================================================ ================================================ FILE: .idea/copyright/profiles_settings.xml ================================================ ================================================ FILE: .idea/encodings.xml ================================================ ================================================ FILE: .idea/gradle.xml ================================================ ================================================ FILE: .idea/misc.xml ================================================ ================================================ FILE: .idea/modules.xml ================================================ ================================================ FILE: .idea/runConfigurations.xml ================================================ ================================================ FILE: .idea/vcs.xml ================================================ ================================================ FILE: README.md ================================================ # Dialog ![预览](https://github.com/Alex-Cin/Dialog/blob/master/preview/preview.gif) ================================================ FILE: app/.gitignore ================================================ /build ================================================ FILE: app/build.gradle ================================================ apply plugin: 'com.android.application' android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId "com.alex.dialogdemo" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile project(':dialog') compile project(':sweeploadingview') } ================================================ FILE: app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in E:\Android\sdk/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the proguardFiles # directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} ================================================ FILE: app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: app/src/main/java/com/alex/dialogdemo/App.java ================================================ package com.alex.dialogdemo; ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/BottomDialog.java ================================================ package com.alex.dialogdemo.dialog; import android.content.Context; import android.view.View; import com.alex.dialogdemo.R; import com.alex.dialogdemo.dialog.base.Bottom2TopDialog; import org.alex.dialog.annotation.ClickPosition; /** * 作者:Alex * 时间:2016年09月10日 17:40 * 简述: */ public class BottomDialog extends Bottom2TopDialog { public BottomDialog(Context context) { super(context); } @Override public int getLayoutRes() { return R.layout.dialog_notice; } @Override public void onCreateData() { setOnCilckListener(R.id.tv_submit,R.id.tv_cancel); } @Override public void onClick(View v, int id) { if(R.id.tv_submit == id){ onDialogClickListener(ClickPosition.SUBMIT); }else if(R.id.tv_cancel == id){ onDialogClickListener(ClickPosition.CANCEL); } } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/LoadingDialog.java ================================================ package com.alex.dialogdemo.dialog; import android.content.Context; import android.view.View; import com.alex.dialogdemo.R; import com.alex.dialogdemo.dialog.base.SimpleDialog; /** * 作者:Alex * 时间:2016年09月03日 21:29 * 简述: */ @SuppressWarnings("all") public class LoadingDialog extends SimpleDialog { /*super(context,R.style.alex_dialog_base_light_style);*/ public LoadingDialog(Context context) { super(context); } /** * 配置 对话框的 布局文件 */ @Override public int getLayoutRes() { return R.layout.dialog_loading; } /** * 在 这里 进行 finndView 设置点击事件 */ @Override public void onCreateData() { setCancelable(true); setCanceledOnTouchOutside(false); } @Override public void onClick(View v, int id) { } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/NoticeDialog.java ================================================ package com.alex.dialogdemo.dialog; import android.content.Context; import android.view.View; import com.alex.dialogdemo.R; import com.alex.dialogdemo.dialog.base.Top2BottomDialog; import org.alex.dialog.annotation.ClickPosition; /** * 作者:Alex * 时间:2016年09月10日 17:40 * 简述: */ public class NoticeDialog extends Top2BottomDialog { public NoticeDialog(Context context) { super(context); } @Override public int getLayoutRes() { return R.layout.dialog_notice; } @Override public void onCreateData() { setOnCilckListener(R.id.tv_submit,R.id.tv_cancel); } @Override public void onClick(View v, int id) { if(R.id.tv_submit == id){ onDialogClickListener(ClickPosition.SUBMIT); }else if(R.id.tv_cancel == id){ onDialogClickListener(ClickPosition.CANCEL); } } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/OneButtonDialog.java ================================================ package com.alex.dialogdemo.dialog; import android.content.Context; import android.view.View; import com.alex.dialogdemo.R; import com.alex.dialogdemo.dialog.base.CenterScaleDialog; import org.alex.dialog.annotation.ClickPosition; /** * 作者:Alex * 时间:2016年09月09日 23:52 * 简述: */ public class OneButtonDialog extends CenterScaleDialog { public OneButtonDialog(Context context) { super(context); } /** * 配置 对话框的 布局文件 */ @Override public int getLayoutRes() { return R.layout.dialog_one_button; } /** * 在 这里 进行 findView 设置点击事件 */ @Override public void onCreateData() { setOnCilckListener(R.id.tv_submit); } /** * 处理按钮点击事件 并绑定 onDialogClickListener * * @param v */ @Override public void onClick(View v, int id) { if (R.id.tv_submit == v.getId()) { if (onDialogClickListener != null) { onDialogClickListener.onDialogClick(this, ClickPosition.SUBMIT); } } } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/SelectedProductDialog.java ================================================ package com.alex.dialogdemo.dialog; import android.content.Context; import android.view.View; import com.alex.dialogdemo.R; import com.alex.dialogdemo.dialog.base.TaoBaoDialog; import org.alex.dialog.annotation.ClickPosition; /** * 作者:Alex * 时间:2016年09月09日 23:52 * 简述: */ public class SelectedProductDialog extends TaoBaoDialog { public SelectedProductDialog(Context context, View rootView) { super(context, rootView, R.style.alex_dialog_base_light_style); } /** * 配置 对话框的 布局文件 */ @Override public int getLayoutRes() { return R.layout.dialog_selected_product; } /** * 在 这里 进行 findView 设置点击事件 */ @Override public void onCreateData() { setScaleWidth(1F); setOnCilckListener(R.id.tv_submit); } /** * 处理按钮点击事件 并绑定 onDialogClickListener * * @param v */ @Override public void onClick(View v, int id) { if (R.id.tv_submit == v.getId()) { if (onDialogClickListener != null) { onDialogClickListener.onDialogClick(this, ClickPosition.SUBMIT); } } } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/Bottom2TopDialog.java ================================================ package com.alex.dialogdemo.dialog.base; import android.content.Context; import com.alex.dialogdemo.R; import org.alex.dialog.annotation.AnimType; /** * 作者:Alex * 时间:2016/12/7 13 27 * 简述: */ public abstract class Bottom2TopDialog extends SimpleDialog { public Bottom2TopDialog(Context context) { super(context, R.style.alex_dialog_base_light_style); } /** * 显示对话框,无动画 */ @Override public void show() { show(AnimType.BOTTOM_2_TOP); } /** * 显示对话框,强制转换对话框的动画类型 * * @param animType */ @Override public void show(@AnimType int animType) { super.show(animType); } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/CenterNormalDialog.java ================================================ package com.alex.dialogdemo.dialog.base; import android.content.Context; import com.alex.dialogdemo.R; import org.alex.dialog.annotation.AnimType; /** * 作者:Alex * 时间:2016年09月10日 17:33 * 简述: */ public abstract class CenterNormalDialog extends SimpleDialog { public CenterNormalDialog(Context context) { super(context, R.style.alex_dialog_base_light_style); } /** * 显示对话框,无动画 */ @Override public void show() { show(AnimType.CENTER_NORMAL); } /** * 显示对话框,强制转换对话框的动画类型 * * @param animType */ @Override public void show(@AnimType int animType) { super.show(animType); } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/CenterScaleDialog.java ================================================ package com.alex.dialogdemo.dialog.base; import android.content.Context; import com.alex.dialogdemo.R; import org.alex.dialog.annotation.AnimType; /** * 作者:Alex * 时间:2016年09月10日 17:33 * 简述: */ public abstract class CenterScaleDialog extends SimpleDialog { public CenterScaleDialog(Context context) { super(context, R.style.alex_dialog_base_light_style); } /** * 显示对话框,无动画 */ @Override public void show() { show(AnimType.CENTER_SCALE); } /** * 显示对话框,强制转换对话框的动画类型 * * @param animType */ @Override public void show(@AnimType int animType) { super.show(animType); } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/SimpleDialog.java ================================================ package com.alex.dialogdemo.dialog.base; import android.content.Context; import android.view.Gravity; import android.view.Window; import com.alex.dialogdemo.R; import org.alex.dialog.annotation.AnimType; import org.alex.dialog.base.BaseDialog; /** * 作者:Alex * 时间:2016/12/7 13 22 * 简述: */ public abstract class SimpleDialog extends BaseDialog { public SimpleDialog(Context context) { super(context, R.style.alex_dialog_base_light_style); } public SimpleDialog(Context context, int theme) { super(context, theme); } /** * 显示对话框,无动画 */ @Override public void show() { if (Gravity.BOTTOM == gravity) { show(AnimType.BOTTOM_2_TOP); } else if (Gravity.TOP == gravity) { show(AnimType.TOP_2_BOTTOM); } else if (Gravity.CENTER == gravity) { show(animType); } else { super.show(); } } /** * 显示对话框,强制转换对话框的动画类型 */ public void show(@AnimType int animType) { Window window = getWindow(); /*如果根据 AnimType 的类型,强制选择Dialog出现的位置*/ if (AnimType.BOTTOM_2_TOP == animType) { setGravity(Gravity.BOTTOM); window.setWindowAnimations(R.style.alex_dialog_anim_bottom2top); } else if (AnimType.TOP_2_BOTTOM == animType) { setGravity(Gravity.TOP); window.setWindowAnimations(R.style.alex_dialog_anim_top2bottom); } else if (AnimType.CENTER_SCALE == animType) { setGravity(Gravity.CENTER); window.setWindowAnimations(R.style.alex_dialog_anim_scale); } else if (AnimType.CENTER_NORMAL == animType) { setGravity(Gravity.CENTER); window.setWindowAnimations(R.style.alex_dialog_anim_alpha); } super.show(); } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/TaoBaoDialog.java ================================================ package com.alex.dialogdemo.dialog.base; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Color; import android.os.Handler; import android.os.Message; import android.view.View; import org.alex.dialog.anim.BaseAnimatorSet; import org.alex.dialog.annotation.AnimType; /** * 作者:Alex * 时间:2016/12/7 13 28 * 简述: */ public abstract class TaoBaoDialog extends SimpleDialog { private BaseAnimatorSet inAnimSet; private BaseAnimatorSet outAnimSet; private View rootView; protected int duration; protected int backgroundColor; private View parentView; public TaoBaoDialog(Context context, View rootView, int theme) { super(context, theme); this.rootView = rootView; initView(); } protected void initView() { duration = 300; backgroundColor = Color.parseColor("#111111"); parentView = (View) rootView.getParent(); parentView.setBackgroundColor(backgroundColor); inAnimSet = new WindowsInAs(); outAnimSet = new WindowsOutAs(); } /** * 显示对话框,强制转换对话框的动画类型 */ @Override public void show() { show(AnimType.BOTTOM_2_TOP); } /** * 显示对话框,强制转换对话框的动画类型 * * @param animType */ @Override public void show(@AnimType int animType) { super.show(AnimType.BOTTOM_2_TOP); parentView.setBackgroundColor(backgroundColor); if (rootView != null && inAnimSet != null) { inAnimSet.duration(duration).playOn(rootView); } } @Override public void dismiss() { super.dismiss(); new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); parentView.setBackgroundColor(0); } }.sendEmptyMessageDelayed(100, duration); if (rootView != null && outAnimSet != null) { outAnimSet.duration(duration).playOn(rootView); } } private final class WindowsInAs extends BaseAnimatorSet { @Override public void setAnimation(View view) { ObjectAnimator rotationX = ObjectAnimator.ofFloat(view, "rotationX", 10, 0f).setDuration(150); rotationX.setStartDelay(200); animatorSet.playTogether( ObjectAnimator.ofFloat(view, "scaleX", 1.0f, 0.8f).setDuration(350), ObjectAnimator.ofFloat(view, "scaleY", 1.0f, 0.8f).setDuration(350), ObjectAnimator.ofFloat(view, "rotationX", 0f, 10).setDuration(200), rotationX, ObjectAnimator.ofFloat(view, "translationY", 0, -0.1f * displayMetrics.heightPixels).setDuration(350) ); } } private final class WindowsOutAs extends BaseAnimatorSet { @Override public void setAnimation(View view) { ObjectAnimator rotationX = ObjectAnimator.ofFloat(view, "rotationX", 10, 0f).setDuration(150); rotationX.setStartDelay(200); animatorSet.playTogether( ObjectAnimator.ofFloat(view, "scaleX", 0.8f, 1.0f).setDuration(350), ObjectAnimator.ofFloat(view, "scaleY", 0.8f, 1.0f).setDuration(350), ObjectAnimator.ofFloat(view, "rotationX", 0f, 10).setDuration(200), rotationX, ObjectAnimator.ofFloat(view, "translationY", -0.1f * displayMetrics.heightPixels, 0).setDuration(350) ); } } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/dialog/base/Top2BottomDialog.java ================================================ package com.alex.dialogdemo.dialog.base; import android.content.Context; import com.alex.dialogdemo.R; import org.alex.dialog.annotation.AnimType; /** * 作者:Alex * 时间:2016/12/7 13 27 * 简述: */ public abstract class Top2BottomDialog extends SimpleDialog { public Top2BottomDialog(Context context) { super(context, R.style.alex_dialog_base_light_style); } /** * 显示对话框,无动画 */ @Override public void show() { show(AnimType.TOP_2_BOTTOM); } /** * 显示对话框,强制转换对话框的动画类型 * * @param animType */ @Override public void show(@AnimType int animType) { super.show(animType); } } ================================================ FILE: app/src/main/java/com/alex/dialogdemo/ui/MainActivity.java ================================================ package com.alex.dialogdemo.ui; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.Window; import com.alex.dialogdemo.R; import com.alex.dialogdemo.dialog.BottomDialog; import com.alex.dialogdemo.dialog.LoadingDialog; import com.alex.dialogdemo.dialog.NoticeDialog; import com.alex.dialogdemo.dialog.OneButtonDialog; import com.alex.dialogdemo.dialog.SelectedProductDialog; import com.alex.dialogdemo.dialog.base.SimpleDialog; import org.alex.dialog.annotation.ClickPosition; import org.alex.dialog.callback.OnDialogClickListener; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private LoadingDialog loadingDialog; private NoticeDialog noticeDialog; private OneButtonDialog oneButtonDialog; private SelectedProductDialog selectedProductDialog; private BottomDialog bottomDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { MyOnDialogClickListener onDialogClickListener = new MyOnDialogClickListener(); loadingDialog = new LoadingDialog(this); noticeDialog = new NoticeDialog(this).setOnDialogClickListener(onDialogClickListener); bottomDialog = new BottomDialog(this).setOnDialogClickListener(onDialogClickListener); oneButtonDialog = new OneButtonDialog(this).setOnDialogClickListener(onDialogClickListener); selectedProductDialog = new SelectedProductDialog(this, findViewById(Window.ID_ANDROID_CONTENT)).setOnDialogClickListener(onDialogClickListener); findViewById(R.id.bt_1).setOnClickListener(this); findViewById(R.id.bt_2).setOnClickListener(this); findViewById(R.id.bt_3).setOnClickListener(this); findViewById(R.id.bt_4).setOnClickListener(this); findViewById(R.id.bt_5).setOnClickListener(this); } @Override public void onClick(View view) { if (R.id.bt_1 == view.getId()) { loadingDialog.show(); } else if (R.id.bt_2 == view.getId()) { noticeDialog.show(); } else if (R.id.bt_3 == view.getId()) { selectedProductDialog.show(); } else if (R.id.bt_4 == view.getId()) { bottomDialog.show(); } else if (R.id.bt_5 == view.getId()) { oneButtonDialog.show(); } } private final class MyOnDialogClickListener implements OnDialogClickListener { @Override public void onDialogClick(SimpleDialog dialog, @ClickPosition String clickPosition) { //LogUtil.e("tag = " + dialog.tag + " clickPosition =" + clickPosition); dialog.dismiss(); } } @Override protected void onDestroy() { super.onDestroy(); if (loadingDialog != null) { loadingDialog.destody(); } loadingDialog = null; if (noticeDialog != null) { noticeDialog.destody(); } noticeDialog = null; if (oneButtonDialog != null) { oneButtonDialog.destody(); } oneButtonDialog = null; if (selectedProductDialog != null) { selectedProductDialog.destody(); } selectedProductDialog = null; if(bottomDialog!=null){ bottomDialog.destody(); } bottomDialog = null; } } ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_bottom2top_in.xml ================================================ ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_bottom2top_out.xml ================================================ ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_fade_in.xml ================================================ ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_fade_out.xml ================================================ ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_scale_in.xml ================================================ ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_scale_out.xml ================================================ ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_top2bottom_in.xml ================================================ ================================================ FILE: app/src/main/res/anim/alex_dialog_anim_top2bottom_out.xml ================================================ ================================================ FILE: app/src/main/res/drawable/alex_dialog_layer_list_shadow_rectangle.xml ================================================ ================================================ FILE: app/src/main/res/drawable/layer_list_shadow_dialog_one_button.xml ================================================ ================================================ FILE: app/src/main/res/drawable/layer_list_shadow_rectangle.xml ================================================ ================================================ FILE: app/src/main/res/drawable/selector_dialog_one_button_submit.xml ================================================ ================================================ FILE: app/src/main/res/layout/activity_main.xml ================================================