background image

Android

Notes for Professionals

Android

Notes for Professionals

GoalKicker.com

Free Programming Books

Disclaimer

This is an unocial free book created for educational purposes and is

not aliated with ocial Android

 group(s) or company(s).

All trademarks and registered trademarks are

the property of their respective owners

1000+ pages

of professional hints and tricks


background image

Contents

About

 

1

 ................................................................................................................................................................................... 

Chapter 1: Getting started with Android

 

2

 ........................................................................................................... 

Section 1.1: Creating a New Project

 

2

 .............................................................................................................................. 

Section 1.2: Setting up Android Studio

 

13

 ....................................................................................................................... 

Section 1.3: Android programming without an IDE

 

14

 .................................................................................................. 

Section 1.4: Application Fundamentals

 

18

 ...................................................................................................................... 

Section 1.5: Setting up an AVD (Android Virtual Device)

 

19

 ......................................................................................... 

Chapter 2: Android Studio

 

23

 ...................................................................................................................................... 

Section 2.1: Setup Android Studio

 

23

 .............................................................................................................................. 

Section 2.2: View And Add Shortcuts in Android Studio

 

23

 .......................................................................................... 

Section 2.3: Android Studio useful shortcuts

 

24

 ............................................................................................................ 

Section 2.4: Android Studio Improve performance tip

 

25

 ............................................................................................ 

Section 2.5: Gradle build project takes forever

 

26

 ........................................................................................................ 

Section 2.6: Enable/Disable blank line copy

 

26

 ............................................................................................................ 

Section 2.7: Custom colors of logcat message based on message importance

 

27

 ................................................. 

Section 2.8: Filter logs from UI

 

28

 ................................................................................................................................... 

Section 2.9: Create filters configuration

 

29

 ................................................................................................................... 

Section 2.10: Create assets folder

 

30

 .............................................................................................................................. 

Chapter 3: Instant Run in Android Studio

 

32

 ....................................................................................................... 

Section 3.1: Enabling or disabling Instant Run

 

32

 .......................................................................................................... 

Section 3.2: Types of code Swaps in Instant Run

 

32

 .................................................................................................... 

Section 3.3: Unsupported code changes when using Instant Run

 

33

 ......................................................................... 

Chapter 4: TextView

 

34

 ................................................................................................................................................. 

Section 4.1: Spannable TextView

 

34

 ................................................................................................................................ 

Section 4.2: Strikethrough TextView

 

35

 .......................................................................................................................... 

Section 4.3: TextView with image

 

36

 .............................................................................................................................. 

Section 4.4: Make RelativeSizeSpan align to top

 

36

 ..................................................................................................... 

Section 4.5: Pinchzoom on TextView

 

38

 ......................................................................................................................... 

Section 4.6: Textview with dierent Textsize

 

39

 ............................................................................................................ 

Section 4.7: Theme and Style customization

 

39

 ............................................................................................................ 

Section 4.8: TextView customization

 

41

 ......................................................................................................................... 

Section 4.9: Single TextView with two dierent colors

 

44

 ............................................................................................ 

Chapter 5: AutoCompleteTextView

 

46

 ................................................................................................................... 

Section 5.1: AutoComplete with CustomAdapter, ClickListener and Filter

 

46

 ............................................................. 

Section 5.2: Simple, hard-coded AutoCompleteTextView

 

49

 ....................................................................................... 

Chapter 6: Autosizing TextViews

 

50

 ......................................................................................................................... 

Section 6.1: Granularity

 

50

 ............................................................................................................................................... 

Section 6.2: Preset Sizes

 

50

 ............................................................................................................................................. 

Chapter 7: ListView

 

52

 .................................................................................................................................................... 

Section 7.1: Custom ArrayAdapter

 

52

 ............................................................................................................................. 

Section 7.2: A basic ListView with an ArrayAdapter

 

53

 ................................................................................................ 

Section 7.3: Filtering with CursorAdapter

 

53

 .................................................................................................................. 

Chapter 8: Layouts

 

55

 .................................................................................................................................................... 

Section 8.1: LayoutParams

 

55

 ......................................................................................................................................... 

Section 8.2: Gravity and layout gravity

 

58

 .................................................................................................................... 

Section 8.3: CoordinatorLayout Scrolling Behavior

 

60

 ................................................................................................. 


background image

Section 8.4: Percent Layouts

 

62

 ...................................................................................................................................... 

Section 8.5: View Weight

 

63

 ............................................................................................................................................ 

Section 8.6: Creating LinearLayout programmatically

 

64

 ........................................................................................... 

Section 8.7: LinearLayout

 

65

 ........................................................................................................................................... 

Section 8.8: RelativeLayout

 

66

 ........................................................................................................................................ 

Section 8.9: FrameLayout

 

68

 .......................................................................................................................................... 

Section 8.10: GridLayout

 

69

 ............................................................................................................................................. 

Section 8.11: CoordinatorLayout

 

71

 ................................................................................................................................. 

Chapter 9: ConstraintLayout

 

73

 ................................................................................................................................ 

Section 9.1: Adding ConstraintLayout to your project

 

73

 ............................................................................................. 

Section 9.2: Chains

 

74

 ...................................................................................................................................................... 

Chapter 10: TextInputLayout

 

75

 ................................................................................................................................ 

Section 10.1: Basic usage

 

75

 ............................................................................................................................................ 

Section 10.2: Password Visibility Toggles

 

75

 .................................................................................................................. 

Section 10.3: Adding Character Counting

 

75

 ................................................................................................................. 

Section 10.4: Handling Errors

 

76

 ..................................................................................................................................... 

Section 10.5: Customizing the appearance of the TextInputLayout

 

76

 ...................................................................... 

Section 10.6: TextInputEditText

 

77

 .................................................................................................................................. 

Chapter 11: CoordinatorLayout and Behaviors

 

79

 ........................................................................................... 

Section 11.1: Creating a simple Behavior

 

79

 ................................................................................................................... 

Section 11.2: Using the SwipeDismissBehavior

 

80

 .......................................................................................................... 

Section 11.3: Create dependencies between Views

 

80

 .................................................................................................. 

Chapter 12: TabLayout

 

82

 ............................................................................................................................................. 

Section 12.1: Using a TabLayout without a ViewPager

 

82

 ............................................................................................ 

Chapter 13: ViewPager

 

83

 ............................................................................................................................................. 

Section 13.1: ViewPager with a dots indicator

 

83

 ........................................................................................................... 

Section 13.2: Basic ViewPager usage with fragments

 

85

 ............................................................................................. 

Section 13.3: ViewPager with PreferenceFragment

 

86

 ................................................................................................. 

Section 13.4: Adding a ViewPager

 

87

 .............................................................................................................................. 

Section 13.5: Setup OnPageChangeListener

 

88

 ............................................................................................................. 

Section 13.6: ViewPager with TabLayout

 

89

 .................................................................................................................. 

Chapter 14: CardView

 

92

 ............................................................................................................................................... 

Section 14.1: Getting Started with CardView

 

92

 ............................................................................................................. 

Section 14.2: Adding Ripple animation

 

93

 ...................................................................................................................... 

Section 14.3: Customizing the CardView

 

93

 ................................................................................................................... 

Section 14.4: Using Images as Background in CardView (Pre-Lollipop device issues)

 

94

 ........................................ 

Section 14.5: Animate CardView background color with TransitionDrawable

 

96

 ...................................................... 

Chapter 15: NavigationView

 

97

 .................................................................................................................................. 

Section 15.1: How to add the NavigationView

 

97

 ........................................................................................................... 

Section 15.2: Add underline in menu elements

 

101

 ....................................................................................................... 

Section 15.3: Add seperators to menu

 

102

 ..................................................................................................................... 

Section 15.4: Add menu Divider using default DividerItemDecoration

 

103

 ................................................................ 

Chapter 16: RecyclerView

 

105

 ..................................................................................................................................... 

Section 16.1: Adding a RecyclerView

 

105

 ........................................................................................................................ 

Section 16.2: Smoother loading of items

 

106

 ................................................................................................................. 

Section 16.3: RecyclerView with DataBinding

 

107

 ......................................................................................................... 

Section 16.4: Animate data change

 

108

 ......................................................................................................................... 

Section 16.5: Popup menu with recyclerView

 

112

 ......................................................................................................... 

Section 16.6: Using several ViewHolders with ItemViewType

 

114

 ............................................................................... 


background image

Section 16.7: Filter items inside RecyclerView with a SearchView

 

115

 ........................................................................ 

Section 16.8: Drag&Drop and Swipe with RecyclerView

 

116

 ....................................................................................... 

Section 16.9: Show default view till items load or when data is not available

 

117

 .................................................... 

Section 16.10: Add header/footer to a RecyclerView

 

119

 ............................................................................................ 

Section 16.11: Endless Scrolling in Recycleview

 

122

 ....................................................................................................... 

Section 16.12: Add divider lines to RecyclerView items

 

122

 .......................................................................................... 

Chapter 17: RecyclerView Decorations

 

125

 ......................................................................................................... 

Section 17.1: Add divider to RecyclerView

 

125

 ............................................................................................................... 

Section 17.2: Drawing a Separator

 

127

 .......................................................................................................................... 

Section 17.3: How to add dividers using and DividerItemDecoration

 

128

 .................................................................. 

Section 17.4: Per-item margins with ItemDecoration

 

128

 ............................................................................................. 

Section 17.5: ItemOsetDecoration for GridLayoutManager in RecycleView

 

129

 .................................................... 

Chapter 18: RecyclerView onClickListeners

 

131

 ................................................................................................. 

Section 18.1: Kotlin and RxJava example

 

131

 ................................................................................................................ 

Section 18.2: RecyclerView Click listener

 

132

 ................................................................................................................. 

Section 18.3: Another way to implement Item Click Listener

 

133

 ................................................................................ 

Section 18.4: New Example

 

135

 ....................................................................................................................................... 

Section 18.5: Easy OnLongClick and OnClick Example

 

136

 .......................................................................................... 

Section 18.6: Item Click Listeners

 

139

 ............................................................................................................................. 

Chapter 19: RecyclerView and LayoutManagers

 

141

 ..................................................................................... 

Section 19.1: Adding header view to recyclerview with gridlayout manager

 

141

 ...................................................... 

Section 19.2: GridLayoutManager with dynamic span count

 

142

 ............................................................................... 

Section 19.3: Simple list with LinearLayoutManager

 

144

 .............................................................................................. 

Section 19.4: StaggeredGridLayoutManager

 

148

 ......................................................................................................... 

Chapter 20: Pagination in RecyclerView

 

151

 ...................................................................................................... 

Section 20.1: MainActivity.java

 

151

 ................................................................................................................................. 

Chapter 21: ImageView

 

156

 .......................................................................................................................................... 

Section 21.1: Set tint

 

156

 ................................................................................................................................................... 

Section 21.2: Set alpha

 

157

 .............................................................................................................................................. 

Section 21.3: Set Scale Type

 

157

 ..................................................................................................................................... 

Section 21.4: ImageView ScaleType - Center

 

162

 ......................................................................................................... 

Section 21.5: ImageView ScaleType - CenterCrop

 

164

 ................................................................................................. 

Section 21.6: ImageView ScaleType - CenterInside

 

166

 ............................................................................................... 

Section 21.7: ImageView ScaleType - FitStart and FitEnd

 

168

 ..................................................................................... 

Section 21.8: ImageView ScaleType - FitCenter

 

172

 ..................................................................................................... 

Section 21.9: Set Image Resource

 

174

 ............................................................................................................................ 

Section 21.10: ImageView ScaleType - FitXy

 

175

 ........................................................................................................... 

Section 21.11: MLRoundedImageView.java

 

177

 .............................................................................................................. 

Chapter 22: VideoView

 

180

 ........................................................................................................................................... 

Section 22.1: Play video from URL with using VideoView

 

180

 ..................................................................................... 

Section 22.2: VideoView Create

 

180

 ............................................................................................................................... 

Chapter 23: Optimized VideoView

 

181

 .................................................................................................................... 

Section 23.1: Optimized VideoView in ListView

 

181

 ....................................................................................................... 

Chapter 24: WebView

 

193

 ............................................................................................................................................. 

Section 24.1: Troubleshooting WebView by printing console messages or by remote debugging

 

193

 ................. 

Section 24.2: Communication from Javascript to Java (Android)

 

194

 ...................................................................... 

Section 24.3: Communication from Java to Javascript

 

195

 ........................................................................................ 

Section 24.4: Open dialer example

 

195

 .......................................................................................................................... 

Section 24.5: Open Local File / Create dynamic content in Webview

 

196

 ................................................................ 


background image

Section 24.6: JavaScript alert dialogs in WebView - How to make them work

 

196

 ................................................. 

Chapter 25: SearchView

 

198

 ........................................................................................................................................ 

Section 25.1: Setting Theme for SearchView

 

198

 .......................................................................................................... 

Section 25.2: SearchView in Toolbar with Fragment

 

198

 ............................................................................................. 

Section 25.3: Appcompat SearchView with RxBindings watcher

 

200

 ......................................................................... 

Chapter 26: BottomNavigationView

 

203

 ............................................................................................................... 

Section 26.1: Basic implemetation

 

203

 ........................................................................................................................... 

Section 26.2: Customization of BottomNavigationView

 

204

 ....................................................................................... 

Section 26.3: Handling Enabled / Disabled states

 

204

 ................................................................................................. 

Section 26.4: Allowing more than 3 menus

 

205

 ............................................................................................................ 

Chapter 27: Canvas drawing using SurfaceView

 

207

 ..................................................................................... 

Section 27.1: SurfaceView with drawing thread

 

207

 ..................................................................................................... 

Chapter 28: Creating Custom Views

 

212

 ............................................................................................................... 

Section 28.1: Creating Custom Views

 

212

 ...................................................................................................................... 

Section 28.2: Adding attributes to views

 

214

 ................................................................................................................. 

Section 28.3: CustomView performance tips

 

216

 ......................................................................................................... 

Section 28.4: Creating a compound view

 

217

 ............................................................................................................... 

Section 28.5: Compound view for SVG/VectorDrawable as drawableRight

 

220

 ...................................................... 

Section 28.6: Responding to Touch Events

 

223

 ............................................................................................................ 

Chapter 29: Getting Calculated View Dimensions

 

224

 .................................................................................... 

Section 29.1: Calculating initial View dimensions in an Activity

 

224

 ............................................................................ 

Chapter 30: Adding a FuseView to an Android Project

 

225

 ......................................................................... 

Section 30.1: hikr app, just another android.view.View

 

225

 .......................................................................................... 

Chapter 31: Supporting Screens With Dierent Resolutions, Sizes

 

232

 ................................................ 

Section 31.1: Using configuration qualifiers

 

232

 ............................................................................................................. 

Section 31.2: Converting dp and sp to pixels

 

232

 .......................................................................................................... 

Section 31.3: Text size and dierent android screen sizes

 

233

 .................................................................................... 

Chapter 32: ViewFlipper

 

234

 ........................................................................................................................................ 

Section 32.1: ViewFlipper with image sliding

 

234

 .......................................................................................................... 

Chapter 33: Design Patterns

 

235

 ............................................................................................................................... 

Section 33.1: Observer pattern

 

235

 ................................................................................................................................. 

Section 33.2: Singleton Class Example

 

235

 .................................................................................................................... 

Chapter 34: Activity

 

237

 ................................................................................................................................................ 

Section 34.1: Activity launchMode

 

237

 ............................................................................................................................ 

Section 34.2: Exclude an activity from back-stack history

 

238

 ................................................................................... 

Section 34.3: Android Activity LifeCycle Explained

 

238

 ................................................................................................ 

Section 34.4: End Application with exclude from Recents

 

241

 .................................................................................... 

Section 34.5: Presenting UI with setContentView

 

242

 ................................................................................................... 

Section 34.6: Up Navigation for Activities

 

243

 ............................................................................................................... 

Section 34.7: Clear your current Activity stack and launch a new Activity

 

244

 ......................................................... 

Chapter 35: Activity Recognition

 

246

 ...................................................................................................................... 

Section 35.1: Google Play ActivityRecognitionAPI

 

246

 .................................................................................................. 

Section 35.2: PathSense Activity Recognition

 

248

 ........................................................................................................ 

Chapter 36: Split Screen / Multi-Screen Activities

 

250

 ................................................................................... 

Section 36.1: Split Screen introduced in Android Nougat implemented

 

250

 .............................................................. 

Chapter 37: Material Design

 

251

 ............................................................................................................................... 

Section 37.1: Adding a Toolbar

 

251

 ................................................................................................................................. 

Section 37.2: Buttons styled with Material Design

 

252

 ................................................................................................. 


background image

Section 37.3: Adding a FloatingActionButton (FAB)

 

253

 .............................................................................................. 

Section 37.4: RippleDrawable

 

254

 .................................................................................................................................. 

Section 37.5: Adding a TabLayout

 

259

 ........................................................................................................................... 

Section 37.6: Bottom Sheets in Design Support Library

 

261

 ........................................................................................ 

Section 37.7: Apply an AppCompat theme

 

264

 ............................................................................................................. 

Section 37.8: Add a Snackbar

 

265

 .................................................................................................................................. 

Section 37.9: Add a Navigation Drawer

 

266

 .................................................................................................................. 

Section 37.10: How to use TextInputLayout

 

269

 ............................................................................................................ 

Chapter 38: Resources

 

270

 ........................................................................................................................................... 

Section 38.1: Define colors

 

270

 ........................................................................................................................................ 

Section 38.2: Color Transparency(Alpha) Level

 

271

 .................................................................................................... 

Section 38.3: Define String Plurals

 

271

 ........................................................................................................................... 

Section 38.4: Define strings

 

272

 ...................................................................................................................................... 

Section 38.5: Define dimensions

 

273

 .............................................................................................................................. 

Section 38.6: String formatting in strings.xml

 

273

 ......................................................................................................... 

Section 38.7: Define integer array

 

274

 ........................................................................................................................... 

Section 38.8: Define a color state list

 

274

 ...................................................................................................................... 

Section 38.9: 9 Patches

 

275

 ............................................................................................................................................. 

Section 38.10: Getting resources without "deprecated" warnings

 

278

 ....................................................................... 

Section 38.11: Working with strings.xml file

 

278

 ............................................................................................................. 

Section 38.12: Define string array

 

279

 ............................................................................................................................ 

Section 38.13: Define integers

 

280

 .................................................................................................................................. 

Section 38.14: Define a menu resource and use it inside Activity/Fragment

 

280

 ..................................................... 

Chapter 39: Data Binding Library

 

282

 .................................................................................................................... 

Section 39.1: Basic text field binding

 

282

 ........................................................................................................................ 

Section 39.2: Built-in two-way Data Binding

 

283

 .......................................................................................................... 

Section 39.3: Custom event using lambda expression

 

284

 .......................................................................................... 

Section 39.4: Default value in Data Binding

 

286

 ........................................................................................................... 

Section 39.5: Databinding in Dialog

 

286

 ........................................................................................................................ 

Section 39.6: Binding with an accessor method

 

286

 .................................................................................................... 

Section 39.7: Pass widget as reference in BindingAdapter

 

287

 .................................................................................. 

Section 39.8: Click listener with Binding

 

288

 .................................................................................................................. 

Section 39.9: Data binding in RecyclerView Adapter

 

289

 ............................................................................................ 

Section 39.10: Databinding in Fragment

 

290

 ................................................................................................................. 

Section 39.11: DataBinding with custom variables(int,boolean)

 

291

 ........................................................................... 

Section 39.12: Referencing classes

 

291

 .......................................................................................................................... 

Chapter 40: SharedPreferences

 

293

 ....................................................................................................................... 

Section 40.1: Implementing a Settings screen using SharedPreferences

 

293

 ............................................................ 

Section 40.2: Commit vs. Apply

 

295

 ............................................................................................................................... 

Section 40.3: Read and write values to SharedPreferences

 

295

 ................................................................................. 

Section 40.4: Retrieve all stored entries from a particular SharedPreferences file

 

296

 ........................................... 

Section 40.5: Reading and writing data to SharedPreferences with Singleton

 

297

 .................................................. 

Section 40.6: getPreferences(int) VS getSharedPreferences(String, int)

 

301

 ............................................................ 

Section 40.7: Listening for SharedPreferences changes

 

301

 ...................................................................................... 

Section 40.8: Store, Retrieve, Remove and Clear Data from SharedPreferences

 

302

 ............................................. 

Section 40.9: Add filter for EditTextPreference

 

302

 ...................................................................................................... 

Section 40.10: Supported data types in SharedPreferences

 

303

 ................................................................................ 

Section 40.11: Dierent ways of instantiating an object of SharedPreferences

 

303

 ................................................. 

Section 40.12: Removing keys

 

304

 .................................................................................................................................. 

Section 40.13: Support pre-Honeycomb with StringSet

 

304

 ........................................................................................ 


background image

Chapter 41: Intent

 

306

 .................................................................................................................................................... 

Section 41.1: Getting a result from another Activity

 

306

 ............................................................................................... 

Section 41.2: Passing data between activities

 

308

 ........................................................................................................ 

Section 41.3: Open a URL in a browser

 

309

 ................................................................................................................... 

Section 41.4: Starter Pattern

 

310

 ..................................................................................................................................... 

Section 41.5: Clearing an activity stack

 

311

 ................................................................................................................... 

Section 41.6: Start an activity

 

311

 ................................................................................................................................... 

Section 41.7: Sending emails

 

312

 .................................................................................................................................... 

Section 41.8: CustomTabsIntent for Chrome Custom Tabs

 

312

 .................................................................................. 

Section 41.9: Intent URI

 

313

 ............................................................................................................................................. 

Section 41.10: Start the dialer

 

314

 ................................................................................................................................... 

Section 41.11: Broadcasting Messages to Other Components

 

314

 .............................................................................. 

Section 41.12: Passing custom object between activities

 

315

 ...................................................................................... 

Section 41.13: Open Google map with specified latitude, longitude

 

317

 ..................................................................... 

Section 41.14: Passing dierent data through Intent in Activity

 

317

 ............................................................................ 

Section 41.15: Share intent

 

319

 ........................................................................................................................................ 

Section 41.16: Showing a File Chooser and Reading the Result

 

319

 ............................................................................ 

Section 41.17: Sharing Multiple Files through Intent

 

321

 ............................................................................................... 

Section 41.18: Start Unbound Service using an Intent

 

321

 ............................................................................................ 

Section 41.19: Getting a result from Activity to Fragment

 

322

 ..................................................................................... 

Chapter 42: Fragments

 

324

 ......................................................................................................................................... 

Section 42.1: Pass data from Activity to Fragment using Bundle

 

324

 ........................................................................ 

Section 42.2: The newInstance() pattern

 

324

 ................................................................................................................ 

Section 42.3: Navigation between fragments using backstack and static fabric pattern

 

325

 ................................ 

Section 42.4: Sending events back to an activity with callback interface

 

326

 .......................................................... 

Section 42.5: Animate the transition between fragments

 

327

 .................................................................................... 

Section 42.6: Communication between Fragments

 

328

 ............................................................................................... 

Chapter 43: Button

 

333

 .................................................................................................................................................. 

Section 43.1: Using the same click event for one or more Views in the XML

 

333

 ...................................................... 

Section 43.2: Defining external Listener

 

333

 .................................................................................................................. 

Section 43.3: inline onClickListener

 

334

 .......................................................................................................................... 

Section 43.4: Customizing Button style

 

334

 ................................................................................................................... 

Section 43.5: Custom Click Listener to prevent multiple fast clicks

 

338

 ..................................................................... 

Section 43.6: Using the layout to define a click action

 

338

 .......................................................................................... 

Section 43.7: Listening to the long click events

 

339

 ...................................................................................................... 

Chapter 44: Emulator

 

340

 ............................................................................................................................................ 

Section 44.1: Taking screenshots

 

340

 ............................................................................................................................. 

Section 44.2: Simulate call

 

345

 ........................................................................................................................................ 

Section 44.3: Open the AVD Manager

 

345

 .................................................................................................................... 

Section 44.4: Resolving Errors while starting emulator

 

345

 ........................................................................................ 

Chapter 45: Service

 

347

 ................................................................................................................................................. 

Section 45.1: Lifecycle of a Service

 

347

 .......................................................................................................................... 

Section 45.2: Defining the process of a service

 

348

 ..................................................................................................... 

Section 45.3: Creating an unbound service

 

348

 ............................................................................................................ 

Section 45.4: Starting a Service

 

351

 ............................................................................................................................... 

Section 45.5: Creating Bound Service with help of Binder 

351

 .................................................................................... 

Section 45.6: Creating Remote Service (via AIDL)

 

352

 ................................................................................................. 

Chapter 46: The Manifest File

 

354

 ............................................................................................................................ 

Section 46.1: Declaring Components

 

354

 ....................................................................................................................... 

Section 46.2: Declaring permissions in your manifest file

 

354

 .................................................................................... 


background image

Chapter 47: Gradle for Android

 

356

 ........................................................................................................................ 

Section 47.1: A basic build.gradle file

 

356

 ....................................................................................................................... 

Section 47.2: Define and use Build Configuration Fields

 

358

 ....................................................................................... 

Section 47.3: Centralizing dependencies via "dependencies.gradle" file

 

361

 ............................................................ 

Section 47.4: Sign APK without exposing keystore password

 

362

 .............................................................................. 

Section 47.5: Adding product flavor-specific dependencies

 

364

 ................................................................................ 

Section 47.6: Specifying dierent application IDs for build types and product flavors

 

364

 .................................... 

Section 47.7: Versioning your builds via "version.properties" file

 

365

 ......................................................................... 

Section 47.8: Defining product flavors

 

366

 .................................................................................................................... 

Section 47.9: Changing output apk name and add version name:

 

366

 ..................................................................... 

Section 47.10: Adding product flavor-specific resources

 

367

 ...................................................................................... 

Section 47.11: Why are there two build.gradle files in an Android Studio project?

 

367

 ............................................. 

Section 47.12: Directory structure for flavor-specific resources

 

368

 .......................................................................... 

Section 47.13: Enable Proguard using gradle

 

368

 ......................................................................................................... 

Section 47.14: Ignoring build variant

 

369

 ....................................................................................................................... 

Section 47.15: Enable experimental NDK plugin support for Gradle and AndroidStudio

 

369

 .................................. 

Section 47.16: Display signing information

 

371

 ............................................................................................................. 

Section 47.17: Seeing dependency tree

 

372

 ................................................................................................................... 

Section 47.18: Disable image compression for a smaller APK file size

 

373

 ................................................................ 

Section 47.19: Delete "unaligned" apk automatically 

373

 ............................................................................................ 

Section 47.20: Executing a shell script from gradle

 

373

 ............................................................................................... 

Section 47.21: Show all gradle project tasks

 

374

 ........................................................................................................... 

Section 47.22: Debugging your Gradle errors

 

375

 ....................................................................................................... 

Section 47.23: Use gradle.properties for central versionnumber/buildconfigurations

 

376

 ..................................... 

Section 47.24: Defining build types

 

377

 ......................................................................................................................... 

Chapter 48: FileIO with Android

 

378

 ........................................................................................................................ 

Section 48.1: Obtaining the working folder

 

378

 ............................................................................................................. 

Section 48.2: Writing raw array of bytes

 

378

 ................................................................................................................ 

Section 48.3: Serializing the object

 

378

 .......................................................................................................................... 

Section 48.4: Writing to external storage (SD card)

 

379

 .............................................................................................. 

Section 48.5: Solving "Invisible MTP files" problem

 

379

 ............................................................................................... 

Section 48.6: Working with big files

 

379

 ......................................................................................................................... 

Chapter 49: FileProvider

 

381

 ....................................................................................................................................... 

Section 49.1: Sharing a file

 

381

 ........................................................................................................................................ 

Chapter 50: Storing Files in Internal & External Storage

 

383

 .................................................................... 

Section 50.1: Android: Internal and External Storage - Terminology Clarification

 

383

 ............................................. 

Section 50.2: Using External Storage

 

387

 ...................................................................................................................... 

Section 50.3: Using Internal Storage

 

388

 ....................................................................................................................... 

Section 50.4: Fetch Device Directory :

 

388

 .................................................................................................................... 

Section 50.5: Save Database on SD Card (Backup DB on SD)

 

390

 ............................................................................ 

Chapter 51: Zip file in android

 

392

 ............................................................................................................................ 

Section 51.1: Zip file on android

 

392

 ................................................................................................................................ 

Chapter 52: Unzip File in Android

 

393

 ..................................................................................................................... 

Section 52.1: Unzip file

 

393

 ............................................................................................................................................... 

Chapter 53: Camera and Gallery

 

394

 ...................................................................................................................... 

Section 53.1: Take photo

 

394

 ........................................................................................................................................... 

Section 53.2: Taking full-sized photo from camera

 

396

 .............................................................................................. 

Section 53.3: Decode bitmap correctly rotated from the uri fetched with the intent

 

399

 ........................................ 

Section 53.4: Set camera resolution

 

401

 ........................................................................................................................ 


background image

Section 53.5: How to start camera or gallery and save camera result to storage

 

401

 ........................................... 

Chapter 54: Camera 2 API

 

405

 ................................................................................................................................... 

Section 54.1: Preview the main camera in a TextureView

 

405

 ..................................................................................... 

Chapter 55: Fingerprint API in android

 

414

 .......................................................................................................... 

Section 55.1: How to use Android Fingerprint API to save user passwords

 

414

 ........................................................ 

Section 55.2: Adding the Fingerprint Scanner in Android application

 

421

 ................................................................. 

Chapter 56: Bluetooth and Bluetooth LE API

 

424

 ............................................................................................. 

Section 56.1: Permissions

 

424

 .......................................................................................................................................... 

Section 56.2: Check if bluetooth is enabled

 

424

 ............................................................................................................ 

Section 56.3: Find nearby Bluetooth Low Energy devices

 

424

 .................................................................................... 

Section 56.4: Make device discoverable

 

429

 ................................................................................................................. 

Section 56.5: Connect to Bluetooth device

 

429

 ............................................................................................................. 

Section 56.6: Find nearby bluetooth devices

 

431

 .......................................................................................................... 

Chapter 57: Runtime Permissions in API-23 +

 

432

 ............................................................................................. 

Section 57.1: Android 6.0 multiple permissions

 

432

 ....................................................................................................... 

Section 57.2: Multiple Runtime Permissions From Same Permission Groups

 

433

 ..................................................... 

Section 57.3: Using PermissionUtil

 

434

 ........................................................................................................................... 

Section 57.4: Include all permission-related code to an abstract base class and extend the activity of this

base class to achieve cleaner/reusable code

 

435

 ............................................................................................... 

Section 57.5: Enforcing Permissions in Broadcasts, URI

 

437

 ....................................................................................... 

Chapter 58: Android Places API

 

439

 ......................................................................................................................... 

Section 58.1: Getting Current Places by Using Places API

 

439

 ..................................................................................... 

Section 58.2: Place Autocomplete Integration 

440

 ....................................................................................................... 

Section 58.3: Place Picker Usage Example

 

441

 ............................................................................................................. 

Section 58.4: Setting place type filters for PlaceAutocomplete

 

442

 ........................................................................... 

Section 58.5: Adding more than one google auto complete activity

 

443

 .................................................................. 

Chapter 59: Android NDK

 

445

 ..................................................................................................................................... 

Section 59.1: How to log in ndk

 

445

 ................................................................................................................................ 

Section 59.2: Building native executables for Android

 

445

 .......................................................................................... 

Section 59.3: How to clean the build

 

446

 ....................................................................................................................... 

Section 59.4: How to use a makefile other than Android.mk

 

446

 ............................................................................... 

Chapter 60: DayNight Theme (AppCompat v23.2 / API 14+)

 

447

 ............................................................. 

Section 60.1: Adding the DayNight theme to an app

 

447

 ............................................................................................ 

Chapter 61: Glide

 

448

 ....................................................................................................................................................... 

Section 61.1: Loading an image

 

448

 ................................................................................................................................ 

Section 61.2: Add Glide to your project

 

449

 ................................................................................................................... 

Section 61.3: Glide circle transformation (Load image in a circular ImageView)

 

449

 ............................................... 

Section 61.4: Default transformations

 

450

 ..................................................................................................................... 

Section 61.5: Glide rounded corners image with custom Glide target

 

451

 ................................................................. 

Section 61.6: Placeholder and Error handling

 

451

 ......................................................................................................... 

Section 61.7: Preloading images

 

452

 .............................................................................................................................. 

Section 61.8: Handling Glide image load failed

 

452

 ...................................................................................................... 

Section 61.9: Load image in a circular ImageView without custom transformations

 

453

 ........................................ 

Chapter 62: Dialog

 

454

 ................................................................................................................................................... 

Section 62.1: Adding Material Design AlertDialog to your app using Appcompat

 

454

 ............................................. 

Section 62.2: A Basic Alert Dialog

 

454

 ............................................................................................................................ 

Section 62.3: ListView in AlertDialog

 

455

 ....................................................................................................................... 

Section 62.4: Custom Alert Dialog with EditText

 

456

 .................................................................................................... 

Section 62.5: DatePickerDialog

 

457

 ................................................................................................................................ 


background image

Section 62.6: DatePicker

 

457

 ........................................................................................................................................... 

Section 62.7: Alert Dialog 

458

 ......................................................................................................................................... 

Section 62.8: Alert Dialog with Multi-line Title

 

459

 ........................................................................................................ 

Section 62.9: Date Picker within DialogFragment

 

461

 ................................................................................................. 

Section 62.10: Fullscreen Custom Dialog with no background and no title

 

463

 ........................................................ 

Chapter 63: Enhancing Alert Dialogs

 

465

 .............................................................................................................. 

Section 63.1: Alert dialog containing a clickable link

 

465

 ............................................................................................. 

Chapter 64: Animated AlertDialog Box

 

466

 ......................................................................................................... 

Section 64.1: Put Below code for Animated dialog..

 

466

 ............................................................................................... 

Chapter 65: GreenDAO

 

469

 ........................................................................................................................................... 

Section 65.1: Helper methods for SELECT, INSERT, DELETE, UPDATE queries

 

469

 ................................................... 

Section 65.2: Creating an Entity with GreenDAO 3.X that has a Composite Primary Key

 

471

 ................................ 

Section 65.3: Getting started with GreenDao v3.X

 

472

 ................................................................................................. 

Chapter 66: Tools Attributes

 

474

 ............................................................................................................................... 

Section 66.1: Designtime Layout Attributes

 

474

 ............................................................................................................ 

Chapter 67: Formatting Strings

 

475

 ........................................................................................................................ 

Section 67.1: Format a string resource

 

475

 .................................................................................................................... 

Section 67.2: Formatting data types to String and vise versa

 

475

 ............................................................................. 

Section 67.3: Format a timestamp to string

 

475

 ........................................................................................................... 

Chapter 68: SpannableString

 

476

 ............................................................................................................................. 

Section 68.1: Add styles to a TextView

 

476

 .................................................................................................................... 

Section 68.2: Multi string , with multi color

 

478

 .............................................................................................................. 

Chapter 69: Notifications

 

480

 ...................................................................................................................................... 

Section 69.1: Heads Up Notification with Ticker for older devices

 

480

 ....................................................................... 

Section 69.2: Creating a simple Notification

 

484

 .......................................................................................................... 

Section 69.3: Set custom notification - show full content text

 

484

 .............................................................................. 

Section 69.4: Dynamically getting the correct pixel size for the large icon

 

485

 ........................................................ 

Section 69.5: Ongoing notification with Action button

 

485

 .......................................................................................... 

Section 69.6: Setting Dierent priorities in notification

 

486

 ......................................................................................... 

Section 69.7: Set custom notification icon using `Picasso` library

 

487

 ........................................................................ 

Section 69.8: Scheduling notifications

 

488

 ..................................................................................................................... 

Chapter 70: AlarmManager

 

490

 ................................................................................................................................ 

Section 70.1: How to Cancel an Alarm

 

490

 .................................................................................................................... 

Section 70.2: Creating exact alarms on all Android versions

 

490

 ............................................................................... 

Section 70.3: API23+ Doze mode interferes with AlarmManager

 

491

 ........................................................................ 

Section 70.4: Run an intent at a later time

 

491

 ............................................................................................................. 

Chapter 71: Handler

 

492

 ................................................................................................................................................. 

Section 71.1: HandlerThreads and communication between Threads

 

492

 ................................................................. 

Section 71.2: Use Handler to create a Timer (similar to javax.swing.Timer)

 

492

 ....................................................... 

Section 71.3: Using a Handler to execute code after a delayed amount of time

 

493

 ............................................... 

Section 71.4: Stop handler from execution 

494

 ............................................................................................................. 

Chapter 72: BroadcastReceiver

 

495

 ........................................................................................................................ 

Section 72.1: Using LocalBroadcastManager

 

495

 ......................................................................................................... 

Section 72.2: BroadcastReceiver Basics

 

495

 ................................................................................................................. 

Section 72.3: Introduction to Broadcast receiver

 

496

 ................................................................................................... 

Section 72.4: Using ordered broadcasts

 

496

 ................................................................................................................. 

Section 72.5: Sticky Broadcast

 

497

 ................................................................................................................................. 

Section 72.6: Enabling and disabling a Broadcast Receiver programmatically

 

497

 ................................................ 

Section 72.7: Example of a LocalBroadcastManager

 

498

 ........................................................................................... 


background image

Section 72.8: Android stopped state

 

499

 ....................................................................................................................... 

Section 72.9: Communicate two activities through custom Broadcast receiver

 

499

 ................................................ 

Section 72.10: BroadcastReceiver to handle BOOT_COMPLETED events

 

500

 .......................................................... 

Section 72.11: Bluetooth Broadcast receiver

 

501

 ........................................................................................................... 

Chapter 73: UI Lifecycle

 

502

 ........................................................................................................................................ 

Section 73.1: Saving data on memory trimming

 

502

 .................................................................................................... 

Chapter 74: HttpURLConnection

 

503

 ...................................................................................................................... 

Section 74.1: Creating an HttpURLConnection

 

503

 ....................................................................................................... 

Section 74.2: Sending an HTTP GET request

 

503

 .......................................................................................................... 

Section 74.3: Reading the body of an HTTP GET request

 

504

 .................................................................................... 

Section 74.4: Sending an HTTP POST request with parameters

 

504

 .......................................................................... 

Section 74.5: A multi-purpose HttpURLConnection class to handle all types of HTTP requests

 

506

 ..................... 

Section 74.6: Use HttpURLConnection for multipart/form-data 

508

 ......................................................................... 

Section 74.7: Upload (POST) file using HttpURLConnection

 

511

 ................................................................................ 

Chapter 75: Callback URL

 

513

 .................................................................................................................................... 

Section 75.1: Callback URL example with Instagram OAuth

 

513

 ................................................................................. 

Chapter 76: Snackbar

 

514

 ............................................................................................................................................. 

Section 76.1: Creating a simple Snackbar

 

514

 ............................................................................................................... 

Section 76.2: Custom Snack Bar

 

514

 .............................................................................................................................. 

Section 76.3: Custom Snackbar (no need view)

 

515

 ..................................................................................................... 

Section 76.4: Snackbar with Callback

 

516

 ..................................................................................................................... 

Section 76.5: Snackbar vs Toasts: Which one should I use?

 

516

 ................................................................................. 

Section 76.6: Custom Snackbar

 

517

 ............................................................................................................................... 

Chapter 77: Widgets

 

518

 ............................................................................................................................................... 

Section 77.1: Manifest Declaration -

 

518

 ........................................................................................................................ 

Section 77.2: Metadata

 

518

 ............................................................................................................................................. 

Section 77.3: AppWidgetProvider Class

 

518

 .................................................................................................................. 

Section 77.4: Create/Integrate Basic Widget using Android Studio

 

519

 .................................................................... 

Section 77.5: Two widgets with dierent layouts declaration

 

520

 .............................................................................. 

Chapter 78: Toast

 

522

 ..................................................................................................................................................... 

Section 78.1: Creating a custom Toast

 

522

 .................................................................................................................... 

Section 78.2: Set position of a Toast

 

523

 ....................................................................................................................... 

Section 78.3: Showing a Toast Message

 

523

 ................................................................................................................. 

Section 78.4: Show Toast Message Above Soft Keyboard

 

524

 ................................................................................... 

Section 78.5: Thread safe way of displaying Toast (Application Wide)

 

524

 ............................................................. 

Section 78.6: Thread safe way of displaying a Toast Message (For AsyncTask)

 

525

 ............................................. 

Chapter 79: Create Singleton Class for Toast Message

 

526

 ....................................................................... 

Section 79.1: Create own singleton class for toast massages

 

526

 .............................................................................. 

Chapter 80: Interfaces

 

528

 ........................................................................................................................................... 

Section 80.1: Custom Listener

 

528

 .................................................................................................................................. 

Section 80.2: Basic Listener

 

529

 ...................................................................................................................................... 

Chapter 81: Animators

 

531

 ............................................................................................................................................ 

Section 81.1: TransitionDrawable animation

 

531

 ........................................................................................................... 

Section 81.2: Fade in/out animation

 

531

 ........................................................................................................................ 

Section 81.3: ValueAnimator

 

532

 ..................................................................................................................................... 

Section 81.4: Expand and Collapse animation of View

 

533

 .......................................................................................... 

Section 81.5: ObjectAnimator

 

534

 ................................................................................................................................... 

Section 81.6: ViewPropertyAnimator

 

534

 ....................................................................................................................... 

Section 81.7: Shake animation of an ImageView

 

535

 ................................................................................................... 


background image

Chapter 82: Location

 

537

 .............................................................................................................................................. 

Section 82.1: Fused location API

 

537

 ............................................................................................................................... 

Section 82.2: Get Address From Location using Geocoder

 

541

 .................................................................................. 

Section 82.3: Requesting location updates using LocationManager

 

542

 .................................................................. 

Section 82.4: Requesting location updates on a separate thread using LocationManager

 

543

 ............................. 

Section 82.5: Getting location updates in a BroadcastReceiver

 

544

 .......................................................................... 

Section 82.6: Register geofence

 

545

 .............................................................................................................................. 

Chapter 83: Theme, Style, Attribute

 

549

 ............................................................................................................... 

Section 83.1: Define primary, primary dark, and accent colors

 

549

 ........................................................................... 

Section 83.2: Multiple Themes in one App

 

549

 .............................................................................................................. 

Section 83.3: Navigation Bar Color (API 21+)

 

551

 .......................................................................................................... 

Section 83.4: Use Custom Theme Per Activity

 

551

 ....................................................................................................... 

Section 83.5: Light Status Bar (API 23+)

 

552

 .................................................................................................................. 

Section 83.6: Use Custom Theme Globally

 

552

 ............................................................................................................. 

Section 83.7: Overscroll Color (API 21+)

 

552

 .................................................................................................................. 

Section 83.8: Ripple Color (API 21+)

 

552

 ......................................................................................................................... 

Section 83.9: Translucent Navigation and Status Bars (API 19+)

 

553

 ......................................................................... 

Section 83.10: Theme inheritance

 

553

 ............................................................................................................................ 

Chapter 84: MediaPlayer

 

554

 ..................................................................................................................................... 

Section 84.1: Basic creation and playing

 

554

 ................................................................................................................ 

Section 84.2: Media Player with Buer progress and play position

 

554

 .................................................................... 

Section 84.3: Getting system ringtones

 

556

 .................................................................................................................. 

Section 84.4: Asynchronous prepare

 

557

 ...................................................................................................................... 

Section 84.5: Import audio into androidstudio and play it

 

557

 ................................................................................... 

Section 84.6: Getting and setting system volume

 

559

 ................................................................................................. 

Chapter 85: Android Sound and Media

 

561

 ......................................................................................................... 

Section 85.1: How to pick image and video for api >19

 

561

 ......................................................................................... 

Section 85.2: Play sounds via SoundPool

 

562

 ............................................................................................................... 

Chapter 86: MediaSession

 

563

 .................................................................................................................................... 

Section 86.1: Receiving and handling button events

 

563

 ............................................................................................. 

Chapter 87: MediaStore

 

566

 ........................................................................................................................................ 

Section 87.1: Fetch Audio/MP3 files from specific folder of device or fetch all files

 

566

 .......................................... 

Chapter 88: Multidex and the Dex Method Limit

 

569

 ...................................................................................... 

Section 88.1: Enabling Multidex

 

569

 ................................................................................................................................ 

Section 88.2: Multidex by extending Application

 

570

 ................................................................................................... 

Section 88.3: Multidex by extending MultiDexApplication

 

570

 ..................................................................................... 

Section 88.4: Multidex by using MultiDexApplication directly

 

571

 ............................................................................... 

Section 88.5: Counting Method References On Every Build (Dexcount Gradle Plugin)

 

571

 ..................................... 

Chapter 89: Data Synchronization with Sync Adapter

 

573

 ......................................................................... 

Section 89.1: Dummy Sync Adapter with Stub Provider

 

573

 ........................................................................................ 

Chapter 90: PorterDu Mode

 

579

 ............................................................................................................................ 

Section 90.1: Creating a PorterDu ColorFilter

 

579

 ...................................................................................................... 

Section 90.2: Creating a PorterDu XferMode

 

579

 ...................................................................................................... 

Section 90.3: Apply a radial mask (vignette) to a bitmap using PorterDuXfermode

 

579

 ..................................... 

Chapter 91: Menu

 

581

 ...................................................................................................................................................... 

Section 91.1: Options menu with dividers

 

581

 ................................................................................................................. 

Section 91.2: Apply custom font to Menu

 

581

 ................................................................................................................ 

Section 91.3: Creating a Menu in an Activity

 

582

 ........................................................................................................... 

Chapter 92: Picasso

 

585

 ................................................................................................................................................. 


background image

Section 92.1: Adding Picasso Library to your Android Project

 

585

 ............................................................................. 

Section 92.2: Circular Avatars with Picasso

 

585

 ............................................................................................................ 

Section 92.3: Placeholder and Error Handling

 

587

 ....................................................................................................... 

Section 92.4: Re-sizing and Rotating

 

587

 ...................................................................................................................... 

Section 92.5: Disable cache in Picasso

 

588

 ................................................................................................................... 

Section 92.6: Using Picasso as ImageGetter for Html.fromHtml

 

588

 ......................................................................... 

Section 92.7: Cancelling Image Requests using Picasso

 

589

 ....................................................................................... 

Section 92.8: Loading Image from external Storage

 

590

 ............................................................................................ 

Section 92.9: Downloading image as Bitmap using Picasso

 

590

 ................................................................................ 

Section 92.10: Try oine disk cache first, then go online and fetch the image

 

590

 ................................................. 

Chapter 93: RoboGuice

 

592

 .......................................................................................................................................... 

Section 93.1: Simple example

 

592

 ................................................................................................................................... 

Section 93.2: Installation for Gradle Projects

 

592

 ......................................................................................................... 

Section 93.3: @ContentView annotation

 

592

 ................................................................................................................ 

Section 93.4: @InjectResource annotation

 

592

 ............................................................................................................. 

Section 93.5: @InjectView annotation

 

593

 ..................................................................................................................... 

Section 93.6: Introduction to RoboGuice

 

593

 ................................................................................................................. 

Chapter 94: ACRA

 

596

 ..................................................................................................................................................... 

Section 94.1: ACRAHandler

 

596

 ....................................................................................................................................... 

Section 94.2: Example manifest

 

596

 ............................................................................................................................... 

Section 94.3: Installation

 

597

 ........................................................................................................................................... 

Chapter 95: Parcelable

 

598

 .......................................................................................................................................... 

Section 95.1: Making a custom object Parcelable

 

598

 .................................................................................................. 

Section 95.2: Parcelable object containing another Parcelable object

 

599

 ............................................................... 

Section 95.3: Using Enums with Parcelable

 

600

 ............................................................................................................ 

Chapter 96: Retrofit2

 

602

 .............................................................................................................................................. 

Section 96.1: A Simple GET Request

 

602

 ........................................................................................................................ 

Section 96.2: Debugging with Stetho

 

604

 ...................................................................................................................... 

Section 96.3: Add logging to Retrofit2

 

605

 .................................................................................................................... 

Section 96.4: A simple POST request with GSON

 

605

 ................................................................................................... 

Section 96.5: Download a file from Server using Retrofit2

 

607

 ................................................................................... 

Section 96.6: Upload multiple file using Retrofit as multipart

 

609

 .............................................................................. 

Section 96.7: Retrofit with OkHttp interceptor

 

612

 ....................................................................................................... 

Section 96.8: Header and Body: an Authentication Example

 

612

 ............................................................................... 

Section 96.9: Uploading a file via Multipart

 

613

 ............................................................................................................ 

Section 96.10: Retrofit 2 Custom Xml Converter

 

613

 .................................................................................................... 

Section 96.11: Reading XML form URL with Retrofit 2

 

615

 ............................................................................................ 

Chapter 97: ButterKnife

 

618

 ........................................................................................................................................ 

Section 97.1: Configuring ButterKnife in your project

 

618

 ............................................................................................ 

Section 97.2: Unbinding views in ButterKnife

 

620

 ......................................................................................................... 

Section 97.3: Binding Listeners using ButterKnife

 

620

 .................................................................................................. 

Section 97.4: Android Studio ButterKnife Plugin

 

621

 .................................................................................................... 

Section 97.5: Binding Views using ButterKnife

 

622

 ....................................................................................................... 

Chapter 98: Volley

 

625

 .................................................................................................................................................... 

Section 98.1: Using Volley for HTTP requests

 

625

 ......................................................................................................... 

Section 98.2: Basic StringRequest using GET method

 

626

 .......................................................................................... 

Section 98.3: Adding custom design time attributes to NetworkImageView

 

627

 ...................................................... 

Section 98.4: Adding custom headers to your requests [e.g. for basic auth]

 

628

 .................................................... 

Section 98.5: Remote server authentication using StringRequest through POST method

 

629

 ............................... 

Section 98.6: Cancel a request

 

631

 ................................................................................................................................. 


background image

Section 98.7: Request JSON

 

631

 ..................................................................................................................................... 

Section 98.8: Use JSONArray as request body

 

631

 ..................................................................................................... 

Section 98.9: Boolean variable response from server with json request in volley

 

632

 ............................................. 

Section 98.10: Helper Class for Handling Volley Errors

 

633

 ......................................................................................... 

Chapter 99: Date and Time Pickers

 

635

 ................................................................................................................. 

Section 99.1: Date Picker Dialog

 

635

 .............................................................................................................................. 

Section 99.2: Material DatePicker

 

635

 ............................................................................................................................ 

Chapter 100: Localized Date/Time in Android

 

638

 .......................................................................................... 

Section 100.1: Custom localized date format with DateUtils.formatDateTime()

 

638

 ................................................ 

Section 100.2: Standard date/time formatting in Android

 

638

 ................................................................................... 

Section 100.3: Fully customized date/time

 

638

 ............................................................................................................. 

Chapter 101: Time Utils

 

639

 ........................................................................................................................................... 

Section 101.1: To check within a period

 

639

 .................................................................................................................... 

Section 101.2: Convert Date Format into Milliseconds

 

639

 ........................................................................................... 

Section 101.3: GetCurrentRealTime

 

640

 .......................................................................................................................... 

Chapter 102: In-app Billing

 

641

 ................................................................................................................................... 

Section 102.1: Consumable In-app Purchases

 

641

 ........................................................................................................ 

Section 102.2: (Third party) In-App v3 Library

 

645

 ....................................................................................................... 

Chapter 103: FloatingActionButton

 

647

 ................................................................................................................. 

Section 103.1: How to add the FAB to the layout

 

647

 .................................................................................................... 

Section 103.2: Show and Hide FloatingActionButton on Swipe

 

648

 ............................................................................ 

Section 103.3: Show and Hide FloatingActionButton on Scroll

 

650

 ............................................................................. 

Section 103.4: Setting behaviour of FloatingActionButton

 

652

 .................................................................................... 

Chapter 104: Touch Events

 

653

 .................................................................................................................................. 

Section 104.1: How to vary between child and parent view group touch events

 

653

 ............................................... 

Chapter 105: Handling touch and motion events

 

656

 .................................................................................... 

Section 105.1: Buttons

 

656

 ................................................................................................................................................ 

Section 105.2: Surface

 

657

 ............................................................................................................................................... 

Section 105.3: Handling multitouch in a surface

 

658

 .................................................................................................... 

Chapter 106: Detect Shake Event in Android

 

659

 ............................................................................................. 

Section 106.1: Shake Detector in Android Example

 

659

 ................................................................................................ 

Section 106.2: Using Seismic shake detection

 

660

 ........................................................................................................ 

Chapter 107: Hardware Button Events/Intents (PTT, LWP, etc.)

 

661

 ..................................................... 

Section 107.1: Sonim Devices

 

661

 .................................................................................................................................... 

Section 107.2: RugGear Devices

 

661

 ............................................................................................................................... 

Chapter 108: GreenRobot EventBus

 

662

 ................................................................................................................ 

Section 108.1: Passing a Simple Event

 

662

 ..................................................................................................................... 

Section 108.2: Receiving Events

 

663

 ............................................................................................................................... 

Section 108.3: Sending Events

 

663

 .................................................................................................................................. 

Chapter 109: Otto Event Bus

 

664

 ............................................................................................................................... 

Section 109.1: Passing an event

 

664

 ................................................................................................................................ 

Section 109.2: Receiving an event

 

664

 ........................................................................................................................... 

Chapter 110: Vibration

 

666

 ............................................................................................................................................ 

Section 110.1: Getting Started with Vibration 

666

 ........................................................................................................... 

Section 110.2: Vibrate Indefinitely

 

666

 ............................................................................................................................ 

Section 110.3: Vibration Patterns

 

666

 .............................................................................................................................. 

Section 110.4: Stop Vibrate

 

667

 ........................................................................................................................................ 

Section 110.5: Vibrate for one time

 

667

 .......................................................................................................................... 


background image

Chapter 111: ContentProvider

 

668

 .............................................................................................................................. 

Section 111.1: Implementing a basic content provider class

 

668

 .................................................................................. 

Chapter 112: Dagger 2

 

672

 ............................................................................................................................................. 

Section 112.1: Component setup for Application and Activity injection

 

672

 ................................................................ 

Section 112.2: Custom Scopes

 

673

 .................................................................................................................................. 

Section 112.3: Using @Subcomponent instead of @Component(dependencies={...})

 

674

 ....................................... 

Section 112.4: Creating a component from multiple modules

 

674

 .............................................................................. 

Section 112.5: How to add Dagger 2 in build.gradle

 

675

 .............................................................................................. 

Section 112.6: Constructor Injection

 

676

 ......................................................................................................................... 

Chapter 113: Realm

 

678

 ................................................................................................................................................... 

Section 113.1: Sorted queries

 

678

 ..................................................................................................................................... 

Section 113.2: Using Realm with RxJava

 

678

 ................................................................................................................. 

Section 113.3: Basic Usage

 

679

 ........................................................................................................................................ 

Section 113.4: List of primitives (RealmList<Integer/String/...>)

 

682

 ............................................................................ 

Section 113.5: Async queries

 

683

 ..................................................................................................................................... 

Section 113.6: Adding Realm to your project

 

683

 .......................................................................................................... 

Section 113.7: Realm Models

 

683

 ..................................................................................................................................... 

Section 113.8: try-with-resources

 

684

 .............................................................................................................................. 

Chapter 114: Android Versions

 

685

 ........................................................................................................................... 

Section 114.1: Checking the Android Version on device at runtime

 

685

 ...................................................................... 

Chapter 115: Wi-Fi Connections

 

686

 .......................................................................................................................... 

Section 115.1: Connect with WEP encryption

 

686

 ........................................................................................................... 

Section 115.2: Connect with WPA2 encryption

 

686

 ........................................................................................................ 

Section 115.3: Scan for access points

 

687

 ....................................................................................................................... 

Chapter 116: SensorManager

 

689

 .............................................................................................................................. 

Section 116.1: Decide if your device is static or not, using the accelerometer

 

689

 ..................................................... 

Section 116.2: Retrieving sensor events

 

689

 ................................................................................................................... 

Section 116.3: Sensor transformation to world coordinate system

 

690

 ...................................................................... 

Chapter 117: ProgressBar

 

692

 ..................................................................................................................................... 

Section 117.1: Material Linear ProgressBar

 

692

 .............................................................................................................. 

Section 117.2: Tinting ProgressBar

 

694

 ........................................................................................................................... 

Section 117.3: Customized progressbar

 

694

 ................................................................................................................... 

Section 117.4: Creating Custom Progress Dialog

 

696

 .................................................................................................... 

Section 117.5: Indeterminate ProgressBar

 

698

 ............................................................................................................... 

Section 117.6: Determinate ProgressBar

 

699

 ................................................................................................................. 

Chapter 118: Custom Fonts

 

701

 ................................................................................................................................... 

Section 118.1: Custom font in canvas text

 

701

 ................................................................................................................ 

Section 118.2: Working with fonts in Android O

 

701

 ...................................................................................................... 

Section 118.3: Custom font to whole activity

 

702

 ........................................................................................................... 

Section 118.4: Putting a custom font in your app

 

702

 ................................................................................................... 

Section 118.5: Initializing a font

 

702

 ................................................................................................................................. 

Section 118.6: Using a custom font in a TextView

 

702

 .................................................................................................. 

Section 118.7: Apply font on TextView by xml (Not required Java code)

 

703

 ............................................................ 

Section 118.8: Ecient Typeface loading

 

704

 ................................................................................................................ 

Chapter 119: Getting system font names and using the fonts

 

705

 .......................................................... 

Section 119.1: Getting system font names

 

705

 ............................................................................................................... 

Section 119.2: Applying a system font to a TextView

 

705

 ............................................................................................. 

Chapter 120: Text to Speech(TTS)

 

706

 ................................................................................................................... 

Section 120.1: Text to Speech Base

 

706

 .......................................................................................................................... 


background image

Section 120.2: TextToSpeech implementation across the APIs

 

707

 ............................................................................ 

Chapter 121: Spinner

 

711

 ................................................................................................................................................ 

Section 121.1: Basic Spinner Example

 

711

 ....................................................................................................................... 

Section 121.2: Adding a spinner to your activity

 

712

 ..................................................................................................... 

Chapter 122: Data Encryption/Decryption

 

714

 .................................................................................................. 

Section 122.1: AES encryption of data using password in a secure way

 

714

 ............................................................. 

Chapter 123: OkHttp

 

716

 ................................................................................................................................................ 

Section 123.1: Basic usage example

 

716

 ......................................................................................................................... 

Section 123.2: Setting up OkHttp

 

716

 .............................................................................................................................. 

Section 123.3: Logging interceptor

 

716

 .......................................................................................................................... 

Section 123.4: Synchronous Get Call

 

717

 ........................................................................................................................ 

Section 123.5: Asynchronous Get Call

 

717

 ..................................................................................................................... 

Section 123.6: Posting form parameters

 

718

 ................................................................................................................. 

Section 123.7: Posting a multipart request

 

718

 .............................................................................................................. 

Section 123.8: Rewriting Responses

 

718

 ........................................................................................................................ 

Chapter 124: Handling Deep Links

 

720

 ................................................................................................................... 

Section 124.1: Retrieving query parameters

 

720

 ........................................................................................................... 

Section 124.2: Simple deep link

 

720

 ................................................................................................................................ 

Section 124.3: Multiple paths on a single domain

 

721

 .................................................................................................. 

Section 124.4: Multiple domains and multiple paths

 

721

 .............................................................................................. 

Section 124.5: Both http and https for the same domain

 

722

 ...................................................................................... 

Section 124.6: Using pathPrefix

 

722

 ................................................................................................................................ 

Chapter 125: Crash Reporting Tools

 

723

 ............................................................................................................... 

Section 125.1: Fabric - Crashlytics

 

723

 ............................................................................................................................ 

Section 125.2: Capture crashes using Sherlock

 

728

 ...................................................................................................... 

Section 125.3: Force a Test Crash With Fabric

 

729

 ....................................................................................................... 

Section 125.4: Crash Reporting with ACRA

 

730

 ............................................................................................................. 

Chapter 126: Check Internet Connectivity

 

732

 .................................................................................................... 

Section 126.1: Check if device has internet connectivity

 

732

 ........................................................................................ 

Section 126.2: How to check network strength in android?

 

732

 .................................................................................. 

Section 126.3: How to check network strength

 

733

 ....................................................................................................... 

Chapter 127: Creating your own libraries for Android applications

 

736

 ............................................... 

Section 127.1: Create a library available on Jitpack.io

 

736

 ........................................................................................... 

Section 127.2: Creating library project

 

736

 .................................................................................................................... 

Section 127.3: Using library in project as a module

 

737

 ............................................................................................... 

Chapter 128: Device Display Metrics

 

738

 ............................................................................................................... 

Section 128.1: Get the screens pixel dimensions

 

738

 ..................................................................................................... 

Section 128.2: Get screen density

 

738

 ............................................................................................................................ 

Section 128.3: Formula px to dp, dp to px conversation 

738

 ....................................................................................... 

Chapter 129: Building Backwards Compatible Apps

 

739

 ............................................................................... 

Section 129.1: How to handle deprecated API

 

739

 ........................................................................................................ 

Chapter 130: Loader

 

741

 ................................................................................................................................................ 

Section 130.1: Basic AsyncTaskLoader

 

741

 .................................................................................................................... 

Section 130.2: AsyncTaskLoader with cache

 

742

 .......................................................................................................... 

Section 130.3: Reloading

 

743

 ........................................................................................................................................... 

Section 130.4: Pass parameters using a Bundle

 

744

 .................................................................................................... 

Chapter 131: ProGuard - Obfuscating and Shrinking your code

 

745

 ....................................................... 

Section 131.1: Rules for some of the widely used Libraries

 

745

 .................................................................................... 

Section 131.2: Remove trace logging (and other) statements at build time

 

747

 ....................................................... 


background image

Section 131.3: Protecting your code from hackers

 

747

 ................................................................................................. 

Section 131.4: Enable ProGuard for your build

 

748

 ........................................................................................................ 

Section 131.5: Enabling ProGuard with a custom obfuscation configuration file

 

748

 ................................................ 

Chapter 132: Typedef Annotations: @IntDef, @StringDef

 

750

 .................................................................. 

Section 132.1: IntDef Annotations

 

750

 ............................................................................................................................. 

Section 132.2: Combining constants with flags

 

750

 ...................................................................................................... 

Chapter 133: Capturing Screenshots

 

752

 ............................................................................................................... 

Section 133.1: Taking a screenshot of a particular view

 

752

 ........................................................................................ 

Section 133.2: Capturing Screenshot via Android Studio

 

752

 ....................................................................................... 

Section 133.3: Capturing Screenshot via ADB and saving directly in your PC

 

753

 .................................................... 

Section 133.4: Capturing Screenshot via Android Device Monitor

 

753

 ........................................................................ 

Section 133.5: Capturing Screenshot via ADB

 

754

 ......................................................................................................... 

Chapter 134: MVP Architecture

 

755

 .......................................................................................................................... 

Section 134.1: Login example in the Model View Presenter (MVP) pattern

 

755

 ......................................................... 

Section 134.2: Simple Login Example in MVP

 

758

 .......................................................................................................... 

Chapter 135: Orientation Changes

 

765

 ................................................................................................................... 

Section 135.1: Saving and Restoring Activity State

 

765

 ................................................................................................. 

Section 135.2: Retaining Fragments

 

765

 ........................................................................................................................ 

Section 135.3: Manually Managing Configuration Changes

 

766

 ................................................................................. 

Section 135.4: Handling AsyncTask

 

767

 ......................................................................................................................... 

Section 135.5: Lock Screen's rotation programmatically

 

768

 ...................................................................................... 

Section 135.6: Saving and Restoring Fragment State

 

769

 ........................................................................................... 

Chapter 136: Xposed

 

771

 ................................................................................................................................................ 

Section 136.1: Creating a Xposed Module

 

771

 ................................................................................................................ 

Section 136.2: Hooking a method

 

771

 ............................................................................................................................ 

Chapter 137: PackageManager

 

773

 .......................................................................................................................... 

Section 137.1: Retrieve application version

 

773

 ............................................................................................................. 

Section 137.2: Version name and version code

 

773

 ...................................................................................................... 

Section 137.3: Install time and update time

 

773

 ............................................................................................................ 

Section 137.4: Utility method using PackageManager

 

774

 .......................................................................................... 

Chapter 138: Gesture Detection

 

776

 ........................................................................................................................ 

Section 138.1: Swipe Detection

 

776

 .................................................................................................................................. 

Section 138.2: Basic Gesture Detection

 

777

 ................................................................................................................... 

Chapter 139: Doze Mode

 

779

 ........................................................................................................................................ 

Section 139.1: Whitelisting an Android application programmatically

 

779

 ................................................................. 

Section 139.2: Exclude app from using doze mode

 

779

 ............................................................................................... 

Chapter 140: Colors

 

780

 ................................................................................................................................................. 

Section 140.1: Color Manipulation

 

780

 ............................................................................................................................ 

Chapter 141: Keyboard

 

781

 .......................................................................................................................................... 

Section 141.1: Register a callback for keyboard open and close

 

781

 .......................................................................... 

Section 141.2: Hide keyboard when user taps anywhere else on the screen

 

781

 ...................................................... 

Chapter 142: RenderScript

 

783

 .................................................................................................................................. 

Section 142.1: Getting Started

 

783

 ................................................................................................................................... 

Section 142.2: Blur a View

 

789

 ......................................................................................................................................... 

Section 142.3: Blur an image

 

791

 .................................................................................................................................... 

Chapter 143: Fresco

 

794

 ................................................................................................................................................. 

Section 143.1: Getting Started with Fresco

 

794

 .............................................................................................................. 

Section 143.2: Using OkHttp 3 with Fresco

 

795

 .............................................................................................................. 


background image

Section 143.3: JPEG Streaming with Fresco using DraweeController

 

795

 .................................................................. 

Chapter 144: Swipe to Refresh

 

796

 ......................................................................................................................... 

Section 144.1: How to add Swipe-to-Refresh To your app

 

796

 .................................................................................... 

Section 144.2: Swipe To Refresh with RecyclerView

 

796

 .............................................................................................. 

Chapter 145: Creating Splash screen

 

798

 ............................................................................................................. 

Section 145.1: Splash screen with animation

 

798

 ........................................................................................................... 

Section 145.2: A basic splash screen

 

799

 ....................................................................................................................... 

Chapter 146: IntentService

 

802

 .................................................................................................................................. 

Section 146.1: Creating an IntentService

 

802

 .................................................................................................................. 

Section 146.2: Basic IntentService Example

 

802

 ............................................................................................................ 

Section 146.3: Sample Intent Service

 

803

 ....................................................................................................................... 

Chapter 147: Implicit Intents

 

805

 ............................................................................................................................... 

Section 147.1: Implicit and Explicit Intents

 

805

 ................................................................................................................ 

Section 147.2: Implicit Intents

 

805

 ................................................................................................................................... 

Chapter 148: Publish to Play Store

 

806

 .................................................................................................................. 

Section 148.1: Minimal app submission guide

 

806

 ......................................................................................................... 

Chapter 149: Universal Image Loader

 

808

 ........................................................................................................... 

Section 149.1: Basic usage

 

808

 ........................................................................................................................................ 

Section 149.2: Initialize Universal Image Loader

 

808

 .................................................................................................... 

Chapter 150: Image Compression

 

809

 .................................................................................................................... 

Section 150.1: How to compress image without size change

 

809

 ................................................................................ 

Chapter 151: 9-Patch Images

 

812

 ............................................................................................................................... 

Section 151.1: Basic rounded corners

 

812

 ....................................................................................................................... 

Section 151.2: Optional padding lines

 

812

 ...................................................................................................................... 

Section 151.3: Basic spinner

 

813

 ...................................................................................................................................... 

Chapter 152: Email Validation

 

814

 ............................................................................................................................ 

Section 152.1: Email address validation

 

814

 ................................................................................................................... 

Section 152.2: Email Address validation with using Patterns

 

814

 ................................................................................ 

Chapter 153: Bottom Sheets

 

815

 ............................................................................................................................... 

Section 153.1: Quick Setup

 

815

 ......................................................................................................................................... 

Section 153.2: BottomSheetBehavior like Google maps

 

815

 ........................................................................................ 

Section 153.3: Modal bottom sheets with BottomSheetDialog

 

822

 ............................................................................. 

Section 153.4: Modal bottom sheets with BottomSheetDialogFragment

 

822

 ............................................................ 

Section 153.5: Persistent Bottom Sheets

 

822

 ................................................................................................................. 

Section 153.6: Open BottomSheet DialogFragment in Expanded mode by default

 

823

 .......................................... 

Chapter 154: EditText

 

825

 ............................................................................................................................................. 

Section 154.1: Working with EditTexts

 

825

 ...................................................................................................................... 

Section 154.2: Customizing the InputType

 

827

 .............................................................................................................. 

Section 154.3: Icon or button inside Custom Edit Text and its action and click listeners

 

827

 ................................... 

Section 154.4: Hiding SoftKeyboard

 

829

 ........................................................................................................................ 

Section 154.5: `inputype` attribute

 

830

 ............................................................................................................................ 

Chapter 155: Speech to Text Conversion

 

832

 ...................................................................................................... 

Section 155.1: Speech to Text With Default Google Prompt Dialog

 

832

 ...................................................................... 

Section 155.2: Speech to Text without Dialog

 

833

 ......................................................................................................... 

Chapter 156: Installing apps with ADB

 

835

 ........................................................................................................... 

Section 156.1: Uninstall an app

 

835

 ................................................................................................................................. 

Section 156.2: Install all apk file in directory

 

835

 ........................................................................................................... 

Section 156.3: Install an app

 

835

 ..................................................................................................................................... 


background image

Chapter 157: Count Down Timer

 

836

 ....................................................................................................................... 

Section 157.1: Creating a simple countdown timer

 

836

 ................................................................................................. 

Section 157.2: A More Complex Example

 

836

 ................................................................................................................ 

Chapter 158: Barcode and QR code reading

 

838

 .............................................................................................. 

Section 158.1: Using QRCodeReaderView (based on Zxing)

 

838

 ................................................................................. 

Chapter 159: Android PayPal Gateway Integration

 

840

 ................................................................................ 

Section 159.1: Setup PayPal in your android code

 

840

 ................................................................................................. 

Chapter 160: Drawables

 

842

 ........................................................................................................................................ 

Section 160.1: Custom Drawable

 

842

 .............................................................................................................................. 

Section 160.2: Tint a drawable

 

843

 ................................................................................................................................. 

Section 160.3: Circular View

 

844

 ...................................................................................................................................... 

Section 160.4: Make View with rounded corners

 

844

 .................................................................................................... 

Chapter 161: TransitionDrawable

 

846

 ...................................................................................................................... 

Section 161.1: Animate views background color (switch-color) with TransitionDrawable

 

846

 .................................. 

Section 161.2: Add transition or Cross-fade between two images

 

846

 ....................................................................... 

Chapter 162: Vector Drawables

 

848

 ......................................................................................................................... 

Section 162.1: Importing SVG file as VectorDrawable

 

848

 ............................................................................................ 

Section 162.2: VectorDrawable Usage Example

 

850

 .................................................................................................... 

Section 162.3: VectorDrawable xml example

 

851

 ......................................................................................................... 

Chapter 163: VectorDrawable and AnimatedVectorDrawable

 

852

 ......................................................... 

Section 163.1: Basic VectorDrawable

 

852

 ....................................................................................................................... 

Section 163.2: <group> tags

 

852

 ...................................................................................................................................... 

Section 163.3: Basic AnimatedVectorDrawable

 

853

 ...................................................................................................... 

Section 163.4: Using Strokes

 

854

 ..................................................................................................................................... 

Section 163.5: Using <clip-path>

 

856

 ............................................................................................................................... 

Section 163.6: Vector compatibility through AppCompat

 

856

 ..................................................................................... 

Chapter 164: Port Mapping using Cling library in Android

 

858

 .................................................................. 

Section 164.1: Mapping a NAT port

 

858

 .......................................................................................................................... 

Section 164.2: Adding Cling Support to your Android Project

 

858

 .............................................................................. 

Chapter 165: Creating Overlay (always-on-top) Windows

 

860

 .................................................................. 

Section 165.1: Popup overlay

 

860

 .................................................................................................................................... 

Section 165.2: Granting SYSTEM_ALERT_WINDOW Permission on android 6.0 and above

 

860

 ............................ 

Chapter 166: ExoPlayer

 

862

 .......................................................................................................................................... 

Section 166.1: Add ExoPlayer to the project

 

862

 ............................................................................................................ 

Section 166.2: Using ExoPlayer

 

862

 ................................................................................................................................ 

Section 166.3: Main steps to play video & audio using the standard TrackRenderer implementations

863

 ............................................................................................................................................................................. 

Chapter 167: XMPP register login and chat simple example

 

864

 .............................................................. 

Section 167.1: XMPP register login and chat basic example

 

864

 .................................................................................. 

Chapter 168: Android Authenticator

 

873

 ............................................................................................................... 

Section 168.1: Basic Account Authenticator Service

 

873

 ............................................................................................... 

Chapter 169: AudioManager

 

876

 ................................................................................................................................ 

Section 169.1: Requesting Transient Audio Focus

 

876

 .................................................................................................. 

Section 169.2: Requesting Audio Focus

 

876

 ................................................................................................................... 

Chapter 170: AudioTrack

 

877

 ....................................................................................................................................... 

Section 170.1: Generate tone of a specific frequency

 

877

 ............................................................................................ 

Chapter 171: Job Scheduling

 

878

 ............................................................................................................................... 

Section 171.1: Basic usage

 

878

 ......................................................................................................................................... 


background image

Chapter 172: Accounts and AccountManager

 

880

 ............................................................................................ 

Section 172.1: Understanding custom accounts/authentication

 

880

 .......................................................................... 

Chapter 173: Integrate OpenCV into Android Studio

 

882

 .............................................................................. 

Section 173.1: Instructions

 

882

 .......................................................................................................................................... 

Chapter 174: MVVM (Architecture)

 

890

 .................................................................................................................. 

Section 174.1: MVVM Example using DataBinding Library

 

890

 .................................................................................... 

Chapter 175: ORMLite in android

 

897

 ...................................................................................................................... 

Section 175.1: Android OrmLite over SQLite example

 

897

 ............................................................................................ 

Chapter 176: Retrofit2 with RxJava

 

901

 ................................................................................................................. 

Section 176.1: Retrofit2 with RxJava

 

901

 ........................................................................................................................ 

Section 176.2: Nested requests example: multiple requests, combine results

 

902

 .................................................... 

Section 176.3: Retrofit with RxJava to fetch data asyncronously

 

903

 ........................................................................ 

Chapter 177: ShortcutManager

 

906

 ......................................................................................................................... 

Section 177.1: Dynamic Launcher Shortcuts

 

906

 ............................................................................................................ 

Chapter 178: LruCache

 

907

 ........................................................................................................................................... 

Section 178.1: Adding a Bitmap(Resource) to the cache

 

907

 ....................................................................................... 

Section 178.2: Initialising the cache

 

907

 .......................................................................................................................... 

Section 178.3: Getting a Bitmap(Resouce) from the cache

 

907

 .................................................................................. 

Chapter 179: Jenkins CI setup for Android Projects

 

908

 ................................................................................ 

Section 179.1: Step by step approach to set up Jenkins for Android

 

908

 ................................................................... 

Chapter 180: fastlane

 

912

 ............................................................................................................................................. 

Section 180.1: Fastfile lane to build and install all flavors for given build type to a device

 

912

 ............................... 

Section 180.2: Fastfile to build and upload multiple flavors to Beta by Crashlytics

 

912

 .......................................... 

Chapter 181: Define step value (increment) for custom RangeSeekBar

 

915

 ..................................... 

Section 181.1: Define a step value of 7

 

915

 ..................................................................................................................... 

Chapter 182: Getting started with OpenGL ES 2.0+

 

916

 ................................................................................. 

Section 182.1: Setting up GLSurfaceView and OpenGL ES 2.0+

 

916

 ............................................................................ 

Section 182.2: Compiling and Linking GLSL-ES Shaders from asset file

 

916

 .............................................................. 

Chapter 183: Check Data Connection

 

919

 ............................................................................................................. 

Section 183.1: Check data connection

 

919

 ...................................................................................................................... 

Section 183.2: Check connection using ConnectivityManager

 

919

 ............................................................................. 

Section 183.3: Use network intents to perform tasks while data is allowed

 

919

 ........................................................ 

Chapter 184: Java on Android

 

920

 ........................................................................................................................... 

Section 184.1: Java 8 features subset with Retrolambda

 

920

 ...................................................................................... 

Chapter 185: Android Java Native Interface (JNI)

 

922

 .................................................................................. 

Section 185.1: How to call functions in a native library via the JNI interface

 

922

 ...................................................... 

Section 185.2: How to call a Java method from native code

 

922

 ............................................................................... 

Section 185.3: Utility method in JNI layer

 

923

 ................................................................................................................ 

Chapter 186: Notification Channel Android O

 

925

 ............................................................................................ 

Section 186.1: Notification Channel

 

925

 .......................................................................................................................... 

Chapter 187: Robolectric

 

931

 ....................................................................................................................................... 

Section 187.1: Robolectric test

 

931

 .................................................................................................................................. 

Section 187.2: Configuration

 

931

 ..................................................................................................................................... 

Chapter 188: Moshi

 

933

 ................................................................................................................................................... 

Section 188.1: JSON into Java

 

933

 .................................................................................................................................. 

Section 188.2: serialize Java objects as JSON

 

933

 ....................................................................................................... 

Section 188.3: Built in Type Adapters

 

933

 ...................................................................................................................... 


background image

Chapter 189: Strict Mode Policy : A tool to catch the bug in the Compile Time.

 

935

 ...................... 

Section 189.1: The below Code Snippet is to setup the StrictMode for Thread Policies. This Code is to be set

at the entry points to our application

 

935

 ............................................................................................................. 

Section 189.2: The below code deals with leaks of memory, like it detects when in SQLLite finalize is called

or not

 

935

 .................................................................................................................................................................. 

Chapter 190: Internationalization and localization (I18N and L10N)

 

936

 ............................................... 

Section 190.1: Planning for localization : enable RTL support in Manifest

 

936

 ........................................................... 

Section 190.2: Planning for localization : Add RTL support in Layouts

 

936

 ................................................................ 

Section 190.3: Planning for localization : Test layouts for RTL

 

937

 ............................................................................. 

Section 190.4: Coding for Localization : Creating default strings and resources

 

937

 ............................................... 

Section 190.5: Coding for localization : Providing alternative strings

 

938

 .................................................................. 

Section 190.6: Coding for localization : Providing alternate layouts

 

939

 .................................................................... 

Chapter 191: Fast way to setup Retrolambda on an android project.

 

940

 .......................................... 

Section 191.1: Setup and example how to use:

 

940

 ........................................................................................................ 

Chapter 192: How to use SparseArray

 

942

 ........................................................................................................... 

Section 192.1: Basic example using SparseArray

 

942

 ................................................................................................... 

Chapter 193: Shared Element Transitions

 

944

 .................................................................................................... 

Section 193.1: Shared Element Transition between two Fragments

 

944

 ..................................................................... 

Chapter 194: Android Things

 

947

 .............................................................................................................................. 

Section 194.1: Controlling a Servo Motor

 

947

 ................................................................................................................. 

Chapter 195: Library Dagger 2: Dependency Injection in Applications

 

949

 ........................................ 

Section 195.1: Create @Module Class and @Singleton annotation for Object

 

949

 ................................................... 

Section 195.2: Request Dependencies in Dependent Objects

 

949

 .............................................................................. 

Section 195.3: Connecting @Modules with @Inject

 

949

 ................................................................................................ 

Section 195.4: Using @Component Interface to Obtain Objects

 

950

 .......................................................................... 

Chapter 196: JCodec

 

951

 ................................................................................................................................................ 

Section 196.1: Getting Started

 

951

 ................................................................................................................................... 

Section 196.2: Getting frame from movie

 

951

 ............................................................................................................... 

Chapter 197: Formatting phone numbers with pattern.

 

952

 ....................................................................... 

Section 197.1: Patterns + 1 (786) 1234 5678

 

952

 .............................................................................................................. 

Chapter 198: Paint

 

953

 .................................................................................................................................................... 

Section 198.1: Creating a Paint

 

953

 ................................................................................................................................. 

Section 198.2: Setting up Paint for text

 

953

 .................................................................................................................... 

Section 198.3: Setting up Paint for drawing shapes

 

954

 ............................................................................................... 

Section 198.4: Setting flags

 

954

 ....................................................................................................................................... 

Chapter 199: What is ProGuard? What is use in Android?

 

955

 ................................................................... 

Section 199.1: Shrink your code and resources with proguard

 

955

 ............................................................................. 

Chapter 200: Create Android Custom ROMs

 

957

 .............................................................................................. 

Section 200.1: Making Your Machine Ready for Building!

 

957

 ..................................................................................... 

Chapter 201: Genymotion for android

 

958

 ........................................................................................................... 

Section 201.1: Installing Genymotion, the free version

 

958

 ........................................................................................... 

Section 201.2: Google framework on Genymotion

 

959

 ................................................................................................ 

Chapter 202: ConstraintSet

 

960

 ................................................................................................................................. 

Section 202.1: ConstraintSet with ContraintLayout Programmatically

 

960

 ............................................................... 

Chapter 203: CleverTap

 

961

 ........................................................................................................................................ 

Section 203.1: Setting the debug level

 

961

 ..................................................................................................................... 

Section 203.2: Get an instance of the SDK to record events

 

961

 ................................................................................ 

Chapter 204: Publish a library to Maven Repositories

 

962

 ......................................................................... 


background image

Section 204.1: Publish .aar file to Maven

 

962

 ................................................................................................................. 

Chapter 205: adb shell

 

964

 ........................................................................................................................................... 

Section 205.1: Granting & revoking API 23+ permissions

 

964

 ...................................................................................... 

Section 205.2: Send text, key pressed and touch events to Android Device via ADB

 

964

 ....................................... 

Section 205.3: List packages

 

966

 .................................................................................................................................... 

Section 205.4: Recording the display

 

966

 ...................................................................................................................... 

Section 205.5: Open Developer Options

 

967

 ................................................................................................................. 

Section 205.6: Set Date/Time via adb

 

967

 .................................................................................................................... 

Section 205.7: Generating a "Boot Complete" broadcast

 

968

 .................................................................................... 

Section 205.8: Print application data

 

968

 ...................................................................................................................... 

Section 205.9: Changing file permissions using chmod command

 

968

 ..................................................................... 

Section 205.10: View external/secondary storage content

 

969

 .................................................................................. 

Section 205.11: kill a process inside an Android device

 

969

 ......................................................................................... 

Chapter 206: Ping ICMP

 

971

 ......................................................................................................................................... 

Section 206.1: Performs a single Ping

 

971

 ..................................................................................................................... 

Chapter 207: AIDL

 

972

 ..................................................................................................................................................... 

Section 207.1: AIDL Service

 

972

 ....................................................................................................................................... 

Chapter 208: Android game development

 

974

 .................................................................................................. 

Section 208.1: Game using Canvas and SurfaceView

 

974

 ........................................................................................... 

Chapter 209: Android programming with Kotlin

 

980

 ...................................................................................... 

Section 209.1: Installing the Kotlin plugin

 

980

 ................................................................................................................ 

Section 209.2: Configuring an existing Gradle project with Kotlin

 

981

 ....................................................................... 

Section 209.3: Creating a new Kotlin Activity

 

982

 ......................................................................................................... 

Section 209.4: Converting existing Java code to Kotlin

 

983

 ........................................................................................ 

Section 209.5: Starting a new Activity

 

983

 ..................................................................................................................... 

Chapter 210: Android-x86 in VirtualBox

 

984

 ........................................................................................................ 

Section 210.1: Virtual hard drive Setup for SDCARD Support

 

984

 ............................................................................... 

Section 210.2: Installation in partition

 

986

 ...................................................................................................................... 

Section 210.3: Virtual Machine setup

 

988

 ....................................................................................................................... 

Chapter 211: Leakcanary

 

989

 ....................................................................................................................................... 

Section 211.1: Implementing a Leak Canary in Android Application

 

989

 ..................................................................... 

Chapter 212: Okio

 

990

 ...................................................................................................................................................... 

Section 212.1: Download / Implement

 

990

 ..................................................................................................................... 

Section 212.2: PNG decoder

 

990

 ..................................................................................................................................... 

Section 212.3: ByteStrings and Buers

 

990

 ................................................................................................................... 

Chapter 213: Bluetooth Low Energy

 

992

 ................................................................................................................ 

Section 213.1: Finding BLE Devices

 

992

 ........................................................................................................................... 

Section 213.2: Connecting to a GATT Server

 

992

 .......................................................................................................... 

Section 213.3: Writing and Reading from Characteristics

 

993

 ..................................................................................... 

Section 213.4: Subscribing to Notifications from the Gatt Server

 

994

 ......................................................................... 

Section 213.5: Advertising a BLE Device

 

994

 .................................................................................................................. 

Section 213.6: Using a Gatt Server

 

995

 ........................................................................................................................... 

Chapter 214: Looper

 

997

 ................................................................................................................................................ 

Section 214.1: Create a simple LooperThread

 

997

 ........................................................................................................ 

Section 214.2: Run a loop with a HandlerThread

 

997

 ................................................................................................... 

Chapter 215: Annotation Processor

 

998

 ................................................................................................................. 

Section 215.1: @NonNull Annotation

 

998

 ........................................................................................................................ 

Section 215.2: Types of Annotations

 

998

 ....................................................................................................................... 

Section 215.3: Creating and Using Custom Annotations

 

998

 ....................................................................................... 


background image

Chapter 216: SyncAdapter with periodically do sync of data

 

1000

 ......................................................... 

Section 216.1: Sync adapter with every min requesting value from server

 

1000

 ...................................................... 

Chapter 217: Fastjson

 

1010

 ........................................................................................................................................... 

Section 217.1: Parsing JSON with Fastjson

 

1010

 ............................................................................................................ 

Section 217.2: Convert the data of type Map to JSON String

 

1011

 ............................................................................ 

Chapter 218: JSON in Android with org.json

 

1013

 ............................................................................................. 

Section 218.1: Creating a simple JSON object

 

1013

 ...................................................................................................... 

Section 218.2: Create a JSON String with null value

 

1013

 ............................................................................................ 

Section 218.3: Add JSONArray to JSONObject

 

1013

 .................................................................................................... 

Section 218.4: Parse simple JSON object

 

1014

 ............................................................................................................. 

Section 218.5: Check for the existence of fields on JSON

 

1015

 ................................................................................... 

Section 218.6: Create nested JSON object

 

1015

 ........................................................................................................... 

Section 218.7: Updating the elements in the JSON

 

1016

 ............................................................................................. 

Section 218.8: Using JsonReader to read JSON from a stream

 

1016

 ........................................................................ 

Section 218.9: Working with null-string when parsing json

 

1018

 ................................................................................. 

Section 218.10: Handling dynamic key for JSON response

 

1019

 ................................................................................ 

Chapter 219: Gson

 

1021

 ................................................................................................................................................... 

Section 219.1: Parsing JSON with Gson

 

1021

 ................................................................................................................. 

Section 219.2: Adding a custom Converter to Gson

 

1023

 ............................................................................................ 

Section 219.3: Parsing a List<String> with Gson

 

1023

 ................................................................................................... 

Section 219.4: Adding Gson to your project

 

1024

 ......................................................................................................... 

Section 219.5: Parsing JSON to Generic Class Object with Gson

 

1024

 ....................................................................... 

Section 219.6: Using Gson with inheritance

 

1025

 .......................................................................................................... 

Section 219.7: Parsing JSON property to enum with Gson

 

1027

 ................................................................................. 

Section 219.8: Using Gson to load a JSON file from disk

 

1027

 .................................................................................... 

Section 219.9: Using Gson as serializer with Retrofit

 

1027

 ........................................................................................... 

Section 219.10: Parsing json array to generic class using Gson

 

1028

 ......................................................................... 

Section 219.11: Custom JSON Deserializer using Gson

 

1029

 ........................................................................................ 

Section 219.12: JSON Serialization/Deserialization with AutoValue and Gson

 

1030

 ................................................. 

Chapter 220: Android Architecture Components

 

1032

 ................................................................................... 

Section 220.1: Using Lifecycle in AppCompatActivity

 

1032

 ......................................................................................... 

Section 220.2: Add Architecture Components

 

1032

 ..................................................................................................... 

Section 220.3: ViewModel with LiveData transformations

 

1033

 ................................................................................. 

Section 220.4: Room peristence

 

1034

 ............................................................................................................................ 

Section 220.5: Custom LiveData

 

1036

 ........................................................................................................................... 

Section 220.6: Custom Lifecycle-aware component

 

1036

 ........................................................................................... 

Chapter 221: Jackson

 

1038

 ............................................................................................................................................ 

Section 221.1: Full Data Binding Example

 

1038

 .............................................................................................................. 

Chapter 222: Smartcard

 

1040

 ..................................................................................................................................... 

Section 222.1: Smart card send and receive

 

1040

 ........................................................................................................ 

Chapter 223: Security

 

1042

 ........................................................................................................................................... 

Section 223.1: Verifying App Signature - Tamper Detection

 

1042

 .............................................................................. 

Chapter 224: How to store passwords securely

 

1043

 .................................................................................... 

Section 224.1: Using AES for salted password encryption

 

1043

 .................................................................................. 

Chapter 225: Secure SharedPreferences

 

1046

 ................................................................................................... 

Section 225.1: Securing a Shared Preference

 

1046

 ....................................................................................................... 

Chapter 226: Secure SharedPreferences

 

1047

 ................................................................................................... 

Section 226.1: Securing a Shared Preference

 

1047

 ....................................................................................................... 


background image

Chapter 227: SQLite

 

1048

 ............................................................................................................................................... 

Section 227.1: onUpgrade() method

 

1048

 ..................................................................................................................... 

Section 227.2: Reading data from a Cursor

 

1048

 ......................................................................................................... 

Section 227.3: Using the SQLiteOpenHelper class

 

1050

 ............................................................................................... 

Section 227.4: Insert data into database

 

1051

 .............................................................................................................. 

Section 227.5: Bulk insert

 

1051

 ....................................................................................................................................... 

Section 227.6: Create a Contract, Helper and Provider for SQLite in Android

 

1052

 ................................................. 

Section 227.7: Delete row(s) from the table

 

1056

 ......................................................................................................... 

Section 227.8: Updating a row in a table

 

1057

 ............................................................................................................. 

Section 227.9: Performing a Transaction

 

1057

 ............................................................................................................. 

Section 227.10: Create Database from assets folder

 

1058

 .......................................................................................... 

Section 227.11: Store image into SQLite

 

1060

 ................................................................................................................ 

Section 227.12: Exporting and importing a database

 

1062

 ......................................................................................... 

Chapter 228: Accessing SQLite databases using the ContentValues class

 

1064

 .............................. 

Section 228.1: Inserting and updating rows in a SQLite database

 

1064

 ..................................................................... 

Chapter 229: Firebase

 

1065

 .......................................................................................................................................... 

Section 229.1: Add Firebase to Your Android Project

 

1065

 .......................................................................................... 

Section 229.2: Updating a Firebase users's email

 

1066

 ............................................................................................... 

Section 229.3: Create a Firebase user

 

1067

 .................................................................................................................. 

Section 229.4: Change Password

 

1068

 .......................................................................................................................... 

Section 229.5: Firebase Cloud Messaging

 

1069

 ............................................................................................................ 

Section 229.6: Firebase Storage Operations

 

1071

 ........................................................................................................ 

Section 229.7: Firebase Realtime Database: how to set/get data

 

1077

 .................................................................... 

Section 229.8: Demo of FCM based notifications

 

1078

 ................................................................................................ 

Section 229.9: Sign In Firebase user with email and password

 

1088

 ......................................................................... 

Section 229.10: Send Firebase password reset email

 

1089

 ......................................................................................... 

Section 229.11: Re-Authenticate Firebase user

 

1091

 ..................................................................................................... 

Section 229.12: Firebase Sign Out

 

1092

 ......................................................................................................................... 

Chapter 230: Firebase Cloud Messaging

 

1093

 .................................................................................................... 

Section 230.1: Set Up a Firebase Cloud Messaging Client App on Android

 

1093

 ...................................................... 

Section 230.2: Receive Messages

 

1093

 .......................................................................................................................... 

Section 230.3: This code that i have implemnted in my app for pushing image,message and also link for

opening in your webView

 

1094

 ............................................................................................................................... 

Section 230.4: Registration token

 

1095

 .......................................................................................................................... 

Section 230.5: Subscribe to a topic

 

1096

 ....................................................................................................................... 

Chapter 231: Firebase Realtime DataBase

 

1097

 ................................................................................................ 

Section 231.1: Quick setup

 

1097

 ....................................................................................................................................... 

Section 231.2: Firebase Realtime DataBase event handler

 

1097

 ................................................................................ 

Section 231.3: Understanding firebase JSON database

 

1098

 ..................................................................................... 

Section 231.4: Retrieving data from firebase

 

1099

 ....................................................................................................... 

Section 231.5: Listening for child updates

 

1100

 ............................................................................................................. 

Section 231.6: Retrieving data with pagination

 

1101

 .................................................................................................... 

Section 231.7: Denormalization: Flat Database Structure

 

1102

 ................................................................................... 

Section 231.8: Designing and understanding how to retrieve realtime data from the Firebase Database

1104

 ........................................................................................................................................................................... 

Chapter 232: Firebase App Indexing

 

1107

 ............................................................................................................. 

Section 232.1: Supporting Http URLs

 

1107

 ..................................................................................................................... 

Section 232.2: Add AppIndexing API

 

1108

 ..................................................................................................................... 

Chapter 233: Firebase Crash Reporting

 

1110

 ...................................................................................................... 

Section 233.1: How to report an error

 

1110

 ................................................................................................................... 


background image

Section 233.2: How to add Firebase Crash Reporting to your app

 

1110

 ................................................................... 

Chapter 234: Twitter APIs

 

1112

 .................................................................................................................................. 

Section 234.1: Creating login with twitter button and attach a callback to it

 

1112

 ................................................... 

Chapter 235: Youtube-API

 

1114

 .................................................................................................................................. 

Section 235.1: Activity extending YouTubeBaseActivity

 

1114

 ...................................................................................... 

Section 235.2: Consuming YouTube Data API on Android

 

1115

 ................................................................................. 

Section 235.3: Launching StandAlonePlayerActivity

 

1117

 ........................................................................................... 

Section 235.4: YoutubePlayerFragment in portrait Activty

 

1118

 ................................................................................ 

Section 235.5: YouTube Player API

 

1120

 ........................................................................................................................ 

Chapter 236: Integrate Google Sign In

 

1123

 ........................................................................................................ 

Section 236.1: Google Sign In with Helper class

 

1123

 ................................................................................................... 

Chapter 237: Google signin integration on android

 

1126

 ............................................................................. 

Section 237.1: Integration of google Auth in your project. (Get a configuration file)

 

1126

 ....................................... 

Section 237.2: Code Implementation Google SignIn

 

1126

 ........................................................................................... 

Chapter 238: Google Awareness APIs

 

1128

 .......................................................................................................... 

Section 238.1: Get changes for location within a certain range using Fence API

 

1128

 ............................................. 

Section 238.2: Get current location using Snapshot API

 

1129

 ..................................................................................... 

Section 238.3: Get changes in user activity with Fence API

 

1129

 ................................................................................ 

Section 238.4: Get current user activity using Snapshot API

 

1130

 .............................................................................. 

Section 238.5: Get headphone state with Snapshot API

 

1130

 ..................................................................................... 

Section 238.6: Get nearby places using Snapshot API

 

1131

 ........................................................................................ 

Section 238.7: Get current weather using Snapshot API

 

1131

 ..................................................................................... 

Chapter 239: Google Maps API v2 for Android

 

1132

 ........................................................................................ 

Section 239.1: Custom Google Map Styles

 

1132

 ............................................................................................................ 

Section 239.2: Default Google Map Activity

 

1143

 ......................................................................................................... 

Section 239.3: Show Current Location in a Google Map

 

1144

 ..................................................................................... 

Section 239.4: Change Oset

 

1150

 ................................................................................................................................ 

Section 239.5: MapView: embedding a GoogleMap in an existing layout

 

1150

 ........................................................ 

Section 239.6: Get debug SHA1 fingerprint

 

1152

 ........................................................................................................... 

Section 239.7: Adding markers to a map

 

1153

 ............................................................................................................. 

Section 239.8: UISettings

 

1153

 ........................................................................................................................................ 

Section 239.9: InfoWindow Click Listener

 

1154

 ............................................................................................................. 

Section 239.10: Obtaining the SH1-Fingerprint of your certificate keystore file

 

1155

 ............................................... 

Section 239.11: Do not launch Google Maps when the map is clicked (lite mode)

 

1156

 ........................................... 

Chapter 240: Google Drive API

 

1157

 ........................................................................................................................ 

Section 240.1: Integrate Google Drive in Android

 

1157

 ................................................................................................ 

Section 240.2: Create a File on Google Drive

 

1165

 ...................................................................................................... 

Chapter 241: Displaying Google Ads

 

1168

 ............................................................................................................ 

Section 241.1: Adding Interstitial Ad

 

1168

 ....................................................................................................................... 

Section 241.2: Basic Ad Setup

 

1169

 ................................................................................................................................ 

Chapter 242: AdMob

 

1171

 ............................................................................................................................................. 

Section 242.1: Implementing

 

1171

 .................................................................................................................................. 

Chapter 243: Google Play Store

 

1173

 ..................................................................................................................... 

Section 243.1: Open Google Play Store Listing for your app

 

1173

 .............................................................................. 

Section 243.2: Open Google Play Store with the list of all applications from your publisher account

 

1173

 .......... 

Chapter 244: Sign your Android App for Release

 

1175

 ................................................................................ 

Section 244.1: Sign your App

 

1175

 .................................................................................................................................. 

Section 244.2: Configure the build.gradle with signing configuration

 

1176

 ............................................................... 


background image

Chapter 245: TensorFlow

 

1178

 ................................................................................................................................... 

Section 245.1: How to use

 

1178

 ....................................................................................................................................... 

Chapter 246: Android Vk Sdk

 

1179

 ........................................................................................................................... 

Section 246.1: Initialization and login

 

1179

 ..................................................................................................................... 

Chapter 247: Project SDK versions

 

1181

 ............................................................................................................... 

Section 247.1: Defining project SDK versions

 

1181

 ....................................................................................................... 

Chapter 248: Facebook SDK for Android

 

1182

 .................................................................................................. 

Section 248.1: How to add Facebook Login in Android

 

1182

 ....................................................................................... 

Section 248.2: Create your own custom button for Facebook login

 

1184

 ................................................................. 

Section 248.3: A minimalistic guide to Facebook login/signup implementation

 

1185

 ............................................. 

Section 248.4: Setting permissions to access data from the Facebook profile

 

1186

 ............................................... 

Section 248.5: Logging out of Facebook

 

1186

 .............................................................................................................. 

Chapter 249: Thread

 

1187

 ............................................................................................................................................ 

Section 249.1: Thread Example with its description

 

1187

 ............................................................................................. 

Section 249.2: Updating the UI from a Background Thread

 

1187

 .............................................................................. 

Chapter 250: AsyncTask

 

1189

 ..................................................................................................................................... 

Section 250.1: Basic Usage

 

1189

 ..................................................................................................................................... 

Section 250.2: Pass Activity as WeakReference to avoid memory leaks

 

1191

 ......................................................... 

Section 250.3: Download Image using AsyncTask in Android

 

1192

 ........................................................................... 

Section 250.4: Canceling AsyncTask

 

1195

 .................................................................................................................... 

Section 250.5: AsyncTask: Serial Execution and Parallel Execution of Task

 

1195

 .................................................... 

Section 250.6: Order of execution

 

1198

 ......................................................................................................................... 

Section 250.7: Publishing progress

 

1198

 ....................................................................................................................... 

Chapter 251: Testing UI with Espresso

 

1200

 ......................................................................................................... 

Section 251.1: Overall Espresso

 

1200

 .............................................................................................................................. 

Section 251.2: Espresso simple UI test

 

1202

 .................................................................................................................. 

Section 251.3: Open Close DrawerLayout 

1205

 ............................................................................................................. 

Section 251.4: Set Up Espresso

 

1206

 .............................................................................................................................. 

Section 251.5: Performing an action on a view

 

1207

 .................................................................................................... 

Section 251.6: Finding a view with onView

 

1207

 ............................................................................................................ 

Section 251.7: Create Espresso Test Class

 

1207

 ............................................................................................................ 

Section 251.8: Up Navigation

 

1208

 ................................................................................................................................. 

Section 251.9: Group a collection of test classes in a test suite

 

1208

 .......................................................................... 

Section 251.10: Espresso custom matchers

 

1209

 .......................................................................................................... 

Chapter 252: Writing UI tests - Android

 

1212

 ...................................................................................................... 

Section 252.1: MockWebServer example

 

1212

 .............................................................................................................. 

Section 252.2: IdlingResource

 

1214

 ................................................................................................................................ 

Chapter 253: Unit testing in Android with JUnit

 

1218

 ..................................................................................... 

Section 253.1: Moving Business Logic Out of Android Componenets

 

1218

 ................................................................ 

Section 253.2: Creating Local unit tests

 

1220

 ................................................................................................................ 

Section 253.3: Getting started with JUnit

 

1221

 .............................................................................................................. 

Section 253.4: Exceptions

 

1224

 ....................................................................................................................................... 

Section 253.5: Static import

 

1225

 ................................................................................................................................... 

Chapter 254: Inter-app UI testing with UIAutomator

 

1226

 .......................................................................... 

Section 254.1: Prepare your project and write the first UIAutomator test

 

1226

 ........................................................ 

Section 254.2: Writing more complex tests using the UIAutomatorViewer

 

1226

 ...................................................... 

Section 254.3: Creating a test suite of UIAutomator tests

 

1228

 .................................................................................. 

Chapter 255: Lint Warnings

 

1229

 ............................................................................................................................... 

Section 255.1: Using tools:ignore in xml files

 

1229

 ........................................................................................................ 


background image

Section 255.2: Configure LintOptions with gradle

 

1229

 ............................................................................................... 

Section 255.3: Configuring lint checking in Java and XML source files

 

1230

 ............................................................ 

Section 255.4: How to configure the lint.xml file

 

1230

 .................................................................................................. 

Section 255.5: Mark Suppress Warnings 

1231

 .............................................................................................................. 

Section 255.6: Importing resources without "Deprecated" error

 

1231

 ....................................................................... 

Chapter 256: Performance Optimization

 

1233

 ................................................................................................... 

Section 256.1: Save View lookups with the ViewHolder pattern

 

1233

 ......................................................................... 

Chapter 257: Android Kernel Optimization

 

1234

 ............................................................................................... 

Section 257.1: Low RAM Configuration

 

1234

 .................................................................................................................. 

Section 257.2: How to add a CPU Governor

 

1234

 ........................................................................................................ 

Section 257.3: I/O Schedulers

 

1236

 ................................................................................................................................ 

Chapter 258: Memory Leaks

 

1237

 ............................................................................................................................. 

Section 258.1: Avoid leaking Activities with AsyncTask

 

1237

 ....................................................................................... 

Section 258.2: Common memory leaks and how to fix them

 

1238

 ............................................................................ 

Section 258.3: Detect memory leaks with the LeakCanary library

 

1239

 ................................................................... 

Section 258.4: Anonymous callback in activities

 

1239

 ................................................................................................. 

Section 258.5: Activity Context in static classes

 

1240

 ................................................................................................... 

Section 258.6: Avoid leaking Activities with Listeners

 

1241

 ......................................................................................... 

Section 258.7: Avoid memory leaks with Anonymous Class, Handler, Timer Task, Thread

 

1246

 ........................... 

Chapter 259: Enhancing Android Performance Using Icon Fonts

 

1248

 ................................................. 

Section 259.1: How to integrate Icon fonts

 

1248

 ........................................................................................................... 

Section 259.2: TabLayout with icon fonts

 

1250

 ............................................................................................................ 

Chapter 260: Bitmap Cache

 

1252

 .............................................................................................................................. 

Section 260.1: Bitmap Cache Using LRU Cache

 

1252

 ................................................................................................... 

Chapter 261: Loading Bitmaps Eectively

 

1253

 ................................................................................................ 

Section 261.1: Load the Image from Resource from Android Device. Using Intents

 

1253

 ........................................ 

Chapter 262: Exceptions

 

1258

 ...................................................................................................................................... 

Section 262.1: ActivityNotFoundException

 

1258

 ............................................................................................................ 

Section 262.2: OutOfMemoryError

 

1258

 ........................................................................................................................ 

Section 262.3: Registering own Handler for unexpected exceptions

 

1258

 ................................................................ 

Section 262.4: UncaughtException

 

1260

 ........................................................................................................................ 

Section 262.5: NetworkOnMainThreadException

 

1260

 ................................................................................................ 

Section 262.6: DexException

 

1262

 .................................................................................................................................. 

Chapter 263: Logging and using Logcat

 

1263

 ..................................................................................................... 

Section 263.1: Filtering the logcat output

 

1263

 .............................................................................................................. 

Section 263.2: Logging

 

1264

 ........................................................................................................................................... 

Section 263.3: Using the Logcat

 

1266

 ............................................................................................................................ 

Section 263.4: Log with link to source directly from Logcat

 

1267

 ............................................................................... 

Section 263.5: Clear logs

 

1267

 ........................................................................................................................................ 

Section 263.6: Android Studio usage

 

1267

 ..................................................................................................................... 

Section 263.7: Generating Logging code

 

1268

 .............................................................................................................. 

Chapter 264: ADB (Android Debug Bridge)

 

1270

 ............................................................................................... 

Section 264.1: Connect ADB to a device via WiFi

 

1270

 ................................................................................................. 

Section 264.2: Direct ADB command to specific device in a multi-device setting

 

1272

 ........................................... 

Section 264.3: Taking a screenshot and video (for kitkat only) from a device display

 

1272

 .................................. 

Section 264.4: Pull (push) files from (to) the device

 

1273

 ............................................................................................ 

Section 264.5: Print verbose list of connected devices

 

1274

 ....................................................................................... 

Section 264.6: View logcat

 

1274

 ..................................................................................................................................... 

Section 264.7: View and pull cache files of an app

 

1275

 ............................................................................................. 


background image

Section 264.8: Clear application data

 

1275

 ................................................................................................................... 

Section 264.9: View an app's internal data (data/data/<sample.package.id>) on a device

 

1276

 ......................... 

Section 264.10: Install and run an application

 

1276

 ...................................................................................................... 

Section 264.11: Sending broadcast

 

1276

 ........................................................................................................................ 

Section 264.12: Backup

 

1277

 ........................................................................................................................................... 

Section 264.13: View available devices

 

1278

 ................................................................................................................. 

Section 264.14: Connect device by IP

 

1278

 .................................................................................................................... 

Section 264.15: Install ADB on Linux system

 

1279

 ......................................................................................................... 

Section 264.16: View activity stack

 

1279

 ........................................................................................................................ 

Section 264.17: Reboot device

 

1279

 ................................................................................................................................ 

Section 264.18: Read device information

 

1280

 .............................................................................................................. 

Section 264.19: List all permissions that require runtime grant from users on Android 6.0

 

1280

 ............................ 

Section 264.20: Turn on/o Wifi

 

1280

 ........................................................................................................................... 

Section 264.21: Start/stop adb

 

1280

 .............................................................................................................................. 

Chapter 265: Localization with resources in Android

 

1281

 .......................................................................... 

Section 265.1: Configuration types and qualifier names for each folder under the "res" directory

 

1281

 .............. 

Section 265.2: Adding translation to your Android app

 

1282

 ...................................................................................... 

Section 265.3: Type of resource directories under the "res" folder

 

1284

 ................................................................... 

Section 265.4: Change locale of android application programmatically

 

1284

 ......................................................... 

Section 265.5: Currency

 

1287

 .......................................................................................................................................... 

Chapter 266: Convert vietnamese string to english string Android

 

1288

 ............................................. 

Section 266.1: example:

 

1288

 ........................................................................................................................................... 

Section 266.2: Chuyển chuỗi Tiếng Việt thành chuỗi không dấu

 

1288

 ....................................................................... 

Credits

 

1289

 .......................................................................................................................................................................... 

You may also like

 

1301

 ................................................................................................................................................... 


background image

GoalKicker.com – Android™ Notes for Professionals

1

About

Please feel free to share this PDF with anyone for free,

latest version of this book can be downloaded from:

https://goalkicker.com/AndroidBook

This Android™ Notes for Professionals book is compiled from 

Stack Overflow

Documentation

, the content is written by the beautiful people at Stack Overflow.

Text content is released under Creative Commons BY-SA, see credits at the end

of this book whom contributed to the various chapters. Images may be copyright

of their respective owners unless otherwise specified

This is an unofficial free book created for educational purposes and is not

affiliated with official Android™ group(s) or company(s) nor Stack Overflow. All

trademarks and registered trademarks are the property of their respective

company owners

The information presented in this book is not guaranteed to be correct nor

accurate, use at your own risk

Please send feedback and corrections to 

[email protected]


background image

GoalKicker.com – Android™ Notes for Professionals

2

Chapter 1: Getting started with Android

Version API Level Version Code

Release Date

1.0

1

BASE

2008-09-23

1.1

2

BASE_1_1

2009-02-09

1.5

3

CUPCAKE

2009-04-27

1.6

4

DONUT

2009-09-15

2.0

5

ECLAIR

2009-10-26

2.0.1

6

ECLAIR_0_1

2009-12-03

2.1.x

7

ECLAIR_MR1

2010-01-12

2.2.x

8

FROYO

2010-05-20

2.3

9

GINGERBREAD

2010-12-06

2.3.3

10

GINGERBREAD_MR1

2011-02-09

3.0.x

11

HONEYCOMB

2011-02-22

3.1.x

12

HONEYCOMB_MR1

2011-05-10

3.2.x

13

HONEYCOMB_MR2

2011-07-15

4.0

14

ICE_CREAM_SANDWICH

2011-10-18

4.0.3

15

ICE_CREAM_SANDWICH_MR1

2011-12-16

4.1

16

JELLY_BEAN

2012-07-09

4.2

17

JELLY_BEAN_MR1

2012-11-13

4.3

18

JELLY_BEAN_MR2

2013-07-24

4.4

19

KITKAT

2013-10-31

4.4W

20

KITKAT_WATCH

2014-06-25

5.0

21

LOLLIPOP

2014-11-12

5.1

22

LOLLIPOP_MR1

2015-03-09

6.0

23

M

 (Marshmallow)

2015-10-05

7.0

24

N

 (Nougat)

2016-08-22

7.1

25

N_MR1

 (Nougat MR1)

2016-10-04

8.0

26

O

 (Developer Preview 4)

2017-07-24

Section 1.1: Creating a New Project

Set up Android Studio

Start by setting up Android Studio and then open it. Now, you're ready to make your first Android App!

Note: this guide is based on Android Studio 2.2, but the process on other versions is mainly the same.

Configure Your Project
Basic Configuration

You can start a new project in two ways:

Click 

Start a New Android Studio Project

 from the welcome screen.

Navigate to 

File

 → 

New Project

 if you already have a project open.

Next, you need to describe your application by filling out some fields:


background image

GoalKicker.com – Android™ Notes for Professionals

3

Application Name - This name will be shown to the user.

1.

Example: 

Hello World

. You can always change it later in 

AndroidManifest.

xml

 file.

Company Domain - This is the qualifier for your project's package name.

2.

Example: 

stackoverflow.

com

.

Package Name (aka 

applicationId

) - This is the fully qualified project package name.

3.

It should follow Reverse Domain Name Notation (aka Reverse DNS): Top Level Domain 

. Company Domain .

[Company Segment 

.Application Name.

Example: 

com.

stackoverflow

.

android

.

helloworld

 or 

com.

stackoverflow

.

helloworld

. You can always

change your applicationId by overriding it in your gradle file.

Don't use the default prefix "com.example" unless you don't intend to submit your application to the
Google Play Store. The package name will be your unique 

applicationId in Google Play.

Project Location - This is the directory where your project will be stored.

4.


background image

GoalKicker.com – Android™ Notes for Professionals

4

Select Form Factors and API Level

The next window lets you select the form factors supported by your app, such as phone, tablet, TV, Wear, and
Google Glass. The selected form factors become the app modules within the project. For each form factor, you can
also select the API Level for that app. To get more information, click 

Help me choose


background image

GoalKicker.com – Android™ Notes for Professionals

5

Chart of the current Android version distributions, shown when you click Help me choose.

The Android Platform Distribution window shows the distribution of mobile devices running each version of
Android, as shown in Figure 2. Click on an API level to see a list of features introduced in the corresponding version
of Android. This helps you choose the minimum API Level that has all the features that your apps needs, so you can
reach as many devices as possible. Then click 

OK.

Now, choose what platforms and version of Android SDK the application will support.


background image

GoalKicker.com – Android™ Notes for Professionals

6

For now, select only Phone and Tablet.

The 

Minimum SDK is the lower bound for your app. It is one of the signals the 

Google Play Store

 uses to

determine which devices an app can be installed on. For example, 

Stack Exchange's app

 supports Android 4.1+.

Android Studio will tell you (approximately) what percentage of devices will be supported given the specified
minimum SDK.


background image

GoalKicker.com – Android™ Notes for Professionals

7

Lower API levels target more devices but have fewer features available.

When deciding on the 

Minimum SDK, you should consider the 

Dashboards stats

, which will give you version

information about the devices that visited the Google Play Store globally in the last week.

From: 

Dashboards

 on Android Developer website.

Add an activity

Now we are going to select a default activity for our application. In Android, an 

Activity

 is a single screen that will

be presented to the user. An application can house multiple activities and navigate between them. For this
example, choose 

Empty Activity

 and click next.

Here, if you wish, you can change the name of the activity and layout. A good practice is to keep 

Activity

 as a suffix

for the activity name, and 

activity_

 as a prefix for the layout name. If we leave these as the default, Android

Studio will generate an activity for us called 

MainActivity

, and a layout file called 

activity_main

. Now click 

Finish

.

Android Studio will create and configure our project, which can take some time depending on the system.

Inspecting the Project

To understand how Android works, let's take a look at some of the files that were created for us.

On the left pane of Android Studio, we can see the 

structure of our Android application

.


background image

GoalKicker.com – Android™ Notes for Professionals

8

First, let's open 

AndroidManifest.

xml

 by double clicking it. The Android manifest file describes some of the basic

information about an Android application. It contains the declaration of our activities, as well as some more
advanced components.

If an application needs access to a feature protected by a permission, it must declare that it requires that
permission with a 

<uses-permission>

 element in the manifest. Then, when the application is installed on the

device, the installer determines whether or not to grant the requested permission by checking the authorities that
signed the application's certificates and, in some cases, asking the user. An application can also protect its own
components (activities, services, broadcast receivers, and content providers) with permissions. It can employ any of
the permissions defined by Android (listed in android.Manifest.permission) or declared by other applications. Or it
can define its own.

<?xml 

version

=

"1.0"

 

encoding

=

"utf-8"

?>

<manifest 

xmlns:android

=

"http://schemas.android.com/apk/res/android"

    

package

=

"com.stackoverflow.helloworld"

>

    <application
        

android:allowBackup

=

"true"

        

android:icon

=

"@mipmap/ic_launcher"

        

android:label

=

"@string/app_name"

        

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>


background image

GoalKicker.com – Android™ Notes for Professionals

9

    </application>
</manifest>

Next, let's open 

activity_main.

xml

 which is located in 

app

/

src

/

main

/

res

/

layout

/

. This file contains declarations

for the visual components of our MainActivity. You will see visual designer. This allows you to drag and drop
elements onto the selected layout.

You can also switch to the xml layout designer by clicking "Text" at the bottom of Android Studio, as seen here:

<?xml

 

version

=

"1.0"

 

encoding

=

"utf-8"

?>

<RelativeLayout

 

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"

   

android:paddingBottom

=

"@dimen/activity_vertical_margin"

   

android:paddingLeft

=

"@dimen/activity_horizontal_margin"

   

android:paddingRight

=

"@dimen/activity_horizontal_margin"

   

android:paddingTop

=

"@dimen/activity_vertical_margin"

   

tools:context

=

"com.stackexchange.docs.helloworld.MainActivity"

>

    <TextView

       

android:layout_width

=

"wrap_content"

       

android:layout_height

=

"wrap_content"

       

android:text

=

"Hello World!"

 

/>

</RelativeLayout>

You will see a widget called a 

TextView

 inside of this layout, with the 

android

:

text

 property set to "Hello World!".

This is a block of text that will be shown to the user when they run the application.

You can read more about 

Layouts and attributes

.

Next, let's take a look at 

MainActivity

. This is the Java code that has been generated for 

MainActivity

.

public class MainActivity extends AppCompatActivity 

{

    

// The onCreate method is called when an Activity starts


background image

GoalKicker.com – Android™ Notes for Professionals

10

    

// This is where we will set up our layout

    @Override
    protected 

void

 onCreate

(

Bundle savedInstanceState

)

 

{

        super.

onCreate

(

savedInstanceState

);

        

// setContentView sets the Activity's layout to a specified XML layout

        

// In our case we are using the activity_main layout

        setContentView

(

R.

layout

.

activity_main

);

    

}

}

As defined in our Android manifest, 

MainActivity

 will launch by default when a user starts the 

HelloWorld

 app.

Lastly, open up the file named 

build.

gradle

 located in 

app

/

.

Android Studio uses the build system 

Gradle to compile and build Android applications and libraries.

apply plugin

:

 

'com.android.application'

android 

{

signingConfigs 

{

         applicationName 

{

             keyAlias 

'applicationName'

             keyPassword 

'password'

             storeFile file

(

'../key/applicationName.jks'

)

             storePassword 

'anotherPassword'

         

}

     

}

    compileSdkVersion 

26

    buildToolsVersion 

"26.0.0"

    defaultConfig 

{

        applicationId 

"com.stackexchange.docs.helloworld"

        minSdkVersion 

16

        targetSdkVersion 

26

        versionCode 

1

        versionName 

"1.0"

        signingConfig signingConfigs.

applicationName

    

}

    buildTypes 

{

        release 

{

            minifyEnabled 

false

            proguardFiles getDefaultProguardFile

(

'proguard-android.txt'

)

'proguard-rules.pro'

        

}

    

}

}

dependencies 

{

    compile fileTree

(

dir

:

 

'libs'

, include

:

 

[

'*.jar'

])

    testCompile 

'junit:junit:4.12'

    compile 

'com.android.support:appcompat-v7:26.0.0'

}

This file contains information about the build and your app version, and you can also use it to add dependencies to
external libraries. For now, let's not make any changes.

It is advisable to always select the latest version available for the dependencies:

buildToolsVersion

: 26.0.0

com.android.support:appcompat-v7

: 26.0.0 (July 2017)

firebase

: 11.0.4 (August 2017)


background image

GoalKicker.com – Android™ Notes for Professionals

11

compileSdkVersion

compileSdkVersion

 is your way to tell Gradle what version of the Android SDK to compile your app with. Using the

new Android SDK is a requirement to use any of the new APIs added in that level.

It should be emphasized that changing your 

compileSdkVersion

 does not change runtime behavior. While new

compiler warnings/errors may be present when changing your 

compileSdkVersion

, your 

compileSdkVersion

 is not

included in your APK: it is purely used at compile time.

Therefore it is strongly recommended that you always compile with the latest SDK. You’ll get all the benefits of new
compilation checks on existing code, avoid newly deprecated APIs, and be ready to use new APIs.

minSdkVersion

If 

compileSdkVersion

 sets the newest APIs available to you, 

minSdkVersion

 is the lower bound for your app. The

minSdkVersion

 is one of the signals the Google Play Store uses to determine which of a user’s devices an app can

be installed on.

It also plays an important role during development: by default lint runs against your project, warning you when you
use any APIs above your 

minSdkVersion

, helping you avoid the runtime issue of attempting to call an API that

doesn’t exist. Checking the system version at runtime is a common technique when using APIs only on newer
platform versions.

targetSdkVersion

targetSdkVersion

 is the main way Android provides forward compatibility by not applying behavior changes unless

the 

targetSdkVersion

 is updated. This allows you to use new APIs prior to working through the behavior changes.

Updating to target the latest SDK should be a high priority for every app. That doesn’t mean you have to use every
new feature introduced nor should you blindly update your 

targetSdkVersion

 without testing.

targetSDKVersion is the version of Android which is the upper-limit for the available tools. If targetSDKVersion is
less than 23, the app does not need to request permissions at runtime for an instance, even if the app is being run
on API 23+. TargetSDKVersion does 

not prevent android versions above the picked Android version from running

the app.

You can find more info about the Gradle plugin:

A basic example
Introduction to the Gradle plugin for android and the wrapper
Introduction to the configuration of the build.gradle and the DSL methods

Running the Application

Now, let's run our HelloWorld application. You can either run an Android Virtual Device (which you can set up by
using the AVD Manager in Android Studio, as described in the example below) or connect your own Android device
through a USB cable.

Setting up an Android device

To run an application from Android Studio on your Android Device, you must enable 

USB Debugging

 in the

Developer Options

 in the settings of your device.

Settings 

>

 Developer options 

>

 USB debugging

If 

Developer Options

 is not visible in the settings, navigate to 

About Phone

 and tap on the 

Build 

Number

 seven


background image

GoalKicker.com – Android™ Notes for Professionals

12

times. This will enable 

Developer Options

 to show up in your settings.

Settings 

>

 About phone 

>

 Build number

You also might need to change 

build.

gradle

 configuration to build on a version that your device has.

Running from Android Studio

Click the green 

Run

 button from the toolbar at the top of Android Studio. In the window that appears, select

whichever device you would like to run the app on (start an Android Virtual Device if necessary, or see Setting up an
AVD (Android Virtual Device) if you need to set one up) and click 

OK

.

On devices running Android 4.4 (KitKat) and possibly higher, a pop-up will be shown to authorize USB debugging.
Click 

OK

 to accept.

The application will now install and run on your Android device or emulator.

APK file location

When you prepare your application for release, you configure, build, and test a release version of your application.
The configuration tasks are straightforward, involving basic code cleanup and code modification tasks that help
optimize your application. The build process is similar to the debug build process and can be done using JDK and
Android SDK tools. The testing tasks serve as a final check, ensuring that your application performs as expected
under real-world conditions. When you are finished preparing your application for release you have a signed APK
file, which you can distribute directly to users or distribute through an application marketplace such as Google Play.

Android Studio

Since in the above examples Gradle is used, the location of the generated APK file is: 

<Your

 Project

Location

>/app/build/outputs/apk/app-debug.apk

IntelliJ

If you are a user of IntelliJ before switching to Studio, and are importing your IntelliJ project directly, then nothing
changed. The location of the output will be the same under:

out

/

production

/

...

Note: this is will become deprecated sometimes around 1.0

Eclipse

If you are importing Android Eclipse project directly, do not do this! As soon as you have dependencies in your
project (jars or Library Projects), this will not work and your project will not be properly setup. If you have no
dependencies, then the apk would be under the same location as you'd find it in Eclipse:

bin

/

...


background image

GoalKicker.com – Android™ Notes for Professionals

13

Section 1.2: Setting up Android Studio

Android Studio

 is the Android development IDE that is officially supported and recommended by Google. Android

Studio comes bundled with the 

Android SDK Manager

, which is a tool to download the 

Android SDK

 components

required to start developing apps.

Installing Android Studio and 

Android SDK

 tools:

Download and install 

Android Studio

.

1.

Download the latest SDK Tools and SDK Platform-tools by opening the Android Studio, and then following the

2.

Android SDK Tool Updates

 instructions. You should install the latest available stable packages.

If you need to work on old projects that were built using older SDK versions, you may need to download these
versions as well

Since Android Studio 2.2, a copy of the latest OpenJDK comes bundled with the install and is the 

recommended JDK

(Java Development Kit) for all Android Studio projects. This removes the requirement of having Oracle's JDK package
installed. To use the bundled SDK, proceed as follows;

Open your project in Android Studio and select 

File > Project Structure in the menu bar.

1.

In the 

SDK Location page and under JDK location, check the Use embedded JDK checkbox.

2.

Click 

OK.

3.

Configure Android Studio

Android Studio provides access to two configuration files through the 

Help menu:

studio.vmoptions

: Customize options for Studio's Java Virtual Machine (JVM), such as heap size and cache

size. Note that on Linux machines this file may be named studio64.vmoptions, depending on your version of
Android Studio.

idea.properties

: Customize Android Studio properties, such as the plugins folder path or maximum

supported file size.

Change/add theme

You can change it as your preference.

File

->

Settings

->

Editor

->

Colors 

&

 Fonts

->

 and select a theme.Also you

can download new themes from 

http://color-themes.com/

 Once you have downloaded the 

.

jar

.

zip

 file, go to 

File

->

 Import Settings...

 and choose the file downloaded.

Compiling Apps

Create a new project or open an existing project in Android Studio and press the green Play button 

 on the top

toolbar to run it. If it is gray you need to wait a second to allow Android Studio to properly index some files, the
progress of which can be seen in the bottom status bar.

If you want to create a project from the shell make sure that you have a 

local.

properties

 file, which is created by

Android Studio automatically. If you need to create the project without Android Studio you need a line starting with

sdk.

dir

=

 followed by the path to your SDK installation.

Open a shell and go into the project's directory. Enter 

.

/

gradlew aR

 and press enter. 

aR

 is a shortcut for

assembleRelease

, which will download all dependencies for you and build the app. The final APK file will be in

ProjectName

/

ModuleName

/

build

/

outputs

/

apk

 and will been called 

ModuleName

-

release.

apk

.


background image

GoalKicker.com – Android™ Notes for Professionals

14

Section 1.3: Android programming without an IDE

This is a minimalist Hello World example that uses only the most basic Android tools.

Requirements and assumptions

Oracle JDK 1.7 or later
Android SDK Tools (just the 

command line tools

)

This example assumes Linux. You may have to adjust the syntax for your own platform.

Setting up the Android SDK

After unpacking the SDK release:

Install additional packages using the SDK manager. Don't use 

android update sdk 

--

no

-

ui

 as instructed in

1.

the bundled Readme.txt; it downloads some 30 GB of unnecessary files. Instead use the interactive SDK
manager 

android sdk

 to get the recommended minimum of packages.

Append the following JDK and SDK directories to your execution PATH. This is optional, but the instructions

2.

below assume it.

JDK/bin
SDK/platform-tools
SDK/tools
SDK/build-tools/LATEST (as installed in step 1)

Create an Android virtual device. Use the interactive AVD Manager (

android avd

). You might have to fiddle a

3.

bit and search for advice; the 

on-site instructions

 aren't always helpful.

(You can also use your own device)

Run the device:

4.

emulator 

-

avd DEVICE

If the device screen appears to be locked, then swipe to unlock it.

5.

Leave it running while you code the app.

Coding the app

Change to an empty working directory.

0.

Make the source file:

1.

mkdir 

--

parents src

/

dom

/

domain

touch src

/

dom

/

domain

/

SayingHello.

java

Content:

package 

dom.domain

;

import 

android.widget.TextView

;


background image

GoalKicker.com – Android™ Notes for Professionals

15

public final class SayingHello extends android.

app

.

Activity

{

    protected @Override 

void

 onCreate

(

 final android.

os

.

Bundle

 activityState 

)

    

{

        super.

onCreate

(

 activityState 

);

        final TextView textV 

=

 new TextView

(

 SayingHello.this 

);

        textV.

setText

(

 

"Hello world"

 

);

        setContentView

(

 textV 

);

    

}

}

Add a manifest:

2.

touch AndroidManifest.

xml

Content:

<?xml

 

version

=

'1.0'

?>

<manifest

 

xmlns:a

=

'http://schemas.android.com/apk/res/android'

package

=

'dom.domain'

 

a:versionCode

=

'0'

 

a:versionName

=

'0'

>

    <application

 

a:label

=

'Saying hello'

>

        <activity

 

a:name

=

'dom.domain.SayingHello'

>

             <intent-filter>
                <category

 

a:name

=

'android.intent.category.LAUNCHER'

/>

                <action

 

a:name

=

'android.intent.action.MAIN'

/>

                </intent-filter>
            </activity>
        </application>
    </manifest>

Make a sub-directory for the declared resources:

3.

mkdir res

Leave it empty for now.

Building the code

Generate the source for the resource declarations. Substitute here the correct path to your 

SDK, and the

0.

installed 

API to build against (e.g. "android-23"):

aapt package 

-

f \\

  

-

I SDK

/

platforms

/

android

-

API

/

android.

jar

 \\

  

-

J src 

-

m \\

  

-

M AndroidManifest.

xml

 

-

S res 

-

v

Resource declarations (described further below) are actually optional. Meantime the above call does nothing
if res/ is still empty.

Compile the source code to Java bytecode (.java → .class):

1.

javac \\
  

-

bootclasspath SDK

/

platforms

/

android

-

API

/

android.

jar

 \\

  

-

classpath src 

-

source 

1.7

 

-

target 

1.7

 \\

  src

/

dom

/

domain

/*.java


background image

GoalKicker.com – Android™ Notes for Professionals

16

Translate the bytecode from Java to Android (.class → .dex):

2.

First using Jill (.class → .jayce):

java 

-

jar SDK

/

build

-

tools

/

LATEST

/

jill.

jar

 \\

  

--

output classes.

jayce

 src

Then Jack (.jayce → .dex):

java 

-

jar SDK

/

build

-

tools

/

LATEST

/

jack.

jar

 \\

  

--

import 

classes.jayce

 

--

output

-

dex .

Android bytecode used to be called "Dalvik executable code", and so "dex".

You could replace steps 11 and 12 with a single call to Jack if you like; it can compile directly from Java source
(.java → .dex). But there are advantages to compiling with 

javac

. It's a better known, better documented and

more widely applicable tool.

Package up the resource files, including the manifest:

3.

aapt package 

-

f \\

  

-

F app.

apkPart

 \\

  

-

I SDK

/

platforms

/

android

-

API

/

android.

jar

 \\

  

-

M AndroidManifest.

xml

 

-

S res 

-

v

That results in a partial APK file (Android application package).

Make the full APK using the 

ApkBuilder

 tool:

4.

java 

-

classpath SDK

/

tools

/

lib

/

sdklib.

jar

 \\

  com.

android

.

sdklib

.

build

.

ApkBuilderMain

 \\

  app.

apkUnalign

 \\

  

-

-

f classes.

dex

 

-

-

z app.

apkPart

It warns, "THIS TOOL IS DEPRECATED. See --help for more information." If 

--

help

 fails with an

ArrayIndexOutOfBoundsException

, then instead pass no arguments:

java 

-

classpath SDK

/

tools

/

lib

/

sdklib.

jar

 \\

  com.

android

.

sdklib

.

build

.

ApkBuilderMain

It explains that the CLI (

ApkBuilderMain

) is deprecated in favour of directly calling the Java API (

ApkBuilder

).

(If you know how to do that from the command line, please update this example.)

Optimize the data alignment of the APK (

recommended practice

):

5.

zipalign 

-

-

4

 app.

apkUnalign

 app.

apk

Installing and running

Install the app to the Android device:

0.


background image

GoalKicker.com – Android™ Notes for Professionals

17

adb install 

-

r app.

apk

Start the app:

1.

adb shell am start 

-

n dom.

domain

/

.

SayingHello

It should run and say hello.

That's all. That's what it takes to say hello using the basic Android tools.

Declaring a resource

This section is optional. Resource declarations aren't required for a simple "hello world" app. If they aren't required
for your app either, then you could streamline the build somewhat by omitting step 10, and removing the reference
to the res/ directory from step 13.

Otherwise, here's a brief example of how to declare a resource, and how to reference it.

Add a resource file:

0.

mkdir res

/

values

touch res

/

values

/

values.

xml

Content:

<?xml

 

version

=

'1.0'

?>

<resources>
    <string

 

name

=

'appLabel'

>Saying hello</string>

</resources>

Reference the resource from the XML manifest. This is a declarative style of reference:

1.

<!-- <application 

a:label

=

'Saying hello'

> -->

     <application 

a:label

=

'@string/appLabel'

>

Reference the same resource from the Java source. This is an imperative reference:

2.

// v.setText( "Hello world" );

   v.

setText

(

 

"This app is called "

     

+

 getResources

()

.

getString

(

 R.

string

.

appLabel

 

));

Test the above modifications by rebuilding, reinstalling and re-running the app (steps 10-17).

3.

It should restart and say, "This app is called Saying hello".

Uninstalling the app

adb uninstall dom.

domain

See also

original question

 - The original question that prompted this example

working example

 - A working build script that uses the above commands


background image

GoalKicker.com – Android™ Notes for Professionals

18

Section 1.4: Application Fundamentals

Android Apps are written in Java. The Android SDK tools compile the code, data and resource files into an APK
(Android package). Generally, one APK file contains all the content of the app.

Each app runs on its own virtual machine(VM) so that app can run isolated from other apps. Android system works
with the principle of least privilege. Each app only has access to the components which it requires to do its work,
and no more. However, there are ways for an app to share data with other apps, such as by sharing Linux user id
between app, or apps can request permission to access device data like SD card, contacts etc.

App Components

App components are the building blocks of an Android app. Each components plays a specific role in an Android
app which serves a distinct purpose and has distinct life-cycles(the flow of how and when the component is created
and destroyed). Here are the four types of app components:

Activities: An activity represents a single screen with a User Interface(UI). An Android app may have more

1.

than one activity. (e.g. an email app might have one activity to list all the emails, another to show the
contents of each email, and another to compose new email.) All the activities in an App work together to
create a User eXperience (UX).
Services: A service runs in the background to perform long-running operations or to perform work for a

2.

remote processes. A service does not provide any UI, it runs only in the background with the User's input.
(e.g. a service can play music in the background while the user is in a different App, or it might download data
from the internet without blocking user's interaction with the Android device.)
Content Providers: A content provider manages shared app data. There are four ways to store data in an

3.

app: it can be written to a file and stored in the file system, inserted or updated to a SQLite database, posted
to the web, or saved in any other persistent storage location the App can access. Through content providers,
other Apps can query or even modify the data. (e.g. Android system provides a content provider that
manages the user's contact information so that any app which has permission can query the contacts.)
Content providers can also be used to save the data which is private to the app for better data integrity.
Broadcast receivers: A broadcast receiver responds to the system-wide broadcasts of announcements (e.g.

4.

a broadcast announcing that the screen has turned off, the battery is low, etc.) or from Apps (e.g. to let other
apps know that some data has been downloaded to the device and is available for them to use). Broadcast
receivers don't have UIs but they can show notification in the status bar to alert the user. Usually broadcast
receivers are used as a gateway to other components of the app, consisting mostly of activities and services.

One unique aspect of the Android system is that any app can start another app's component (e.g. if you want to
make call, send SMS, open a web page, or view a photo, there is an app which already does that and your app can
make use of it, instead of developing a new activity for the same task).

When the system starts a component, it starts the process for that app (if it isn't already running, i.e. only one
foreground process per app can run at any given time on an Android system) and instantiates the classes needed
for that component. Thus the component runs on the process of that App that it belongs to. Therefore, unlike apps
on other systems, Android apps don't have a single entry point(there is no 

main

()

 method).

Because the system runs each app in a separate process, one app cannot directly activate another app's
components, however the Android system can. Thus to start another app's component, one app must send a
message to the system that specifies an intent to start that component, then the system will start that component.

Context

Instances of the class 

android.

content

.

Context

 provide the connection to the Android system which executes the

application. Instance of Context is required to get access to the resources of the project and the global information


background image

GoalKicker.com – Android™ Notes for Professionals

19

about the app's environment.

Let's have an easy to digest example: Consider you are in a hotel, and you want to eat something. You call room-
service and ask them to bring you things or clean up things for you. Now think of this hotel as an Android app,
yourself as an activity, and the room-service person is then your context, which provides you access to the hotel
resources like room-service, food items etc.

Yet an other example, You are in a restaurant sitting on a table, each table has an attendant, when ever you want to
order food items you ask the attendant to do so. The attendant then places your order and your food items gets
served on your table. Again in this example, the restaurant is an Android App, the tables or the customers are App
components, the food items are your App resources and the attendant is your context thus giving you a way to
access the resources like food items.

Activating any of the above components requires the context's instance. Not just only the above, but almost every
system resource: creation of the UI using views(discussed later), creating instance of system services, starting new
activities or services -- all require context.

More detailed description is written 

here

.

Section 1.5: Setting up an AVD (Android Virtual Device)

TL;DR It basically allows us to simulate real devices and test our apps without a real device.

According to 

Android Developer Documentation

,

an 

Android Virtual Device (AVD) definition lets you define the characteristics of an Android Phone, Tablet,

Android Wear, or Android TV device that you want to simulate in the Android Emulator. The AVD Manager
helps you easily create and manage AVDs.

To set up an AVD, follow these steps:

1. Click this button to bring up the AVD Manager:

2. You should see a dialog like this:


background image

GoalKicker.com – Android™ Notes for Professionals

20

3. Now click the 

+

 Create Virtual Device...

 button. This will bring up Virtual Device Configuration Dialog:


background image

GoalKicker.com – Android™ Notes for Professionals

21

4. Select any device you want, then click 

Next

:

5. Here you need to choose an Android version for your emulator. You might also need to download it first by
clicking 

Download

. After you've chosen a version, click 

Next

.


background image

GoalKicker.com – Android™ Notes for Professionals

22

6. Here, enter a name for your emulator, initial orientation, and whether you want to display a frame around it.
After you chosen all these, click 

Finish

.

7. Now you got a new AVD ready for launching your apps on it.


background image

GoalKicker.com – Android™ Notes for Professionals

23

Chapter 2: Android Studio

Section 2.1: Setup Android Studio

System Requirements

Microsoft® Windows® 8/7/Vista/2003 (32 or 64-bit).
Mac® OS X® 10.8.5 or higher, up to 10.9 (Mavericks)
GNOME or KDE desktop

Installation

Window

Download and install 

JDK (Java Development Kit)

 version 8

1.

Download 

Android Studio

2.

Launch 

Android Studio.

exe

 then mention JDK path and download the latest SDK

3.

Linux

Download and install 

JDK (Java Development Kit)

 version 8

1.

Download 

Android Studio

2.

Extract the zip file

3.

Open terminal, cd to the extracted folder, cd to bin (example 

cd

 android-studio/bin

)

4.

Run ./studio.sh

5.

Section 2.2: View And Add Shortcuts in Android Studio

By going to Settings >> Keymap A window will popup showing All the 

Editor Actions

 with the their name and

shortcuts. Some of the 

Editor Actions

 do not have shortcuts. So right click on that and add a new shortcut to that.

Check the image below


background image

GoalKicker.com – Android™ Notes for Professionals

24

Section 2.3: Android Studio useful shortcuts

The following are some of the more common/useful shortcuts.

These are based on the default IntelliJ shortcut map. You can switch to other common IDE shortcut maps via 

File

->

 Settings 

->

 

Keymap

 

->

 

<

Choose Eclipse

/

Visual Studio

/

etc from Keymaps dropdown

>

Action

Shortcut

Format code

 CTRL 

 +  ALT  +  L 

Add unimplemented methods

 CTRL 

 +  I 

Show logcat

 ALT 

 +  6 

Build

 CTRL 

 +  F9 

Build and Run

 CTRL 

 +  F10 

Find

 CTRL 

 +  F 

Find in project

 CTRL 

+ SHIFT  +  F 

Find and replace

 CTRL 

 +  R 

Find and replace in project

 CTRL 

 +  SHIFT  +  R 

Override methods

 CTRL 

 +  O 

Show project

 ALT 

 +  1 

Hide project - logcat

 SHIFT 

 +  ESC 

Collapse all

 CTRL 

 +  SHIFT  +  NumPad + 

View Debug Points

 CTRL 

 +  SHIFT  +  F8 

Expand all

 CTRL 

 +  SHIFT  +  NumPad - 

Open Settings

 ALT 

 +  s 


background image

GoalKicker.com – Android™ Notes for Professionals

25

Select Target (open current file in Project view)  ALT  +  F1  →  ENTER 
Search Everywhere

 SHIFT 

 →  SHIFT  (Double shift)

Code | Surround With

 CTRL 

 →  ALT  +  T 

Create method form selected code

 ALT 

 +  CTRL 

Refactor:

Action

Shortcut

Refactor This (menu/picker for all applicable

refactor actions of the current element)

Mac  CTRL  +  T  - Win/Linux  CTRL  +  ALT  +  T 

Rename

 SHIFT 

 +  F6 

Extract Method

Mac  CMD  +  ALT  +  M  - Win/Linux  CTRL  +  ALT  +  M 

Extract Parameter

Mac  CMD  +  ALT  +  P  - Win/Linux  CTRL  +  ALT  +  P 

Extract Variable

Mac  CMD  +  ALT  +  V  - Win/Linux  CTRL  +  ALT  +  V 

Section 2.4: Android Studio Improve performance tip

Enable Offline Work:

Click File -> Settings. Search for "gradle" and click in 

Offline work

 box.

1.

Go to Compiler (in same settings dialog just below 

Gradle

) and add 

--

offline

 to 

Command

-

line Options

 text

2.

box.

Improve Gradle Performance

Add following two line of code in your gradle.properties file.

org.

gradle

.

daemon

=

true

org.

gradle

.

parallel

=

true

Increasing the value of 

-

Xmx

 and 

-

Xms

 in 

studio.

vmoptions

 file

-

Xms1024m

-

Xmx4096m

-

XX

:

MaxPermSize

=

1024m

-

XX

:

ReservedCodeCacheSize

=

256m

-

XX

:+

UseCompressedOops

Window

%USERPROFILE%.{FOLDER_NAME}\studio.exe.vmoptions and/or
%USERPROFILE%.{FOLDER_NAME}\studio64.exe.vmoptions

Mac

~/Library/Preferences/{FOLDER_NAME}/studio.vmoptions

Linux

~/.{FOLDER_NAME}/studio.vmoptions and/or ~/.{FOLDER_NAME}/studio64.vmoptions


background image

GoalKicker.com – Android™ Notes for Professionals

26

Section 2.5: Gradle build project takes forever

Android Studio -> Preferences -> Gradle -> Tick Offline work and then restart your Android studio.

Reference screenshot:

Section 2.6: Enable/Disable blank line copy

ctrl 

+

 alt 

+

 shift 

+

 

/

 (

cmd 

+

 alt 

+

 shift 

+

 

/

 on 

MacOS

) should show you the following dialog:

Clicking on 

Registry

 you will get


background image

GoalKicker.com – Android™ Notes for Professionals

27

The key you want to enable/disable is

editor.

skip

.

copy

.

and

.

cut

.for.

empty

.

selection

Tested on 

Linux Ubuntu

 and 

MacOS

.

Section 2.7: Custom colors of logcat message based on

message importance

Go to File -> Settings -> Editor -> Colors & Fonts -> Android Logcat

Change the colors as you need:


background image

GoalKicker.com – Android™ Notes for Professionals

28

Choose the appropriate color:

Section 2.8: Filter logs from UI

Android logs can be filtered directly from the UI. Using this code


background image

GoalKicker.com – Android™ Notes for Professionals

29

public class MainActivity extends AppCompatActivity 

{

    private final static 

String

 TAG1 

=

 MainActivity.class.

getSimpleName

();

    private final static 

String

 TAG2 

=

 MainActivity.class.

getCanonicalName

();

    @Override
    protected 

void

 onCreate

(

Bundle savedInstanceState

)

 

{

        super.

onCreate

(

savedInstanceState

);

        setContentView

(

R.

layout

.

activity_main

);

        Log.

e

(

TAG1,

"Log from onCreate method with TAG1"

);

        Log.

i

(

TAG2,

"Log from onCreate method with TAG2"

);

    

}

}

If I use the regex 

TAG1

|

TAG2

 and the level 

verbose

 I get

01

-

14

 

10

:

34

:

46.961

 

12880

-

12880

/

android.

doc

.

so

.

thiebaudthomas

.

sodocandroid

 E

/

MainActivity

:

 Log from

onCreate method with TAG1
01

-

14

 

10

:

34

:

46.961

 

12880

-

12880

/

android.

doc

.

so

.

thiebaudthomas

.

sodocandroid

I

/

androdi.

doc

.

so

.

thiebaudthomas

.

sodocandroid

.

MainActivity

:

 Log from onCreate method with TAG2

The level can be set to get logs with given level and above. For example the 

verbose

 level will catch 

verbose,

debug, info, warn, error and assert

 logs.

Using the same example, if I set the level to 

error

, I only get

01

-

14

 

10

:

34

:

46.961

 

12880

-

12880

/

androdi.

doc

.

so

.

thiebaudthomas

.

sodocandroid

 E

/

MainActivity

:

 Log from

onCreate method with TAG1

Section 2.9: Create filters configuration

Custom filters can be set and save from the UI. In the 

AndroidMonitor

 tab, click on the right dropdown (must

contains 

Show only selected application

 or 

No filters

) and select 

Edit filter configuration

.

Enter the filter you want


background image

GoalKicker.com – Android™ Notes for Professionals

30

And use it (you can selected it from the same dropdown)

Important If you add an input in the filter bar, android studio will consider both your filter and your input.

With both input and filter there is no output

Without filter, there is some outputs

Section 2.10: Create assets folder

Right click in MAIN folder > New > Folder > Assets Folder.
Assets folder will be under MAIN folder with the same symbol as RES folder.
In this example I put a font file.


background image

GoalKicker.com – Android™ Notes for Professionals

31


background image

GoalKicker.com – Android™ Notes for Professionals

32

Chapter 3: Instant Run in Android Studio

Section 3.1: Enabling or disabling Instant Run

Open the Settings or Preferences dialog:

1.

On Windows or Linux, select 

File

 > 

Settings

 from the main menu.

On Mac OSX, select 

Android Studio

 > 

Preferences

 from the main menu.

Navigate to 

Build, Execution, Deployment

 > 

Compiler

.

2.

In the text field next to Command-line Options, enter your command-line options.

3.

Click OK to save and exit.

4.

The top option is Instant run. Check/uncheck that box.

Documentation

Section 3.2: Types of code Swaps in Instant Run

There are three types of code swaps that Instant run enables to support faster debugging and running app from
your code in Android Studio.

Hot Swap
Warm Swap
Cold Swap

When are each of these swaps triggered?


background image

GoalKicker.com – Android™ Notes for Professionals

33

HOT SWAP is triggered when an existing method's implementation is changed.

WARM SWAP is triggered when an existing resource is changed or removed (anything in the res folder)

COLD SWAP whenever there is a structural code change in your app's code e.g.

Add, remove, or change:

1.

an annotation
an instance field
a static field
a static method signature
an instance method signature

Change which parent class the current class inherits from

2.

Change the list of implemented interfaces

3.

Change a class's static initializer

4.

Reorder layout elements that use dynamic resource IDs

5.

What happens when a code swap happens?

HOT SWAP changes are visible instantly - as soon as the next call to the method whose implementation is changed
is made.

WARM SWAP restarts the current activity

COLD SWAP restarts the entire app (without reinstall)

Section 3.3: Unsupported code changes when using Instant

Run

There are a few changes where instant won't do its trick and a full build and reinstall fo your app will happen just
like it used to happen before Instant Run was born.

Change the app manifest

1.

Change resources referenced by the app manifest

2.

Change an Android widget UI element (requires a Clean and Rerun)

3.

Documentation


background image

GoalKicker.com – Android™ Notes for Professionals

34

Chapter 4: TextView

Everything related to TextView customization in Android SDK

Section 4.1: Spannable TextView

A spannable 

TextView

 can be used in Android to highlight a particular portion of text with a different color, style,

size, and/or click event in a single 

TextView

 widget.

Consider that you have defined a 

TextView

 as follows:

TextView textview

=

findViewById

(

R.

id

.

textview

);

Then you can apply different highlighting to it as shown below:

Spannable color: In order to set a different color to some portion of text, a 

ForegroundColorSpan

 can be

used, as shown in the following example:

Spannable spannable 

=

 new SpannableString

(

firstWord

+

lastWord

);

spannable.

setSpan

(

new ForegroundColorSpan

(

firstWordColor

)

0

, firstWord.

length

()

,

Spannable.

SPAN_EXCLUSIVE_EXCLUSIVE

);

spannable.

setSpan

(

new ForegroundColorSpan

(

lastWordColor

)

, firstWord.

length

()

,

firstWord.

length

()+

lastWord.

length

()

, Spannable.

SPAN_EXCLUSIVE_EXCLUSIVE

);

textview.

setText

(

 spannable 

);

Output created by the code above:

Spannable font: In order to set a different font size to some portion of text, a 

RelativeSizeSpan

 can be

used, as shown in the following example:

Spannable spannable 

=

 new SpannableString

(

firstWord

+

lastWord

);

spannable.

setSpan

(

new RelativeSizeSpan

(

1.1f

)

,

0

, firstWord.

length

()

,

 Spannable.

SPAN_EXCLUSIVE_EXCLUSIVE

);

 

// set size

spannable.

setSpan

(

new RelativeSizeSpan

(

0.8f

)

, firstWord.

length

()

, firstWord.

length

()

 

+

lastWord.

length

()

,  Spannable.

SPAN_EXCLUSIVE_EXCLUSIVE

);

 

// set size

textview.

setText

(

 spannable 

);

Output created by the code above:

Spannable typeface: In order to set a different font typeface to some portion of text, a custom

TypefaceSpan

 can be used, as shown in the following example:

Spannable spannable 

=

 new SpannableString

(

firstWord

+

lastWord

);


background image

GoalKicker.com – Android™ Notes for Professionals

35