0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Tạo Widget Vuông Trên Android: Bước Đầu Khám Phá Tiện Ích Màn Hình Chính

Đăng vào 3 tuần trước

• 4 phút đọc

I. Widget Ứng Dụng Là Gì?

Widget là những tiện ích nhỏ gọn được hiển thị trực tiếp trên màn hình chính hoặc màn hình khóa của điện thoại Android. Chúng cho phép người dùng truy cập nhanh vào các chức năng nhất định của ứng dụng mà không cần phải mở toàn bộ ứng dụng. Ngoài ra, các widget còn cung cấp thông tin quan trọng và chức năng chính của ứng dụng đến người dùng một cách dễ dàng.

II. Lợi Ích của Widget

  • Trang trí màn hình chính: Widget giúp bạn làm đẹp cho giao diện màn hình chính của điện thoại.
  • Tiện lợi trong sử dụng: Widget mang lại sự thuận tiện cho người dùng khi có thể truy cập nhanh vào các tính năng yêu thích ngay trên màn hình chính.
  • Tiết kiệm thời gian: Người dùng không cần phải mở ứng dụng mỗi khi cần sử dụng một chức năng nào đó, giúp tiết kiệm thời gian và công sức.
  • Tùy chỉnh và Di chuyển: Người dùng có thể dễ dàng di chuyển widget trên các trang màn hình chính và thay đổi kích thước của chúng để phù hợp với sở thích và nhu cầu cá nhân.

III. Widget Vuông Trên Android

1. Cách Android Hiển Thị Widget Trên Màn Hình

Android sử dụng một hệ thống gọi là layout lưới (grid layout) để hiển thị các widget trên màn hình chính. Hệ thống này chia màn hình thành các ô nhỏ, được gọi là cell. Mỗi widget được gán cho một số lượng cell nhất định, xác định kích thước của widget. Khi thêm widget vào màn hình chính, Android sẽ tự động sắp xếp widget theo kích thước và số lượng cell có sẵn. Bạn cũng có thể di chuyển và thay đổi kích thước widget thủ công.

Một số lưu ý về cell:

  • Số lượng cell trên màn hình chính có thể thay đổi tùy theo từng thiết bị. Một số thiết bị có thể có nhiều cell hơn những thiết bị khác.
  • Một số widget có thể chiếm nhiều cell hơn theo chiều ngang hoặc chiều dọc.
  • Bạn có thể thay đổi kích thước mặc định của cell thông qua cài đặt trên thiết bị.

Lưu ý đặc biệt: Chiều dài và chiều rộng của một cell không nhất thiết phải bằng nhau, do đó khi tạo widget Android, việc đặt kích thước widget là 2x2 hay 3x3 sẽ chưa chắc tạo thành một widget hình vuông như mong muốn vì kích thước cell sẽ phụ thuộc vào từng loại điện thoại.

2. Những Cách Tiếp Cận Không Thành Công

Trong phần này, mình muốn chia sẻ một số cách tiếp cận mà mình đã thử nhưng không thành công. Mục đích là để bạn tham khảo và có thể áp dụng trong một số trường hợp khác mà bạn đang gặp phải.

Nếu bạn muốn đến phần hướng dẫn cụ thể tạo Widget hình vuông, hãy tiếp tục đọc mục tiếp theo nhé.

  • Sử dụng thuộc tính của Layout: Bạn có thể quen thuộc với thuộc tính aspectRatio trong CSS, xác định tỷ lệ giữa chiều rộng và chiều cao của một phần tử. Tuy nhiên, trong widget Android, thuộc tính layout_constraintRatio chỉ có trong ConstraintLayout, trong khi Widget Layout sử dụng RemoteViews và không hỗ trợ các loại Layout hoặc custom Layout khác.

  • Sử dụng Custom Layout: Dưới đây là ví dụ về Custom Layout:

java Copy
public class CustomSquareFrameLayout extends FrameLayout {
    public CustomSquareFrameLayout(Context context) { super(context); }
    public CustomSquareFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); }
    public CustomSquareFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int size = Math.min(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
        setMeasuredDimension(size, size);
    }
}

Hàm onMeasure cho phép bạn điều chỉnh chiều rộng và chiều cao của layout. Tuy nhiên, widget không thể sử dụng custom view hay subclasses.

Mặc dù hai cách này không thành công trong việc tạo ra một widget hình vuông trên Android, chúng ta vẫn có thể hiểu thêm về ConstraintLayout và Custom Layout để áp dụng cho những trường hợp khác.

3. Tạo Widget Vuông

Giống như cách sử dụng CustomLayout, chúng ta sẽ lấy chiều rộng và gán chiều dài cho widget layout dựa trên chiều rộng sử dụng những hàm có sẵn của RemoteViews.

java Copy
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.i_mental_widget);
    Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
    int size = options.getInt(appWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        views.setViewLayoutHeight(R.id.widgetView, size, TypedValue.COMPLEX_UNIT_DIP);
    }
    appWidgetManager.updateAppWidget(appWidgetId, views);
}

Trong đoạn mã trên:

  • options: Thông tin được truy xuất từ việc yêu cầu hệ thống Android cung cấp thông tin về một phiên bản widget cụ thể dựa trên appWidgetId.
  • size: Lấy thông tin chiều dài của widget qua phương thức getInt(appWidgetManager.OPTION_APPWIDGET_MIN_WIDTH).
  • R.id.widgetView: ID của root layout trong file UI của widget.
  • TypedValue.COMPLEX_UNIT_DIP: Đơn vị mà mình muốn thiết lập (ở đây là dp). Cuối cùng, bạn cần gọi phương thức appWidgetManager.updateAppWidget(appWidgetId, views) để làm mới widget.

Lưu ý: Hàm setViewLayoutHeight chỉ có sẵn từ phiên bản Android S (12) trở lên. Nếu người dùng sử dụng phiên bản Android dưới 12, việc tạo Square Widget sẽ không khả thi.

Kết thúc, mặc dù với kích thước 2x2 cell, phần hiển thị của widget vẫn sẽ giữ được hình vuông, chiều dài sẽ được gán dựa trên chiều rộng. Mình mong rằng bài viết này sẽ hữu ích cho bạn. Nếu có bất kỳ thắc mắc hay cần thêm thông tin, xin vui lòng liên hệ với mình.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào