Android Create popup Dialog Add Post

Android Create popup Dialog Add Post


1. Project Structure


2. Gradle

plugins {

   id 'com.android.application'

}


android {

   compileSdkVersion 30

   buildToolsVersion "30.0.3"

 
   defaultConfig {

       applicationId "com.example.addpost"

       minSdkVersion 19

       targetSdkVersion 30

       versionCode 1

       versionName "1.0"

       testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

   }

 
   buildTypes {

       release {

           minifyEnabled false

           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

       }

   }

   compileOptions {

       sourceCompatibility JavaVersion.VERSION_1_8

       targetCompatibility JavaVersion.VERSION_1_8

   }

}

 
dependencies {

   implementation 'com.mikhaellopez:circularimageview:4.3.0'

   implementation 'androidx.appcompat:appcompat:1.3.0'

   implementation 'com.google.android.material:material:1.4.0'

   implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

   testImplementation 'junit:junit:4.+'

   androidTestImplementation 'androidx.test.ext:junit:1.1.3'

   androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

}


3. Main Activity

package com.example.addpost;

import android.app.Dialog;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;


import com.example.addpost.R;

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);


      initComponent();
  }

  private void initComponent() {
      ((FloatingActionButton) findViewById(R.id.buttonAdd)).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              showCustomDialog();
          }
      });
  }

  private void showCustomDialog() {
      final Dialog dialog = new Dialog(this);
      dialog.setContentView(R.layout.dialog_post);
      dialog.setCancelable(true);

      WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
      lp.copyFrom(dialog.getWindow().getAttributes());
      lp.width = WindowManager.LayoutParams.MATCH_PARENT;
      lp.height = WindowManager.LayoutParams.MATCH_PARENT;

      final AppCompatButton buttonPost = (AppCompatButton) dialog.findViewById(R.id.buttonPost);
      ((EditText) dialog.findViewById(R.id.editTextPost)).addTextChangedListener(new TextWatcher() {
          @Override
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {

          }

          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) {
              buttonPost.setEnabled(!s.toString().trim().isEmpty());
          }

          @Override
          public void afterTextChanged(Editable s) {

          }
      });

      buttonPost.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              dialog.dismiss();
              Toast.makeText(getApplicationContext(), "Post Submitted", Toast.LENGTH_SHORT).show();
          }
      });

      ((ImageButton) dialog.findViewById(R.id.buttonPhoto)).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(getApplicationContext(), "Post Photo Clicked", Toast.LENGTH_SHORT).show();
          }
      });

      ((ImageButton) dialog.findViewById(R.id.buttonLink)).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(getApplicationContext(), "Post Link Clicked", Toast.LENGTH_SHORT).show();
          }
      });

      ((ImageButton) dialog.findViewById(R.id.buttonFile)).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(getApplicationContext(), "Post File Clicked", Toast.LENGTH_SHORT).show();
          }
      });

      ((ImageButton) dialog.findViewById(R.id.buttonSetting)).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(getApplicationContext(), "Post Setting Clicked", Toast.LENGTH_SHORT).show();
          }
      });

      dialog.show();
      dialog.getWindow().setAttributes(lp);
  }

}


4. Layout

<?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"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity">

  <androidx.coordinatorlayout.widget.CoordinatorLayout
      android:id="@+id/coordinator_layout"
      android:layout_width="match_parent"
      android:layout_height="match_parent">

      <RelativeLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent">

          <TextView
              android:id="@+id/textViewCreate"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerInParent="true"
              android:text="Create new post here"
              android:textSize="20dp" />

      </RelativeLayout>

      <com.google.android.material.floatingactionbutton.FloatingActionButton
          android:id="@+id/buttonAdd"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="bottom|end|right"
          android:layout_margin="10dp"
          android:clickable="true"
          android:tint="@color/white"
          app:fabSize="normal"
          app:rippleColor="@color/white"
          app:srcCompat="@drawable/ic_create" />

  </androidx.coordinatorlayout.widget.CoordinatorLayout>

</LinearLayout>



<?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="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:paddingTop="10dp">

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="center_vertical"
      android:orientation="horizontal"
      android:padding="20dp">

      <com.mikhaellopez.circularimageview.CircularImageView
          android:layout_width="50dp"
          android:layout_height="50dp"
          android:src="@drawable/photo_male_8"
          app:civ_shadow="true"
          app:civ_shadow_radius="0dp"
          app:civ_border="false" />

      <View
          android:layout_width="15dp"
          android:layout_height="0dp" />

      <LinearLayout
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:orientation="vertical">

          <TextView
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:gravity="center_vertical"
              android:text="Gol D Roger"
              android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
              android:textColor="@color/black"
              android:textStyle="bold" />

          <LinearLayout
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginTop="3dp"
              android:gravity="center_vertical">

              <ImageView
                  android:layout_width="20dp"
                  android:layout_height="20dp"
                  android:tint="@color/blue"
                  app:srcCompat="@drawable/ic_public" />

              <View
                  android:layout_width="3dp"
                  android:layout_height="0dp" />

              <TextView
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Public"
                  android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
                  android:textColor="@color/blue"
                  android:textStyle="bold" />

          </LinearLayout>

      </LinearLayout>

      <androidx.appcompat.widget.AppCompatButton
          android:id="@+id/buttonPost"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:enabled="false"
          android:gravity="center"
          android:minWidth="0dp"
          android:paddingLeft="15dp"
          android:paddingRight="15dp"
          android:text="Post" />

  </LinearLayout>

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_weight="1">

      <EditText
          android:id="@+id/editTextPost"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@color/transparant"
          android:gravity="top"
          android:hint="Write something"
          android:padding="15dp"
          android:textSize="14dp" />

  </LinearLayout>

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="?attr/actionBarSize"
      android:background="@color/white"
      android:orientation="horizontal">

      <ImageButton
          android:id="@+id/buttonPhoto"
          android:layout_width="?attr/actionBarSize"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/selectableItemBackgroundBorderless"
          android:tint="@color/black"
          app:srcCompat="@drawable/ic_photo_camera" />

      <ImageButton
          android:id="@+id/buttonLink"
          android:layout_width="?attr/actionBarSize"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/selectableItemBackgroundBorderless"
          android:tint="@color/black"
          app:srcCompat="@drawable/ic_insert_link" />

      <ImageButton
          android:id="@+id/buttonFile"
          android:layout_width="?attr/actionBarSize"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/selectableItemBackgroundBorderless"
          android:tint="@color/black"
          app:srcCompat="@drawable/ic_description" />

      <View
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:layout_weight="1" />

      <ImageButton
          android:id="@+id/buttonSetting"
          android:layout_width="?attr/actionBarSize"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/selectableItemBackgroundBorderless"
          android:tint="@color/black"
          app:srcCompat="@drawable/ic_more_vert" />

  </LinearLayout>

</LinearLayout>


5. Values

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="purple_200">#FFBB86FC</color>
  <color name="purple_500">#FF6200EE</color>
  <color name="purple_700">#FF3700B3</color>
  <color name="teal_200">#FF03DAC5</color>
  <color name="teal_700">#FF018786</color>
  <color name="black">#FF000000</color>
  <color name="white">#FFFFFFFF</color>

  <color name="transparant">#FFFFGGGG</color>
  <color name="blue">#0384FC</color>
</resources>