iMate Dating Android Template

Create the hottest dating app on the Play Store.

Dating apps are blowing up.  Ask any single person with a pulse (and an Android phone) where they look for dates, and the answer will be Tinder, OKCupid or one of the other popular dating apps. But Tinder wasn’t the first dating app.  It probably wasn’t even in the first 100 dating apps. So how did it take off? Awesome design and usability.  That’s the difference between it and everything else.  And awesome design and usability is the difference between our iMate Dating app template and anything else out there.

We have amazing slick UI, combined with effortless animations (swipe to like) and top notch modern, native Java code. It’s ready and waiting to customise into your killer dating app. The clean UI you can see in the app template just needs to be hooked into your platform backend.

What’s included in this download

  • Working, Sample .apk Project Download
  • Native Java code that builds in Android Studio View Code
  • Original layered Adobe Photoshop .psd files you can edit
  • 25+ Sliced .png files
  • Extensive Documentation Download
myapptemplates iMate Dating Android Template

Create the hottest dating app on the Play Store. Dating apps are blowing up.  Ask any single person with a pulse (and an Android phone) where they look for dates, and the answer will be Tinder, OKCupid or one of the other popular dating apps. But Tinder wasn’t the first dating app.  It probably wasn’t even […]

  • License Details
  • Android Sample Project
  • .PNG Artwork
  • .PSD Files
  • Android 7 Nougat Optimized
  • XHDPI Support
  • Ready to run on Android Studio

Want this template customized?

If you want a finished dating app ready for the Appstore or Google Play store we can help! We have partnered one of the best developers to help you build out your dating app efficiently.




Our iOS and Android app templates are a perfect place to start building awesome apps. Get a functional native code base, eye-catching beautiful artwork with excellent UX, icon artwork and documentation. Make your app so beautiful it can't be ignored

Splash Screen

Register/Social login screen

Slide Menu with profile detail

Detailed Profile ‘Card’ view with swipe to like

Beautiful Match screen

Intricate Match Profile view

Chat view

Elements screen, with cool custom UI elements

Code Snippet

package com.imate;

import java.util.ArrayList;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager.OnBackStackChangedListener;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import com.imate.custom.CustomActivity;
import com.imate.model.Data;
import com.imate.ui.Chat;
import com.imate.ui.FindMatch;
import com.imate.ui.LeftNavAdapter;
import com.imate.ui.MainFragment;
import com.imate.ui.Match;
import com.imate.ui.Profile;
import com.imate.ui.RightNavAdapter;
import com.imate.ui.Settings;

/**
 * The Class MainActivity is the base activity class of the application. This
 * activity is launched after the Login and it holds all the Fragments used in
 * the app. It also creates the Navigation Drawers on left and right side.
 */
public class MainActivity extends CustomActivity
{

	/** The drawer layout. */
	private DrawerLayout drawerLayout;

	/** ListView for left side drawer. */
	private ListView drawerLeft;

	/** ListView for right side drawer. */
	private ListView drawerRight;

	/** The drawer toggle. */
	private ActionBarDrawerToggle drawerToggle;

	/** The left navigation list adapter. */
	private LeftNavAdapter adapter;

	/* (non-Javadoc)
	 * @see com.newsfeeder.custom.CustomActivity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		setupDrawer();
		setupContainer();
	}

	/**
	 * Setup the drawer layout. This method also includes the method calls for
	 * setting up the Left & Right side drawers.
	 */
	private void setupDrawer()
	{
		drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		drawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
				GravityCompat.START);
		drawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
				R.drawable.ic_drawer, R.string.drawer_open,
				R.string.drawer_close) {
			@Override
			public void onDrawerClosed(View view)
			{
				setActionBarTitle();
				invalidateOptionsMenu();
			}

			@Override
			public void onDrawerOpened(View drawerView)
			{
				setActionBarTitle();
				invalidateOptionsMenu();
			}
		};
		drawerLayout.setDrawerListener(drawerToggle);
		drawerLayout.closeDrawers();

		setupLeftNavDrawer();
		setupRightNavDrawer();
	}

	/**
	 * Setup the left navigation drawer/slider. You can add your logic to load
	 * the contents to be displayed on the left side drawer. It will also setup
	 * the Header and Footer contents of left drawer. This method also apply the
	 * Theme for components of Left drawer.
	 */
	private void setupLeftNavDrawer()
	{
		drawerLeft = (ListView) findViewById(R.id.left_drawer);

		View header = getLayoutInflater().inflate(R.layout.left_nav_header,
				null);
		drawerLeft.addHeaderView(header);

		adapter = new LeftNavAdapter(this, getResources().getStringArray(
				R.array.arr_left_nav_list));
		drawerLeft.setAdapter(adapter);
		drawerLeft.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
					long arg3)
			{
				drawerLayout.closeDrawers();
				if (pos != 0)
					launchFragment(pos - 1);
				else
					launchFragment(-2);

			}
		});

	}

	/**
	 * Setup the right navigation drawer/slider. You can add your logic to load
	 * the contents to be displayed on the right side drawer. It will also setup
	 * the Header contents of right drawer.
	 */
	private void setupRightNavDrawer()
	{
		drawerRight = (ListView) findViewById(R.id.right_drawer);

		View header = getLayoutInflater().inflate(R.layout.rigth_nav_header,
				null);
		header.setClickable(true);
		drawerRight.addHeaderView(header);

		ArrayList<Data> al = new ArrayList<Data>();
		al.add(new Data("Emely", R.drawable.img_f1));
		al.add(new Data("John", R.drawable.img_f2));
		al.add(new Data("Aaliyah", R.drawable.img_f3));
		al.add(new Data("Valentina", R.drawable.img_f4));
		al.add(new Data("Barbara", R.drawable.img_f5));

		ArrayList<Data> al1 = new ArrayList<Data>(al);
		al1.addAll(al);
		al1.addAll(al);
		al1.addAll(al);

		drawerRight.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id)
			{
				drawerLayout.closeDrawers();
				launchFragment(1);
			}
		});
		drawerRight.setAdapter(new RightNavAdapter(this, al1));
	}

	/**
	 * Setup the container fragment for drawer layout. This method will setup
	 * the grid view display of main contents. You can customize this method as
	 * per your need to display specific content.
	 */
	private void setupContainer()
	{
		getSupportFragmentManager().addOnBackStackChangedListener(
				new OnBackStackChangedListener() {

					@Override
					public void onBackStackChanged()
					{
						setActionBarTitle();
					}
				});
		launchFragment(0);
	}

	/**
	 * This method can be used to attach Fragment on activity view for a
	 * particular tab position. You can customize this method as per your need.
	 * 
	 * @param pos
	 *            the position of tab selected.
	 */
	public void launchFragment(int pos)
	{
		Fragment f = null;
		String title = null;
		if (pos == -1)
		{
			title = "Your Match";
			f = new Match();
		}
		else if (pos == -2)
		{
			title = "Profile";
			f = new Profile();
		}
		else if (pos == 0)
		{
			title = "Home";
			f = new MainFragment();
		}
		else if (pos == 1)
		{
			title = "Chat with Nikita";
			f = new Chat();
		}
		else if (pos == 2)
		{
			title = "Find Match";
			f = new FindMatch();
		}
		else if (pos == 3)
		{
			title = "Settings";
			f = new Settings();
		}

		if (f != null)
		{
			while (getSupportFragmentManager().getBackStackEntryCount() > 0)
			{
				getSupportFragmentManager().popBackStackImmediate();
			}
			getSupportFragmentManager().beginTransaction()
					.replace(R.id.content_frame, f).addToBackStack(title)
					.commit();
			if (adapter != null && pos >= 0)
				adapter.setSelection(pos);
		}
	}

	/**
	 * Set the action bar title text.
	 */
	private void setActionBarTitle()
	{
		if (drawerLayout.isDrawerOpen(drawerLeft))
		{
			getActionBar().setTitle("Main Menu");
			return;
		}
		if (drawerLayout.isDrawerOpen(drawerRight))
		{
			getActionBar().setTitle(R.string.all_matches);
			return;
		}

		if (getSupportFragmentManager().getBackStackEntryCount() == 0)
			return;
		String title = getSupportFragmentManager().getBackStackEntryAt(
				getSupportFragmentManager().getBackStackEntryCount() - 1)
				.getName();
		getActionBar().setTitle(title);
		// getActionBar().setLogo(R.drawable.icon);
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onPostCreate(android.os.Bundle)
	 */
	@Override
	protected void onPostCreate(Bundle savedInstanceState)
	{
		super.onPostCreate(savedInstanceState);
		// Sync the toggle state after onRestoreInstanceState has occurred.
		drawerToggle.syncState();
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onConfigurationChanged(android.content.res.Configuration)
	 */
	@Override
	public void onConfigurationChanged(Configuration newConfig)
	{
		super.onConfigurationChanged(newConfig);
		// Pass any configuration change to the drawer toggle
		drawerToggle.onConfigurationChanged(newConfig);
	}

	/* (non-Javadoc)
	 * @see com.newsfeeder.custom.CustomActivity#onCreateOptionsMenu(android.view.Menu)
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		super.onCreateOptionsMenu(menu);
		if (drawerLayout.isDrawerOpen(drawerLeft)
				|| drawerLayout.isDrawerOpen(drawerRight))
			menu.findItem(R.id.menu_chat).setVisible(false);
		else if (drawerLayout.isDrawerOpen(drawerRight))
			menu.findItem(R.id.menu_edit).setVisible(true);

		return true;
	}

	/* Called whenever we call invalidateOptionsMenu() */
	/* (non-Javadoc)
	 * @see android.app.Activity#onPrepareOptionsMenu(android.view.Menu)
	 */
	@Override
	public boolean onPrepareOptionsMenu(Menu menu)
	{
		// If the nav drawer is open, hide action items related to the content
		// view
		// boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
		// menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
		return super.onPrepareOptionsMenu(menu);
	}

	/* (non-Javadoc)
	 * @see com.newsfeeder.custom.CustomActivity#onOptionsItemSelected(android.view.MenuItem)
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		if (item.getItemId() == android.R.id.home
				&& drawerLayout.isDrawerOpen(drawerRight))
		{
			drawerLayout.closeDrawer(drawerRight);
			return true;
		}
		if (drawerToggle.onOptionsItemSelected(item))
		{
			drawerLayout.closeDrawer(drawerRight);
			return true;
		}

		if (item.getItemId() == R.id.menu_chat)
		{
			drawerLayout.closeDrawer(drawerLeft);
			if (!drawerLayout.isDrawerOpen(drawerRight))
				drawerLayout.openDrawer(drawerRight);
			else
				drawerLayout.closeDrawer(drawerRight);
		}
		return super.onOptionsItemSelected(item);
	}

	/* (non-Javadoc)
	 * @see android.support.v4.app.FragmentActivity#onKeyDown(int, android.view.KeyEvent)
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event)
	{
		if (keyCode == KeyEvent.KEYCODE_BACK)
		{
			if (getSupportFragmentManager().getBackStackEntryCount() > 1)
			{
				getSupportFragmentManager().popBackStackImmediate();
			}
			else
				finish();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
}

Template Benefits

  • Android 7 Nougat ready
  • Beautiful, minimal design with excellent UX flow
  • Ready to build and customise right away in Android Studio
  • Prebuilt functionality saves you hundreds of hours of designing, programming, and testing
  • Adheres to Android Design Guidelines for easier app approval
  • The easiest way to create your own app!