How to make pdf book app using recyclerview in android studio
Recyclerview is look like list view but its much better than list view because it is use in a lots of application like Facebook, Instagram, twitter etc. we have many method to convert PDF in to app.
PDF file is beneficial for user to read easily. If we can use PDF URL in our app. Our app size is 3 to 5 MB but if we can use pdf files than our app size is increase because pdf library size is 20 MB.
In this app we can developed splash screen, navigation drawer and pdf files show in recycler view, apply ads in app and at the end we can change the icon of app. so this tutorial is for those developer who cannot know how to make complete app for play store.
Steps
- Add dependencies in build.gradule. its very import so don’t miss this step.
- Make icon for app which is also very import for app.
- Create admob account than apply for adsense because without admob you cannot earn money from app.
- Make image for splash screen.
- Upload pdf files on google drive than copy the link of that urls these urls are used in app.
Code
Add Dependencies in Build.Gradule
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.google.android.gms:play-services-ads:12.0.0'
implementation 'com.android.support:design:28.0.0'
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.niazi.pdfbookapp">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/icon_image"
android:label="@string/app_name"
android:roundIcon="@mipmap/icon_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".About" android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"></activity>
<activity
android:name=".FullView"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" />
<activity
android:name=".MainActivity"
android:label="Book App" />
<activity
android:name=".SplashScreen"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
SplashScreen.java
import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class SplashScreen extends AppCompatActivity {
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_splash_screen );
handler=new Handler ( );
handler.postDelayed ( new Runnable () {
@Override
public void run() {
Intent intent=new Intent ( SplashScreen.this,MainActivity.class );
startActivity ( intent );
finish ();
}
},3000 );
}
}
activity_splash_screen.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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical"
tools:context=".SplashScreen">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="RRB GROUP D NTPC"
android:textColor="@android:color/black"
android:textSize="28dp"
android:textStyle="bold" />
</LinearLayout>
menu_item.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@id/home" android:title="Home"> </item>
<item android:id="@+id/more" android:title="More App"> </item>
<item android:id="@+id/about" android:title="About"></item>
</menu>
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#D81B60</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="back" >#324918</color>
</resources>
navbar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:background="@color/back"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="280dp">
<ImageView
android:background="@drawable/splash"
android:layout_gravity="center"
android:layout_width="180dp"
android:layout_height="160dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="RRB GROUP D NTPC"
android:textColor="@android:color/white"
android:textSize="28dp"
android:textStyle="bold"
/>
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
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"
android:orientation="vertical"
android:id="@+id/drawer"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/RecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
</RelativeLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:headerLayout="@layout/navbar"
android:layout_gravity="start"
app:menu="@menu/menu_item">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
MainActivity.java
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
public class MainActivity extends AppCompatActivity {
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
RecyclerView recyclerView;
CustomAdapter customAdapter;
String []urls;
String []titles;
private AdView mAdView;
@Override
public void onBackPressed() {
super.onBackPressed();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(RecyclerView )findViewById ( R.id.RecyclerView );
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
urls=new String[]{
"link 1",
"link 2",
"link 3",
};
titles=new String[]{
"Title 1 ",
"Title 2",
"Title 3 "
};
customAdapter=new CustomAdapter ( this,titles,urls );
recyclerView.setLayoutManager ( new LinearLayoutManager ( this ) );
recyclerView.setAdapter ( customAdapter );
drawerLayout=(DrawerLayout)findViewById(R.id.drawer);
NavigationView navigationView=( NavigationView )findViewById(R.id.nav_view);
actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.Open,R.string.Close);
actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
actionBarDrawerToggle.syncState();
drawerLayout.addDrawerListener(actionBarDrawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener()
{
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id=menuItem.getItemId();
if(id==R.id.home)
{
Toast.makeText(MainActivity.this,"Home",Toast.LENGTH_LONG).show();
}
else if (id==R.id.more)
{
final String appPackageName="com.niazi.pdfbookapp"; // getPackageName() from Context or Activity object
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
}
else if (id==R.id.about)
{
Intent intent=new Intent ( MainActivity.this, About.class );
startActivity ( intent);
}
return true;
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return actionBarDrawerToggle.onOptionsItemSelected(item)|| super.onOptionsItemSelected(item) ;
}
}
Part 1 Video Complete now. this is video help you to learn this code kindly watch this video.
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_marginTop="20dp"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/linear"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_margin="20dp"
android:background="@drawable/splash"
android:layout_width="100dp"
android:layout_height="100dp"
/>
<TextView
android:id="@+id/titles"
android:textColor="@android:color/black"
android:textSize="20dp"
android:text="Hey Here is title"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
CustomAdapter.java
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomHolder>
{
Context context;
String []title;
String [] urlLink;
public CustomAdapter(Context context, String[] title, String[] urlLink) {
this.context = context;
this.title = title;
this.urlLink = urlLink;
}
@NonNull
@Override
public CustomHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view= LayoutInflater.from ( context ).inflate ( R.layout.list_item,viewGroup,false );
return new CustomHolder ( view );
}
@Override
public void onBindViewHolder(@NonNull CustomHolder customHolder, int i)
{
String title1= title[i];
final String urls=urlLink[i];
customHolder.textView.setText ( title1 );
customHolder.linearLayout.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
Intent intent =new Intent ( context,FullView.class );
intent.putExtra ( "url",urls );
context.startActivity ( intent );
}
} );
}
@Override
public int getItemCount() {
return title.length;
}
class CustomHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView;
LinearLayout linearLayout;
public CustomHolder(@NonNull View itemView) {
super ( itemView );
linearLayout=(LinearLayout ) itemView.findViewById ( R.id.linear );
imageView=(ImageView) itemView.findViewById ( R.id.image );
textView=(TextView) itemView.findViewById ( R.id.titles );
}
}
}
activity_full_view.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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=".FullView">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
</android.support.constraint.ConstraintLayout>
FullView.java
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Toast;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
public class FullView extends AppCompatActivity {
WebView webView;
private InterstitialAd mInterstitialAd;
@Override
public void onBackPressed() {
super.onBackPressed ();
IntertitialAd();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_full_view );
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
Intent intent= getIntent ();
String url=intent.getStringExtra ( "url" );
webView=(WebView) findViewById ( R.id.webview );
WebSettings webSettings=webView.getSettings ();
webSettings.setJavaScriptEnabled ( true );
webView.loadUrl ( url );
}
void IntertitialAd()
{
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
}
}
}
Part 2 & 3 is Complete now. this is video help you to learn this code kindly watch this video.
How to put ads in recyclerview. This tutorial help us so kindly watch this video.
activity_about.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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center"
tools:context=".About">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:background="@drawable/splash"
/>
<TextView
android:layout_marginTop="20dp"
android:textStyle="bold"
android:textSize="20dp"
android:textColor="@android:color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" RRB GROUP D NTPC"
/>
<TextView
android:layout_marginTop="20dp"
android:textStyle="bold"
android:textSize="16dp"
android:textColor="@android:color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Verision 1.0"
/>
<LinearLayout
android:layout_marginTop="20dp"
android:gravity="center"
android:layout_gravity="center"
android:background="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:gravity="center"
android:textStyle="bold"
android:textSize="16dp"
android:textColor="@android:color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Visit My Website www.bsprogram.com"
/>
</LinearLayout>
</LinearLayout>
About.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class About extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_about );
}
}
