20 Open-Source Android tuyệt vời giúp bạn code tốt hơn (p2)


11. AnotherMonitor

(Github | Play Store | Difficulty: Intermediate)

Nếu bạn đang tìm kiếm để tìm hiểu về việc theo dõi các quy trình Android, sử dụng bộ nhớ, sử dụng CPU và các công cụ liên quan đến những điều này, thì đây là dự án hoàn hảo để bắt đầu.

12. InstaMaterial

(Github | Difficulty: Beginner)

Nếu bạn đang tìm kiếm một dự án để học hoặc phát triển kỹ năng Thiết kế Material của bạn, thì dự án này là dành cho bạn.

13. CoCoin

(Github | Difficulty: Easy)

CoCoin là một giải pháp tài chính và kế toán cá nhân trọn vẹn có tính năng ,giao diện đẹp.

14. OmniNotes

(Github | Play Store | Difficulty: Intermediate)

Nếu bạn đang tìm kiếm để xây dựng một ứng dụng Android ghi chú đầy đủ tính năng như Evernote, thì đây chỉ là dự án phù hợp để bạn bắt đầu.

15. Clip Stack

(Github | Play Store | Difficulty: Beginner)

Một ứng dụng quản lý clipboard đơn giản, sạch sẽ và đẹp cho Android. Dự án khá nhỏ, đơn giản và dễ hiểu.

16.Super Clean Master

(Github | Difficulty: Advanced)

17.Travel Mate

(Github | Difficulty: Intermediate)

Nếu bạn đang tìm kiếm để xây dựng một ứng dụng  du lịch và cần phải dựa nhiều vào vị trí và bản đồ, thì dự án này có lẽ là nơi tốt nhất để bắt đầu.

18. KISS

(Github | Play Store | Difficulty: Intermediate)

Ứng dụng trình đơn đơn giản, siêu nhanh và nhẹ dành cho Android.

19. Turbo Editor

(Github | Play Store | Difficulty: Intermediate)

Một ứng dụng soạn thảo văn bản đơn giản nhưng mạnh mẽ cho Android. Bạn cũng có thể sử dụng trình soạn thảo này để viết mã và nó cũng hỗ trợ tô màu cú pháp cho các ngôn ngữ lập trình khác nhau.

Advertisements

20 Open-Source Android tuyệt vời giúp bạn code tốt hơn (p1)


Cách tốt nhất để học là đọc và đó cũng đúng đối với các developer. Nếu bạn muốn trở thành một developer tốt hơn, bạn phải đọc nhiều mã hơn. Nó đơn giản như vậy.

Sách, blog, diễn đàn đều tốt đến một mức độ nhất định, nhưng không có gì có thể thay thế một số dự án mã nguồn mở đầy đủ chức năng,  nơi toàn bộ ứng dụng với tất cả các tài nguyên của nó là ngay trước mặt bạn.

All you have to do is sit back, take a cup of coffee and read some kick-ass code.

Ở đây trong bài viết này, chúng tôi mang đến một số ứng dụng Android nguồn mở tốt nhất với ​​nhiều thể loạkhác nhau để đáp ứng mọi nhu cầu học tập và phát triển của bạn.

Bạn có thể thử các ứng dụng này trực tiếp trên PlayStore để có trải nghiệm thực ,trước khi  đi sâu vào mã nguồn.

1. LeafPic

(Github | Play Store | Difficulty: Beginner)

Ứng dụng Photo and video là một trong những ứng dụng phổ biến nhất mà bạn có thể tìm thấy trên bất kỳ thiết bị Android nào. Có bao giờ tự hỏi làm thế nào họ được thực hiện? LeafPic là một trong những ứng dụng thư viện với mã nguồn mở tốt nhất mà bạn có thể dùng thử.

Nó là khá đơn giản, dễ hiểu và là hoàn toàn phù hợp với bất kỳ nhà phát triển mới bắt đầu. Một trong những điều tốt nhất tôi đã tìm thấy trong ứng dụng này là cách họ đã triển khai. Đó là điều mà nhiều nhà phát triển Android đã phải vật lộn để thực hiện đúng.

2. Simple Calendar

(Github | Play Store | Difficulty: Beginner)

Một ứng dụng lịch đơn giản và dễ sử dụng được xây dựng hoàn toàn bằng Kotlin. Nếu bạn đang tìm kiếm để tìm hiểu Kotlin, thì đây có lẽ là một trong những cách tốt nhất để bắt đầu.

3. Amaze File Manager

(Github | Play Store | Difficulty: Intermediate)

4. Easy Sound Recorder

(Github | Play Store | Difficulty: Beginner)

Một ứng dụng ghi âm thanh đơn giản, dễ sử dụng và đẹp cho Android

5. MLManager

(Github | Play Store | Difficulty: Beginner)

MLManager là trình quản lý ứng dụng đơn giản và trực tiếp cho thiết bị Android của bạn. Dự án lý tưởng nếu bạn muốn tìm hiểu cách lấy thông tin chi tiết về các ứng dụng đã cài đặt trên thiết bị của bạn, trích xuất APK từ các ứng dụng đó, gỡ cài đặt ứng dụng và nhiều hơn nữa.

6. PhotoAffix

(Github | Play Store| Difficulty: Beginner)

It is ideal for any beginner Android developer willing to learn the basics of Android development

7. MovieGuide

(Github | Difficulty: Intermediate)

The app showcases some really cool development stuffs like MVP, Uncle Bob’s Clean Architecture, gives the sweet taste of RxJava and dependency injection using Dagger 2.

8. AnExplorer

(Github | | Play Store | Difficulty: Intermediate)

Một trình quản lý tệp đơn giản, nhẹ và tối giản được thiết kế cho cả điện thoại và máy tính bảng.

9. Minimal ToDo

(Github | Play Store | Difficulty: Beginner)

Nếu bạn là người mới bắt đầu, đây là một dự án rất đơn giản nhưng tốt để bạn bắt đầu. Bạn sẽ có cơ hội để tìm hiểu hầu hết các khía cạnh cơ bản và cơ bản của phát triển Android.

10. Timber

(Github | Play Store | Difficulty: Advanced)

Timber là một trình nghe nhạc được thiết kế đẹp mắt,và đầy đủ tính năng cho Android

[Must Have Libraries] Các thư viện cần thiết trong lập trình android


GIỚI THIỆU

Có rất nhiều thư viện của bên thứ ba cho Android có những thư viện cực kỳ phổ biến và thường được sử dụng trong hầu hết các dự án Android. Mỗi thư viện đều có những mục đích khác nhau nhưng tất cả chúng đều làm cho công việc lập trình trở nên dễ chịu hơn. Các thư viện chính được liệt kê dưới đây.

TIÊU CHUẨN

Các thư viện được liệt kê dưới đây là các thư viện khá phổ biến, áp dụng rộng rãi và có lẽ nên được thiết lập trong hầu hết các ứng dụng Android:

Name Description
Retrofit A type-safe REST client for Android which intelligently maps an API into a client interface using annotations.
Glide A powerful image downloading and caching library for Android.
ButterKnife Using Java annotations, makes Android development better by simplifying common tasks.
Parceler Android Parcelable made easy through code generation
IcePick Android Instance State made easy
LeakCanary Catch memory leaks in your apps
Espresso Powerful DSL for Android integration testing
Robolectric Efficient unit testing for Android

 

NÂNG CAO

Các thư viện được liệt kê dưới đây là các thư viện bổ sung được sử dụng nhiều hơn nhưng phổ biến trong số các nhóm Android có kinh nghiệm. Lưu ý rằng các thư viện này có thể không phù hợp với ứng dụng đầu tiên của bạn. Những thư viện tiên tiến này bao gồm:

Name Description
Dagger 2 A fast dependency injector for managing objects.
RxJava Develop fully reactive components for Android.
EventBus Android event bus for easier component communication.
AndroidAnnotations Powerful annotations to reduce boilerplate code.
Retrolambda Bringing lambda block support to Android.

MÌNH ĐỂ NGUYÊN GỐC CHO MỌI NGƯỜI DỄ HIỂU, CHỨ MÌNH DỊCH GOOGLE MỆT LẮM  =)))

Keep in mind that the combination of these libraries may not always play nicely with each other. The following section highlights some of these issues.

Parceler and IcePick

Note that you cannot use IcePick at the current time to save state of Parceler objects. See this GitHub issue for more context on why they are incompatible. You will need to use explicitly Parcelable objects with IcePick. You may consider replacing Parceler with AutoParcel which works seamlessly with IcePick.

ButterKnife and Parceler

Using the Butterknife library with the Parceler library causes multiple declarations of javax.annotation.processing.Processor. In this case, you have to exclude this conflict in your app/build.gradle file:

ButterKnife and Custom Views

Often you may find that using ButterKnife or Dagger injections defined in your constructor prevent Android Studio to preview your Custom View layout. You may see an error about needing isEditMode() defined. Essentially this method is used to enable your code to short-circuit before executing a section of code that might be used for run-time but cannot be executed within the preview window.

Convenience

  • Dagger – A fast dependency injector for Android and Java. See this video intro from Square.
  • Spork – Spork is an annotation processing library to speed up development on your projects. It allows you to write less boilerplate code to make your code more readable and maintainable.
  • AutoParcel – Port of Google AutoValue for Android with Parcelable generation goodies.
  • Hugo – Easier logging within your app
  • Logger – Much cleaner and easier logcat trace messages
  • AndroidAnnotations – Framework that speeds up Android development. It takes care of the plumbing, and lets you concentrate on what’s really important. By simplifying your code, it facilitates its maintenance
  • Calligraphy – Custom fonts made easy
  • EasyFonts – Easy preloaded custom fonts in your app
  • AndroidViewAnimations – Common property animations made easy
  • AboutLibraries – Automatically generates an About this app section, with a list of used libraries
  • EasyDeviceInfo – Get device information in a super easy way
  • Sensey – Detecting gestures in a snap.
  • OAuthLibGithub – Easily add Authentication using Github API.
  • Timber – A logger with a small, extensible API which provides utility on top of Android’s normal Log class.
  • LoggingInterceptor – An OkHttp interceptor which pretty logs request and response data.

Extensions

Networking

  • Retrofit – A type-safe REST client for Android and Java which intelligently maps an API into a client interface using annotations.
  • Picasso – A powerful image downloading and caching library for Android.
  • Ion – Powerful asynchronous networking library. Download as a jar here.
  • Android Async HTTP – Asynchronous networking client for loading remote content such as JSON.
  • Volley – Google’s HTTP library that makes networking for Android apps easier and most importantly, faster.
  • OkHttp – Square’s underlying networking library with support for asynchronous requests.
  • Glide – Picasso image loading alternative endorsed by Google
  • Android Universal Image Loader – Popular alternative for image loading that can replace Picasso or Glide.
  • Fresco – An image management library from Facebook.
  • Fast Android Networking -Fast Android Networking is a powerful library for doing any type of networking in Android applications which is made on top of OkHttp Networking Layer.

ListView

  • EasyListViewAdapters – Building multi-row-type listview made much cleaner & easier.
  • GridListViewAdapters – Easily build unlimited Grid cards list like play-store. (ListView working as unlimited GridView)
  • StickyListHeaders – An android library for section headers that stick to the top of a ListView
  • PinnedListView – Pinned Section with ListView
  • ListViewAnimations – Easy way to animate ListView items (DEPRECATED)
  • Cardslib – Card UI for Lists or Grids
  • PullToRefresh-ListView – Easy to use pull-to-refresh functionality for ListViews. Download and install as a library project.
  • QuickReturn – Reveal or hide a header or footer as the list is scrolled in a direction.
  • SortableTableView – The library enables you to display your data in a table and provides numerous customization possibilities. The api was designed very android like so the usage is intuitive for experienced android developers.
  • Paginated Table – This is a table which allows dynamic paging for any list of objects. Icons can be added to columns as well as custom items such as check boxes and buttons.

RecyclerView

  • UltimateRecyclerView – Augmented RecyclerView with refreshing, loading more, animation and many other features.
  • AdvRecyclerView – Extended RecyclerView with swipe to dismiss, and draggable or expanding items.
  • android-parallax-recyclerview – An adapter which could be used to achieve a parallax effect on RecyclerView.
  • sticky-headers-recyclerview – Sticky Headers decorator for Android’s RecyclerView.
  • FastAdapter – Simplify and speed up the process of filling your RecyclerView with data
  • ItemAnimators – RecyclerView animators to animate item add/remove/add/move
  • GreedoLayout – Full aspect ratio grid LayoutManager for Android’s RecyclerView
  • ChipsLayoutManager – RecyclerView’s LayoutManager which moves item to the next line when no space left on the current. Can represent google material chips guideline or tags view.
  • RecyclerViewHelper – Provides the most common functions around recycler view like Swipe to dismiss, Drag and Drop, Divider in the ui, events for when item selected and when not selected, on-click listener for items.
  • async-expandable-list – async-expandable-list provides solutions to displaying header-sub-items structure with simple api and asynchronously loading sub-list into an expandable list.
  • Epoxy – Epoxy is an Android library for building complex screens in a RecyclerView.

Easy Navigation

UI Components

Drawing

  • MPAndroidChart – A powerful Android chart view / graph view library, supporting line- bar- pie- radar- bubble- and candlestick charts as well as scaling, dragging and animations.
  • HoloGraphLibrary – Newer graphing library
  • EazeGraph – Another newer library with potential
  • AndroidCharts – Easy to use charts
  • AndroidGraphView – library to create flexible and nice-looking diagrams.
  • AndroidPlot – plotting library for Android
  • WilliamChart – Flexible charting library with useful motion capabilities.
  • HelloCharts – Charts/graphs library for Android with support for scaling, scrolling and animations.
  • Leonids – Simple and easy particle effects (See Tutorial)
  • Confetti – Newer particle effects library.
  • AChartEngine – This is a charting software library for Android applications

Image Processing

Scanning

Persistence

  • ActiveAndroid
  • DBFlow – A robust, powerful, and very simple ORM android database library with annotation processing.
  • greenDAO
  • SugarORM
  • RxCache – Reactive caching library for Android
  • Android-Orma – A type-safe ORM for Android as a wrapper of SQLiteDatabase
  • ORMLite
  • SQLBrite – Lightweight wrapper around SQLiteOpenHelper
  • Cupboard – Popular take on SQL wrapper
  • StorIO – Fresh take on a light SQL wrapper
  • Realm
  • NexusData
  • Hawk – Persistent secure key/value store
  • Poetry – Persist JSON directly into SQLite
  • JDXA – The KISS ORM for Android – Simple, Non-intrusive, and Flexible
  • Schematic – Generate the SQLite and ContentProvider code

Binding

Compatibility

Scrolling and Parallax

This is a list of popular scrolling and parallax libraries:

Debugging

  • Stetho – A debug bridge for Android applications which could be used for multiple purposes not limited to Network Inspection, Database Inspection and Javascript Console.
  • Android Debug Database – Android Debug Database allows you to view databases and shared preferences directly in your browser in a very simple way.
  • Bugfender – Cloud storage for your app logs, track user behaviour to find problems in your mobile apps.
  • Chuck – Chuck is a simple in-app HTTP inspector for Android OkHttp clients. Chuck intercepts and persists all HTTP requests and responses inside your application, and provides a UI for inspecting their content.
  • AnUitor – UI debug tool for Android

Resources

Check out the following resources for finding libraries:

References

https://github.com/codepath/android_guides/wiki/Must-Have-libraries

50 Android Studio Tips, Tricks & Resources


Tập hợp các tips, tricks, shortcuts trong android

Ở bài viết này mình sẽ chia sẽ các tips, tricks, shortcuts để giúp cải thiện tốc độ phát triển ứng dụng.

Visual

  1. Material Colors theme for Android Logcat

Để thay đổi Android Studio Logcat bạn vào : Preferences (Settings on Windows / Linux machines) → Editor → Colors & Fonts → Android Logcat

Một số mã màu:

  • Assert #BA68C8
  • Debug #2196F3
  • Error #F44336
  • Info #4CAF50
  • Verbose #BBBBBB
  • Warning #FF9800

2. Ngăn ngừa Android Studio Logcat xoá log khi mà ứng dụng hiện tại bị crashes.

Bạn vào khungAndroid Monitor và chọn Edit filter configuration khi filter name thả xuống.

3. Sử dụng code style phù hợp to your IDE

Bạn vào Preferences → Code Style → Java và trongScheme thả xuống , bạn có thể chọn cho mình một style phù hợp.

Có 2 styles thông dụng:

4. Use split screen for increasing efficiency.

Để dùng tính năng này, bạn chuột phải trên tab chính của màn hình và chọn Split Vertically / Horizontally.

Bạn có thể đặt phím tắt cho thao tác này . Mở Preferences → Keycap và tìm Split Vertically. Sau đó bạn Add Keyboard Shortcut như hình.
Tôi thêm phím tắt control + alt + v cho màn hìnhvertical split ( chia theo chiều dọc)

5. Distraction Free Mode.

Bạn có thể enable tính năng này: View → Enter Distraction Free Mode

6. Use Live Templates

  • Bạn có thể sử dụng phím tắt: cmd + j (Windows / Linux: ctrl + j).

Bạn có thể sử dụng các template có sẵn như Toasts or if

Shortcuts and helpful commands

1. The best and the most helpful command is Search for command:
cmd + shift + a (Windows / Linux: ctrl + shift + a).

Let’s say you want to close current tab and you don’t know how. You just type: close and you’ll get a proper shortcut / command.

2. Choose from the last copy / pastes (manage your clipboard):
cmd + shift + v (Windows / Linux: ctrl + shift + v).
By default there are 5 last copy/paste items.

3. Enable multicursor feature: control + g (alt + j for Windows / Linux).

A detailed article about this feature is provided by Bartek Lipinski on Medium. Highly recommended!

4. Open a class: cmd + o (Windows / Linux: ctrl + n).

5. Open any file: cmd + shift + o (Windows / Linux: ctrl + shift + n).

6. Open symbol: cmd + option + o (Windows / Linux: alt + shift + n).

7. Go to implementation: cmd + option + b (Windows / Linux:
ctrl + alt + b).
Let’s say you have an interface. By clicking on the interface’s name and then clicking the Go to implementation shortcut, you will be redirected to classes which implement that interface.

8. Go to declaration: cmd + b (Windows / Linux: ctrl + b).
It allows you to quickly check and go to a declaration of a class, method or a variable.

9. Go to type declaration: control + shift + b (Windows / Linux:
ctrl + shift + b).
Let’s say you defined:

Employee employee = new Employee(“Michal”);

When your caret is on employee and you click the shortcut, you will be redirected to the Employee class.

10. Go to super: cmd + u (Windows / Linux: ctrl + u).
For instance, you override some method. When your caret in on the method’s name and you click Go to super shortcut, you will be redirected to the parent method.

11. Move between tabs: cmd + shift + [ (move left) or cmd + shift + ](move right) (Windows / Linux: alt + ← / →).

12. Move between Design / Text tabs in layout’s view:
control + shift + ← / → (Windows / Linux: alt + shift + ← / →).

13. Close a current tab: cmd + w (Windows / Linux: ctrl + shift + a).

14. Hide all windows: cmd + shift + F12 (Windows / Linux:
ctrl + shift + F12).

15. Minimize Android Studio instance: cmd + m (Windows / Linux:
ctrl + m).

16. Format your code: cmd + option + l (Windows / Linux:
ctrl + alt + l).

17. Auto-indent lines: control + option + i (Windows / Linux:
ctrl + alt + i).

18. Implement methods: control + i (Windows / Linux: ctrl + i).
Let’s say you implement an interface. Then, you can quickly import all methods provided by that interface, just by clicking this shortcut.

19. Smart code completion (filters the list of methods and variables by expected type): control + shift + space (Windows / Linux: ctrl + shift + space).

20. Find: cmd + f (Windows / Linux: ctrl + f).

21. Find and replace: cmd + r (Windows / Linux: ctrl + r).

22. Move hardcoded strings to resources: option + return (Windows / Linux: alt + enter). The shortcut must be used when a caret is on a text. Check the gif below:

If you use that shortcut globally, the IDE will do Project quick fix (show intention actions and quick fixes).

23. Build and run: control + r (Windows / Linux: shift + F10).

Plugins: Một số plugins hữu ích

  1. Key promoter — a plugin which will help you to use a keyboard more often.
  2. String Manipulation — a plugin which provides actions for text manipulation (e.g. toggling styles like camelCase, hyphen-lowercase etc., capitalize text and many more).
  3. Android Material Design Icon Generator — this plugin helps you to set Material Design icons to your Android project. After installation you can use a shortcut: cmd + shift + m to generate an icon (by default).
  4. ButterKnifeZelezny — simple plugin that allows one-click creation of Butterknife view injections.
  5. IntelliJ/Android Studio Plugin for Android Parcelable boilerplate code generation — a plugin that generates an Android Parcelable implementation based on fields in the class.
  6. ADB Idea — a plugin that helps and automates adb commands to: uninstall, kill, start, restart, clear an application and clear the application data and restart it.
  7. Genymotion plugin — this plugin allows you to create and start Genymotion virtual devices from Android Studio.
  8. Android Methods Count — a plugin that parses your Android library dependencies and shows the methods count as an handy hint.
  9. Git Flow Integration — a plugin for introducing a Git Flow branching model.
  10. Builder plugin — a plugin (from Square) that generates a static nested Builder for a class.

MultiThreading: AsyncTask trong Android


Giới thiệu

Trong ứng dụng Android có nhiều tác vụ (task) chạy song song với nhau để đảm bảo ứng dụng của chúng ta tận dụng được hết khả năng của CPU và mang  lại performence cho ứng dụng. Vậy để lập trình được nhiều tác vụ chạy song song trong ứng dụng Android như thế nào thì bài viết này sẽ cùng các bạn tìm hiểu chi tiết.

Read more of this post

Những kiến thức về View trong Android mà các bạn nên biết


Giới thiệu

Trong loạt các bài về Android mình viết về View khá là nhiều vì trong Android đi đâu bạn cũng đụng phải View ví dụ như các View thường xuyên sử dụng ví dụ EditText, Button, TextView, ImageView, RadioButton, CheckBox, ImageButton hay những view thuộc ViewGroup như FrameLayout, LinearLayout, RelativeLayout, TableLayout hayListView, Toolbar, RecyclerView,và mới đây trong Google 2016 cũng đã giới thiệu một View mới là ConstrainLayout. Và mình cũng đã có một thời gian dài làm việc với UI nên hôm nay mình viết một bài về View chia sẽ kinh nghiệm của mình về View trong Android.

Các bạn cũng có thể xem lại bài viết Các View cơ bản trong Android

Khái niệm View

Những gì chúng ta nhìn thấy trên màn hình thiết bị android được gọi là View (trong window thường được gọi là control). View được vẽ trên thiết bị android với một hình chữ nhật.

View có một sự ràng buộc chặt chẻ với dữ liệu. Ví dụ với ImageView thì data chính là bitmap, hay TextView thì có data chính là text. View sẽ dựa vào data để vẽ lên màn hình Android.

 

 

Ngoài ra View có thể tương tác với người dùng thông qua các action touch, drag, drop, v.v.  Với các action xảy ra trên view thì từ đó view sẽ được vẽ lại hay thay đổi kích thước hay là thay đổi data.

Để hiểu rõ hơn về View các bạn nên đọc mã nguồn của nó ở đây

Điều gì xảy ra khi bạn add một View vào ViewGroup

Khi chúng ta add một View và một ViewGroup (FrameLayout, LinearLayout, RelativeLayout) thì các method sau sẽ được gọi.

Các phương thức sẽ được chạy từ trên xuống dưới. Và dưới đây mình sẽ giải thích một số phương thức để các bạn hiểu rõ hơn.

Construct

Chắc mình cũng không có gì để nói về phần này vì đơn giản nó làm hàm tạo. Kiến thức basic của OOP phải không nào.

onAttachedToWindow()

Phương thức này đươc gọi khi chúng ta attach view vào Window

onMeasure

Phương thức này là phương thức rất quan trọng của view. Phương thức này là phương thức tính toán, ước lượng kích thước cho View. Trong phương thức này sau khi bạn tính toán xong kích thức phải gọi phương thức setMeasuredDimension() để set width và height cho view.

Dưới đây là phương thức onMeasure

Hai giá trị widthMeasureSpect, heightMeasureSpec là hai giá trị mà ViewGroup truyền xuống. Mỗi tham số này sẽ có hai giá trị chứ trong nó đó là

+ Giá trị kích thước (width, height)

+ Giá trị MeasureSpec gồm có ba giá trị là EXACTLY, AT_MOST, UNSPECIFIED

Với từng giá trị có ý nghĩa như sau:
+ MeasureSpec.EXACTLY: View sẽ có kích thước xác định theo giá trị của người dùng set. Trường hợp này xảy ra nếu set layout_width hoặc layout_height là một con số xác định hoặc là match_parent.

+ MeasureSpec.AT_MOST: View sẽ có kích thước nhỏ hơn hoặc bằng đúng giá trị của kích thước của parent.

+ MeasureSpec.UNSPECIFIED. View sẽ có kích thước như nó mong muốn (có thể lớn hơn kích thước của parent). Trường hợp xảy ra nếu layout_width hoặc layout_height có gía trị là wrap_content.

Lưu ý: Phương thức này được gọi nhiều lần

Nếu bạn đã từng gặp lỗi bạn getWidth và getHeight của View mà return về giá trị 0 thì nguyên nhân là do phương thức onMeasure chưa được call và chưa set setMeasureDimension().

onLayout

Phương thức này dùng để xác định vị trí định vị của View. Thông thường phương thức này thường xử dụng khi chúng ta muốn tạo một ViewGroup mới.

Lưu ý: Phương thức này cũng được gọi nhiều lần

onDraw

Rất đơn giản đây là phương thức vẽ của View. Trong Android mọi thứ đều được vẽ lên Canvas. Sau khi chạy xong phương thức này thì View chính thức được vẽ lên màn hình Android.

Nếu View có thuộc tính Visibility = GONE thì Android sẽ không thực hiện vẽ View đó.

Lưu ý: Phương thức này không được gọi nếu View đó là ViewGroup

requestLayout, invalidate, postInvalidate

Những phương thức này có tác dụng như thế nào và khi nào phải sử dụng nó

requestLayout

Khi bạn gọi phương thức này thì android thực hiện tính toán lại kích thước của View. Nghĩa là phải chạy vào phương thức onMeasure và đi xuống những phương thức khác để vẽ view.

Trường hợp chúng ta gọi method này khi khi chúng ta muốn thay đổi kích thước của View

invalide và postInvalidate

Khi gọi phương thức này thì Android sẽ gọi phương thức onDraw của View để tiến hành vẽ lại View.

Trường hợp chúng ta gọi phương thức này khi mà chúng ta muốn vẽ lại view chứ không thay đổi kích thức của View. Mình ví dụ như khi chúng ta setTextColor cho TextView thì trong phương thức setTextColor sẽ thực hiện gọi invalidate.

Vậy hai phương thức này khác gì nhau?

Hai phương thức này có cùng chức năng và trường hợp sử dụng như chỉ khác nhau ở chổ là nếu bạn muốn vẽ trong UI Thread hay Main Thread thì gọi invalidate còn nếu bạn muốn vẽ trong một Thread khác không phải là Main Thread thì phải gọi postInvalidate.

Các phương thức Touch trên View

Trên View cơ bản (Không phải ViewGroup) chúng ta có một phương thức touch trên view đó là phương thức onTouchEvent

Đối tượng MotionEvent giữ các thông tin về touch như vị trí x, y. action v.v

Hệ thống touch trên View khá là khó hiểu nên mình sẽ có một bài viết nói về nó. Trong bài viết này mình chỉ giới thiệu phương thức này thôi.

Ngoài ra nếu View là ViewGroup chúng ta có nhiều phương thức xử lý touch hơn nữa. Các bạn có thể tìm hiểm các phương thức

Ví dụ minh hoạ

Sau đây tôi sẽ tạo một class CustomView có nội dung như sau

Sau đó tôi addView này vào RelativeLayout trong Xml

Tiến hành run ứng dụng và xem log.

Các bạn thấy rằng onMeasure và onLayout được chạy khá nhiều lần

Tiếp tục xem tiếp log khi tôi touch và View.

Khi bạn remove view ra khỏi ViewGroup hay back Activity thì phương thức onDetachedFromWindows() được gọi.

Những Intent Implicit thường xuyên sử dụng


Giới thiệu

Trong hệ điều hành Android có những Activity mà mọi app có thể sử dụng ví dụ như mở trình duyệt, call phone, sending email, google play store. Vậy các mở và thao tác với những activity này như thế nào thì bài viết hôm nay mình sẽ cùng các bạn tìm hiểm.

Intent Explicit và Intent Implicit

Trước khi đi vào sử dụng những Implicit mình sẽ phân biệt cho các biệt Intent Explicit và Intent Implicit khác nhau như thế nào.

Intent Explicit

Intent Explicit hay dịch ra là Intent tường minh và nó như thế nào nhỉ. Các bạn còn nhớ khi chúng ta sử muốn chuyển từ activity này sang activity thông qua phương thức startActivity và khởi tạo đối tượng intent như sau:

Các bạn thấy rằng chúng ta phải truyền vào hai activity là activity hiện tại và activity bạn muốn chuyển qua. Thì đó chính là Intent Explicit.

Intent Implicit

Intent Implicit (Intent không tường minh) cũng giống như Intend Emplicit nhưng Intent Implicit không cần phải chỉ định rõ ràng những activity mà bạn chỉ cần truyền vào một biến cờ tương ứng với những activity mà bạn sử dụng. Ví dụ như

Trong bài viết này mình sẽ hướng dẫn nhưng Intent Implicit thường xuyên sử dụng trong app ví dụ như intent callphone, send video, share content, open brower, google store play.

Intent Implicit thường xuyên sử dụng

Phone Call

Send Email

Send Gmail

Launch Website

Open Google Play Store

Compose SMS

Google Maps

Capture Photo

Sharing Content

Hình ảnh hoặc các dữ liệu nhị phân

Share HTML