Giải quyết việc tự động tạo Fragment Layout trong các phiên bản ADT mới

Published by Dương Linh on

Giải quyết việc tự động tạo Fragment Layout trong các phiên bản ADT mới

Sau khi nâng cấp ADT phiên bản 22.6.x, một điều khó chịu xảy ra đối với nhiều lập trình viên, đó là Google có xu hướng cưỡng ép chúng ta phải làm việc với Fragment Layout và hệ thống điều hướng đặc trưng của Android như ViewPager. Chưa hết, ADT phiên bản mới còn làm project trở nên lộn xộn hơn một chút bằng cách tự động thêm thư viện appcompat_v7 vào project trong trường hợp bạn muốn build ứng dụng cho các API thấp, tất nhiên điều này là hợp lý vì những API thấp không làm việc tốt với Fragment Layout và ViewPager. Trong bài viết này, txnam.net sẽ gợi ý những cách bạn xử lý những điều khó chịu này.

Fragment Layout và ViewPager dùng làm gì?

Giải quyết việc tự động tạo Fragment Layout trong các phiên bản ADT mới-1

Giao diện mới bắt phải tạo Fragment Layout

Khái niệm Fragment Layout được giới thiệu từ phiên bản Android 3.0 (API 11) nhưng chỉ được chính thức đưa vào SDK phiên bản API 14. Từ Android 3.0, Google bắt đầu đưa Android lên máy tính bảng (những phiên bản trước được thiết kế cho trải nghiệm trên điện thoại); với máy tính bảng, thế giới thiết bị Android xuất hiện loại màn hình rộng và có rất nhiều kích cỡ, điều này làm nảy sinh vấn đề tương thích màn hình khi ứng dụng chạy trên máy tính bảng và điện thoại di động.

Fragment Layout là lời giải của Google cho vấn đề này, trong đó các vùng màn hình có thể được chia nhỏ thành các Fragment (và chuyển qua lại dựa trên hệ thống menu hoặc thao tác vuốt màn hình), trường hợp màn hình đủ to, các Fragment này sẽ ghép với nhau và cùng hiện diện trên một layout gốc. ViewPager là gợi ý của Google trong việc điều khiển qua lại giữa các thành phần giao diện.

Vấn đề nảy sinh là không phải nhà phát triển nào cũng thích giải pháp của Google, điều này dẫn tới việc trải nghiệm mà các ứng dụng Android đem tới cho người dùng trở nên thiếu nhất quán; cuối cùng, Google quyết định việc tạo Fragment Layout nên là mặc định mỗi khi tạo một Activity mới. Kết quả chính là những điều khó chịu mà chúng ta đã thấy trong ADT phiên bản 22.6.x:

-Mặc định yêu cầu nhập tên và tạo Fragment Layout khi tạo Activity mới

-Một Activity mặc định thay vì chỉ có một file java và một file layout thì bây giờ sẽ có thêm một file layout nữa

-Mã nguồn mặc định sẽ thêm dài dòng, vì có thêm những đoạn mã giúp làm việc với Fragment Layout

-Nếu ứng dụng dịch với những API thấp, sẽ tự động bổ sung thêm một thư viện mới giúp làm việc tốt với Fragment Layout và ViewPager

Bây giờ chúng ta hãy xem xét các giải pháp giải quyết điều khó chịu này.

Đầu hàng Google

Đây là giải pháp nhẹ nhàng nhất, chúng ta nên gạt bỏ những khó chịu và tập sử dụng Fragment Layout như Google muốn. Nói cho cùng thì Google cũng chỉ muốn điều tốt cho người sử dụng và lập trình viên. Việc cứ khăng khăng từ chối sử dụng các điều khiển dạng fragment rất có thể làm chúng ta bỏ lỡ chuyển tàu những ứng dụng mới sẽ được Google phát triển sau này.

Sử dụng lại bản ADT cũ

Đây là giải pháp hơi cực đoan, tuy nhiên không phải suy nghĩ gì nhiều, khi nào bắt buộc phải nâng cấp ADT thì sẽ tính sau, còn giờ thì hãy làm việc theo cách cũ đã! Nếu bạn quyết như vậy, có thể download bản ADT 22.3.0 tại ĐÂY, sau đó mở Eclipse uninstall bản ADT hiện tại và cài bản cũ bạn vừa tải về.

Cứ để tạo Fragment Layout rồi xóa đi

Giải quyết việc tự động tạo Fragment Layout trong các phiên bản ADT mới-2

ADT tạo ra thêm một file layout mới kèm theo hàng loạt mã hỗ trợ dài dòng

Cách làm thông thường nhất là sửa lại những gì ADT tự động tạo ra, điều này rất bình thường, ngay cả trong các bản ADT cũ, nhiều lập trình viên vẫn thường xuyên xóa đi những đoạn mã không cần thiết do ADT tự sinh ra. Trong tình huống mới thì việc này nặng nề hơn một chút, bạn sẽ phải thực hiện:

-Xóa trắng nội dung của activity_main.xml

-Copy toàn bộ nội dung từ fragment_main.xml sang activity_main.xml

-Xóa file fragment_main.xml

-Xóa tất cả các phương thức, class con trong MainActivity ngoại trừ onCreate

-Sửa lại onCreate, loại bỏ tất cả chỉ giữ lại 2 dòng đầu của phương thức

Đấy là trong tình huống thông thường, bạn cần làm khác đi một chút nếu bạn đặt tên khác cho fragment và activity, sửa như vậy quả là hơi nhiều đúng không nhỉ?

Chỉnh sửa Blank Activity template

Với những bạn không thích phải chỉnh sửa quá nhiều như phương án trên, chúng ta có thể nghĩ tới việc động tay chân một chút trên Blank Activity template của ADT.

Chúng ta biết rằng giao diện tạo project của ADT sử dụng các mẫu được viết sẵn, chính các mẫu này ràng buộc việc chúng ta phải nhập tên cho Fragment Layout, vậy tại sao chúng ta không sửa những mẫu này đi để chúng không có những yêu cầu như vậy nữa? Cách làm như sau:

-Từ thư mục cài đặt Android SDK vào thư mục “tools/templates/activities/BlankActivity

-Bỏ yêu cầu có tên cho Fragment Layout: mở file “template.xml“, tìm phần tham số của FragmentLayout (tìm chuỗi id=”fragmentLayoutName”), sửa lại ràng buộc constraints=”layout|unique|nonempty”thành constraints=”empty”

-Bỏ việc tạo file fragment layout xml: mở file “recipie.xml.ftl” xóa dòng 56 & 57, bạn có thể xóa luôn dòng 81 (yêu cầu mở file fragment layout sau khi tạo xong project)

-Điều chỉnh lại file java mặc định: vào tiếp thư mục “root/src/app_package” mở file “SampleActivity.java.ftl“, xóa đi 2 dòng có chứa “#inlclude” ở cuối file (xóa cả dòng luôn nhé)

-Điều chỉnh lại file layout xml mặc định: trở ra thư mục BlankActivity rồi vào tiếp thư mục “root/res/layout“, copy toàn bộ nội dung trong file “fragment_simple.xml.ftl” đè vào nội dung của file “activity_fragment_container.xml.ftl

Vậy là xong, tuy hơi lằng nhằng, nhưng từ giờ trở đi mọi việc như cũ, khác biệt duy nhất là bạn đừng nhập tên cho fragment layout nữa, hãy để trống.

Tự tạo một Blank Activity của bạn

Đây là giải pháp được txnam.net đề xuất cho các bạn; thay vì chỉnh sửa BlankActivity, chúng ta hãy tạo thêm một BlankActivity nữa nhưng theo phong cách của chúng ta. Cách làm rất đơn giản như sau:

-Tải file template được tạo sẵn theo phong cách cũ: BlankAcvitityOld

-Bên trong file có 1 thư mục tên BlankActivityOld, hãy giải nén và copy toàn bộ thư mục vào thư  mục “tools/templates/activities/” (tức là để nó ngang hàng với thư mục BlankActivity hiện tại, bạn có thể đổi dùng tên khác chứ không nhất thiết phải là BlankActivityOld

-Vậy là xong, giờ hãy bật Eclipse và xem thành quả, sau khi nhập thông tin về project, màn hình tạo activity có thêm một lựa chọn mới “Really Blank Activity”, hãy chọn loại activity này nếu bạn ghét Fragment Layout

Dương Linh
Theo txnam.net