Tutorial Membuat Aplikasi Android PDF Reader Dengan Android Studio
Konsep aplikasi :
- ListView sebagai menu utama
- Setiap menu item akan membuka file pdf dari folder assets
- Double tap back button untuk exit aplikasi
Ok, kita mulai
Siapkan 3 dokumen PDF dengan ukuran file kecil agar ukuran apk tidak terlalu besar. Untuk file PDF yang ukurannya besar dapat di compress di sini "iLovePDF
1. Buka android studio dan buat project baru, sesuaikan nama package sesuai keinginan
2. Di folder app>main buat folder assets dan tempatkan 3 file pdf yang sudah disipkan tadi. Dalam project ini saya namai dengan: sample_1.pdf, sample_2.pdf, sample_3.pdf
3. Buka Gradle Scripts>build:gradle (Module:app)
masukkan code berikut:
compile 'com.github.barteksc:android-pdf-viewer:2.8.2'
lanjutkan dengan melakukan sinkronisasi gradle dengan menekan Sync Now
4. Selanjutnya pada folder app>java>[com.nama.package] buat dua fragment berinama masing-masing: ListFragment.java dan Sample_pdfFragment.java dan copy code berikut:
package com.kuakeikecil.pdfreader;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
/**
* A simple {@link Fragment} subclass.
*/
public class ListFragment extends Fragment {
ListView listView;
public ListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_list, container, false);
listView =(ListView) rootView.findViewById(R.id.list);
String[] values = new String[] {
"Sample 1",
"Sample 2",
"Sample 3"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, values);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
listView.getItemAtPosition(position);
if (position == 0) {
Pdf_sampleFragment sampleFragment = new Pdf_sampleFragment();
Bundle args = new Bundle();
args.putInt("key", 0);
sampleFragment.setArguments(args);
getFragmentManager()
.beginTransaction()
.replace(R.id.content, sampleFragment)
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
}
else if (position == 1) {
Pdf_sampleFragment sampleFragment = new Pdf_sampleFragment();
Bundle args = new Bundle();
args.putInt("key", 0);
sampleFragment.setArguments(args);
getFragmentManager()
.beginTransaction()
.replace(R.id.content, sampleFragment)
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
}
else if (position == 2) {
Pdf_sampleFragment sampleFragment = new Pdf_sampleFragment();
Bundle args = new Bundle();
args.putInt("key", 0);
sampleFragment.setArguments(args);
getFragmentManager()
.beginTransaction()
.replace(R.id.content, sampleFragment)
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
}
}
});
return rootView;
}
}
Catatan: Sesuaikan nama package.
package com.kuakeikecil.pdfreader;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.OpenableColumns;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;
import java.util.List;
import static android.app.Activity.RESULT_OK;
/**
* A simple {@link Fragment} subclass.
*/
public class Pdf_sampleFragment extends Fragment implements OnPageChangeListener, OnLoadCompleteListener {
private static final String TAG = MainActivity.class.getSimpleName();
private final static int REQUEST_CODE = 42;
public static final int PERMISSION_CODE = 42042;
public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE";
private PDFView pdfView;
private Uri uri;
private Integer pageNumber = 0;
private String pdfFileName;
public Pdf_sampleFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_pdf_sample, container, false);
pdfView = (PDFView) rootView.findViewById(R.id.pdfView);
pdfView = (PDFView) rootView.findViewById(R.id.pdfView);
int pos=0;
if (getArguments() != null) {
pos = getArguments().getInt("key");
}
if (pos == 0) {
displayFromAsset("sample_1.pdf");
}
else if (pos == 1) {
displayFromAsset("sample_1.pdf");
}
else if (pos == 2) {
displayFromAsset("sample_1.pdf");
}
setHasOptionsMenu(true);
return rootView;
}
private void displayFromAsset(String assetFileName) {
pdfFileName = assetFileName;
pdfView.fromAsset(assetFileName)
.defaultPage(pageNumber)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(getActivity()))
.spacing(10) // in dp
.load();
}
private void displayFromUri(Uri uri) {
pdfFileName = getFileName(uri);
pdfView.fromUri(uri)
.defaultPage(pageNumber)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(getActivity()))
.spacing(10) // in dp
.load();
}
public void onResult(int resultCode, Intent intent) {
if (resultCode == RESULT_OK) {
uri = intent.getData();
displayFromUri(uri);
}
}
@Override
public void onPageChanged(int page, int pageCount) {
pageNumber = page;
getActivity().setTitle(String.format("%s %s / %s", "PDF Reader", page + 1, pageCount));
}
public String getFileName(Uri uri) {
String result = null;
if (uri.getScheme().equals("content")) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
if (result == null) {
result = uri.getLastPathSegment();
}
return result;
}
private ContentResolver getContentResolver() {
return null;
}
@Override
public void loadComplete(int nbPages) {
PdfDocument.Meta meta = pdfView.getDocumentMeta();
Log.e(TAG, "title = " + meta.getTitle());
Log.e(TAG, "author = " + meta.getAuthor());
Log.e(TAG, "subject = " + meta.getSubject());
Log.e(TAG, "keywords = " + meta.getKeywords());
Log.e(TAG, "creator = " + meta.getCreator());
Log.e(TAG, "producer = " + meta.getProducer());
Log.e(TAG, "creationDate = " + meta.getCreationDate());
Log.e(TAG, "modDate = " + meta.getModDate());
printBookmarksTree(pdfView.getTableOfContents(), "-");
}
public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (PdfDocument.Bookmark b : tree) {
Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));
if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + "-");
}
}
}
@Override
//membuat button back
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
getFragmentManager().popBackStack();
}
return super.onOptionsItemSelected(item);
}
/**
* Listener for response to user permission request
*
* @param requestCode Check that permission request code matches
* @param permissions Permissions that requested
* @param grantResults Whether permissions granted
*/
}
Sesuaikan nama package
5. Buka MainActivity.java dan paste code berikut:
package com.kuakeikecil.pdfreader;
import android.app.FragmentTransaction;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final int TIME_DELAY = 2000;
private static long back_pressed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListFragment listFragment = new ListFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content, listFragment);
fragmentTransaction.commit();
}
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
//Checking for fragment count on backstack
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else if (!doubleBackToExitPressedOnce) {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this,"Tekan sekali lagi untuk keluar!", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
} else {
super.onBackPressed();
return;
}
}
}
6. Selanjutnya kita tinggal menyelesaikan layout.
<?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="com.kuakeikecil.pdfreader.MainActivity">
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</android.support.constraint.ConstraintLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.kuakeikecil.pdfreader.ListFragment">
<!-- TODO: Update blank fragment layout -->
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</FrameLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.kuakeikecil.pdfreader.Pdf_sampleFragment">
<!-- TODO: Update blank fragment layout -->
<com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdfView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kuakeikecil.pdfreader">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
7. Run app, selamat mencoba
Simak videonya :
Baca Juga
Posting Komentar
Posting Komentar