Android How To Create Popup Dialog Warning
1. Project Structure
2. Gradle
apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "dialog.androidtutorials.fyprojects.warning" minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:support-v13:27.1.1' implementation 'com.wdullaer:materialdatetimepicker:3.2.0' // date & time picker }
3. Main Activity
package dialog.androidtutorials.fyprojects.warning.activity; import android.app.Dialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.AppCompatButton; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Toast; import dialog.androidtutorials.fyprojects.warning.utils.Tools; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initToolbar(); ((AppCompatButton) findViewById(R.id.custom_dialog)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showCustomDialog(); } }); showCustomDialog(); } private void initToolbar() { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.ic_menu); setSupportActionBar(toolbar); getSupportActionBar().setTitle("Custom Warning"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); Tools.setSystemBarColor(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search_setting, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); } else { Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show(); } return super.onOptionsItemSelected(item); } private void showCustomDialog() { final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // before dialog.setContentView(R.layout.dialog_warning); dialog.setCancelable(true); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.copyFrom(dialog.getWindow().getAttributes()); lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; ((AppCompatButton) dialog.findViewById(R.id.bt_close)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), ((AppCompatButton) v).getText().toString() + " Clicked", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); dialog.show(); dialog.getWindow().setAttributes(lp); } }
4. Utils
Tools package dialog.androidtutorials.fyprojects.Info.utils; import android.app.Activity; import android.os.Build; import android.view.Window; import android.view.WindowManager; import java.text.SimpleDateFormat; import java.util.Date; import dialog.androidtutorials.fyprojects.Info.activity.R; public class Tools { public static void setSystemBarColor(Activity act) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = act.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(act.getResources().getColor(R.color.colorPrimaryDark)); } } public static String getFormattedTimeEvent(Long time) { SimpleDateFormat newFormat = new SimpleDateFormat("h:mm a"); return newFormat.format(new Date(time)); } public static String getFormattedDateEvent(Long dateTime) { SimpleDateFormat newFormat = new SimpleDateFormat("EEE, MMM dd yyyy"); return newFormat.format(new Date(dateTime)); } }
5. Layout
activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:fitsSystemWindows="true" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <include layout="@layout/toolbar" /> </android.support.design.widget.AppBarLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.AppCompatButton android:id="@+id/custom_dialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" style="@style/Widget.AppCompat.Button.Borderless" android:background="@drawable/btn_rounded_accent" android:paddingLeft="@dimen/spacing_xlarge" android:paddingRight="@dimen/spacing_xlarge" android:text="SHOW DIALOG" android:textColor="@android:color/white" /> </RelativeLayout> </LinearLayout>
dialog_warning.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="260dp" android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/red_300" android:gravity="center" android:minHeight="120dp" android:orientation="vertical" android:padding="@dimen/spacing_mlarge"> <ImageView android:id="@+id/icon" android:layout_width="80dp" android:layout_height="80dp" android:tint="@android:color/white" app:srcCompat="@drawable/ic_cloud_off" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_middle" android:text="No internet !" android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textColor="@android:color/white" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical|start" android:orientation="vertical" android:padding="@dimen/spacing_mlarge"> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" android:text="@string/short_lorem_ipsum" android:textAlignment="center" android:textAppearance="@style/TextAppearance.AppCompat.Subhead" android:textColor="@color/grey_60" /> </LinearLayout> <LinearLayout android:id="@+id/lyt_action" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/spacing_large" android:gravity="center" android:orientation="horizontal"> <android.support.v7.widget.AppCompatButton android:id="@+id/bt_close" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/Widget.AppCompat.Button.Borderless" android:background="@drawable/btn_rounded_red" android:paddingLeft="@dimen/spacing_mlarge" android:paddingRight="@dimen/spacing_mlarge" android:text="Retry" android:textColor="@android:color/white" /> </LinearLayout> </LinearLayout>
toolbar.xml <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:contentInsetStartWithNavigation="0dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
6. Values
colors.xml <?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#1976D2</color> <color name="colorPrimaryDark">#1565C0</color> <color name="colorPrimaryLight">#1E88E5</color> <color name="colorAccent">#FF4081</color> <color name="colorAccentDark">#F50057</color> <color name="colorAccentLight">#FF80AB</color> <color name="light_green_600">#7CB342</color> <color name="overlay_light_80">#CCFFFFFF</color> <color name="grey_10">#e6e6e6</color> <color name="grey_20">#cccccc</color> <color name="grey_40">#999999</color> <color name="grey_60">#666666</color> <color name="grey_80">#37474F</color> <color name="grey_90">#263238</color> <color name="red_300">#E57373</color> <color name="red_400">#EF5350</color> </resources>
dimens.xml <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="actionBarSize">56dp</dimen> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="nav_header_vertical_spacing">16dp</dimen> <dimen name="nav_header_height">200dp</dimen> <dimen name="fab_margin">16dp</dimen> <dimen name="viewpager_margin_overlap">-60dp</dimen> <dimen name="viewpager_margin_overlap_payment">-30dp</dimen> <!--genaral spacing--> <dimen name="spacing_xsmall">2dp</dimen> <dimen name="spacing_small">3dp</dimen> <dimen name="spacing_medium">5dp</dimen> <dimen name="spacing_xmedium">7dp</dimen> <dimen name="spacing_middle">10dp</dimen> <dimen name="spacing_large">15dp</dimen> <dimen name="spacing_smlarge">18dp</dimen> <dimen name="spacing_mlarge">20dp</dimen> <dimen name="spacing_mxlarge">25dp</dimen> <dimen name="spacing_xlarge">35dp</dimen> <dimen name="spacing_xmlarge">40dp</dimen> <dimen name="spacing_xxlarge">50dp</dimen> <dimen name="spacing_xxxlarge">55dp</dimen> <dimen name="appbar_padding_top">8dp</dimen> <dimen name="letter_tile_size">32dp</dimen> </resources>
strings.xml <resources> <string name="app_name">Dialog Custom</string> <string name="middle_lorem_ipsum">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam efficitur ipsum in placerat molestie. Fusce quis mauris a enim sollicitudin</string> <string name="AGREE">AGREE</string> <string name="DISAGREE">DISAGREE</string> <string name="DISCARD">DISCARD</string> <string name="CANCEL">CANCEL</string> <string name="OK">OK</string> <string name="SAVE">SAVE</string> <string name="short_lorem_ipsum">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</string> </resources>
styles.xml <resources> <style name="AppTheme" parent="BaseTheme" /> <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="windowActionModeOverlay">true</item> </style> <style name="Button.Accent" parent="@style/Widget.AppCompat.Button.Colored"> <item name="colorButtonNormal">@color/colorAccent</item> <item name="android:textColor">@android:color/white</item> </style> </resources>