Context menu là gì

Đối với những người không biết menu ngữ cảnh là gì, nó là danh sách các tùy chọn mà bạn nhận được khi nhấp chuột phải vào chương trình, tệp hoặc thư mục. Điều này được thiết lập bởi Windows và thường chứa một danh sách tiêu chuẩn các tùy chọn có thể thay đổi đôi chút theo loại tệp. Nói cách khác, phần mềm khác với các thư mục, và tất cả đều khác với những gì bạn sẽ tìm thấy cho hình ảnh, video, nhạc và hơn thế nữa.

Một chương trình có tên Easy Context Menu nhằm mục đích đơn giản hóa mọi thứ. Tiện ích nhỏ này mong muốn giải quyết nhiều vấn đề và lấp đầy một số khoảng trống hiện có trong môi trường máy tính ngày nay. Hãy bắt đầu và xem nó hoạt động như thế nào với những mục tiêu cao cả này.

Tải xuống và cài đặt

Tải xuống ứng dụng từ Trang web Sordum và cài đặt tệp – ngày nay, đây có thể là một bãi mìn của các tiện ích bổ sung drive-by như thanh công cụ và trợ lý tìm kiếm. Tuy nhiên, kiểm tra nhanh cho thấy không có cạm bẫy nào trong số này nằm trên con đường của bạn. Ngoài ra, tệp có kích thước có thể quản lý được, mặc dù bạn sẽ cần phải giải nén nó sau khi tải xuống.

Tôi xin lưu ý rằng bạn sẽ cần phải bỏ qua bảo vệ Windows để thiết lập và chạy điều này, và tôi cũng gặp một số vấn đề lúc đầu với Clover, mà tôi sử dụng để quản lý Explorer (nó thêm các tab). Ban đầu tôi vô hiệu hóa Clover, nhưng sau đó phát hiện ra rằng điều này thực sự không cần thiết. Mọi thứ sẽ tốt khi bạn hoàn thành.

Thành lập

Khi khởi chạy ứng dụng, bạn sẽ phải đối mặt với rất nhiều lựa chọn – nó gần như quá tải, nhưng đừng hoảng sợ. Bạn có thể làm được việc này. Hít thở sâu.

Có rất nhiều tùy chọn ở đây và hầu hết đều bị tắt theo mặc định. Chúng tôi không thể đưa ra lời khuyên cho bạn về những gì nên kích hoạt, nhưng hãy đưa ra một vài gợi ý về những thứ bạn đang thấy ở đây.

Màn hình này được chia thành các phần, được phân loại theo tất cả những thứ khác nhau có khả năng được nhấp chuột phải. Điều này bao gồm: thiết bị, máy tính để bàn, Máy tính của tôi, các thư mục và hơn thế nữa. Theo mặc định, chỉ dấu nhắc lệnh được bật và chỉ trong một vài danh mục. Bạn sẽ cần chọn và chọn những thứ khác mà bạn muốn đưa vào. Show and Hide Hidden Files and Folders, chẳng hạn, rất hữu ích cho nhiều người dùng có kinh nghiệm. Disk Cleanup ngữ cảnh của ổ đĩa cũng tiện dụng tương tự để dễ dàng truy cập.

Context menu là gì

Khi bạn đã chọn xong, hãy lên phía trên cùng bên trái của cửa sổ và nhấp vào biểu tượng chuột có dấu cộng màu xanh lục trên đó để lưu tất cả các thay đổi của bạn.

Thực đơn

Không có nhiều điều để chỉ ra ở đây. Trong khi phía trên cùng của màn hình có một menu với các tính năng thông thường – Tệp, Chỉnh sửa, Tùy chọn, Công cụ và Trợ giúp – bạn sẽ không tìm thấy nhiều thứ ở đó. Tùy chọn cung cấp một số lựa chọn ngôn ngữ và Công cụ cho phép dễ dàng bỏ chọn tất cả các hộp trong trường hợp bạn quyết định bắt đầu lại.

Sự kết luận

Mặc dù điều này có thể không dành cho người dùng bình thường, nhưng đối với dân công nghệ, nhiều người trong số họ sẽ đọc nó, Easy Context Menu sẽ bổ sung nhiều chỉnh sửa có thể hữu ích trong quá trình sử dụng hàng ngày. Đối với nhiều bạn, đây sẽ là một tính năng nhỏ tiện dụng để thiết lập mọi thứ ngay trên hệ thống của bạn.

Bài viết này có hữu ích không?

Context menu là gì
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới.
Context menu là gì
Facebook

Khi bạn không thể cấp bất kỳ không gian của giao diện người dùng của bạn cho một chức năng cần thiết, bạn có thể sử dụng một Context Menu (Trình đơn ngữ cảnh), Context Menu là một menu nổi (floating menu) hiển thị để đáp ứng một cú nhấn dài (long press), mặc định là 500 mili giây. Context Menu có thể chứa nhiều Menu ItemSub Menu.

Context menu là gì

Một cú nhấn dài (long press) tiêu chuẩn trong Android là 500 mili giây, bạn có thể có được giá trị này bằng cách gọi phương thức ViewConfiguration.getLongPressTimeout(). Người dùng có thể thay đổi giá trị này trong mục Settings, nó sẽ có tác dụng đối với tất cả các ứng dụng trên thiết bị.

Context menu là gì

Bạn với tư cách là một nhà phát triển ứng dụng, bạn không thể thiết lập một giá trị khác cho "khoảng thời gian của một cú nhấn dài", nhưng bạn có thể sử dụng một vài thủ thuật để mô phỏng một cú nhấn dài (long press) với khoảng thời gian tùy biến và xử lý các hành động liên quan. (Xem thêm trong phần phụ lục phía cuối bài viết).

Khi một View được đăng ký với sự kiện Long-Press, hệ thống sẽ gọi phương thức onCreateContextMenu() để tạo và hiển thị Context Menu.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.button = (Button) this.findViewById(R.id.button_test); this.registerForContextMenu(this.button); } @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.layout_context_menu, menu); } // You may not need "Android Resource File" to have a ContextMenu. // Using Java to create Context Menu. public void onCreateContextMenu_2(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); // groupId, itemId, order, title MenuItem menuItemUpload = menu.add(1, 1, 1, "Upload"); MenuItem menuItemBookmark = menu.add(2, 2, 2, "Bookmark"); // groupId, itemId, order, title SubMenu subMenuShare= menu.addSubMenu(3, 3, 3, "Share"); subMenuShare.add(4, 31, 1, "Google" ); subMenuShare.add(5, 32, 2, "Instagram"); }

Khi người dùng click vào một Menu Item, phương thức onContextItemSelected() sẽ được gọi.

@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuItem_bookmark: Toast.makeText(this, "Bookmark", Toast.LENGTH_SHORT).show(); break; case R.id.menuItem_upload: Toast.makeText(this, "Upload", Toast.LENGTH_SHORT).show(); break; case R.id.menuItem_facebook: Toast.makeText(this, "Share Facebook", Toast.LENGTH_SHORT).show(); break; case R.id.menuItem_instagram: Toast.makeText(this, "Share Instagram", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show(); break; } return true; }

Bạn có thể sử dụng XML Android Resource File để thiết kế giao diện của một Context Menu. Tuy nhiên Context Menu của một ứng dụng thường khá đơn giản, vì vậy tạo ra một Context Menu hoàn toàn từ mã Java cũng là lựa chọn tốt (Xem thêm trong ví dụ bên dưới).

Context menu là gì

Chú ý: Một vài thuộc tính (attribute) của <item> (Menu Item) không có tác dụng khi nó được đặt trong một Context Menu, chẳng hạn:

  • app:showAsAction
  • android:icon  (Not work in Android 3.0+/API 11+)

OK, bây giờ chúng ta sẽ làm một ví dụ Context Menu, hãy xem trước ví dụ:

Context menu là gì

Trên Android Studio tạo mới một project.

Context menu là gì

  • Name: ContextMenuExample
  • Package name: org.o7planning.contextmenuexample

Context menu là gì

Chú ý: Bắt đầu từ Android 3.0 (API 11), ContextMenu không hỗ trợ các Icon, tuy nhiên bạn có thể copy các Icon dưới đây vào thư mục drawable để hỗ trợ các thiết bị Android cũ, hoặc bỏ qua bước này.

icon_upload.png icon_bookmark.png icon_share.png

Context menu là gì

Giao diện chính của ứng dụng rất đơn giản, chỉ có một Button, khi người dùng nhấn dài (Long press) trên Button một Context Menu sẽ hiển thị.

Context menu là gì

<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/button_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="48dp" android:text="Long Press Me" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>

Trên Android Studio chọn:

  • File > New > Android Resource File

Context menu là gì

  • File name: layout_context_menu.xml
  • Resource type: Menu

Context menu là gì

Context menu là gì

Trên Android Studio thiết kế giao diện cho Context Menu:

Context menu là gì

Sét đặt ID, Title, Icon cho các Menu Item:

Context menu là gì

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menuItem_upload" android:icon="@drawable/icon_upload" android:title="Upload" /> <item android:id="@+id/menuItem_bookmark" android:icon="@drawable/icon_bookmark" android:title="Bookmark" /> <item android:id="@+id/menuItem_share" android:icon="@drawable/icon_share" android:title="Share"> <menu> <item android:id="@+id/menuItem_facebook" android:title="Facebook" /> <item android:id="@+id/menuItem_instagram" android:title="Instagram" /> </menu> </item> </menu>

package org.o7planning.contextmenuexample; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private static final String LOG_TAG = "ContextMenuExample"; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.button = (Button) this.findViewById(R.id.button_test); this.registerForContextMenu(this.button); } @SuppressLint("RestrictedApi") @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.layout_context_menu, menu); // com.android.internal.view.menu.ContextMenuBuilder Log.i(LOG_TAG, ">>>>> Menu class: " + menu.getClass().getName()); // com.android.internal.view.menu.MenuBuilder Log.i(LOG_TAG, ">>>>> Menu superclass: " + menu.getClass().getSuperclass().getName()); } // You may not need "Android Resource File" to have a ContextMenu. // Using Java to create Context Menu. @SuppressLint("RestrictedApi") public void onCreateContextMenu_2(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("Context Menu"); // groupId, itemId, order, title MenuItem menuItemUpload = menu.add(1, 1, 1, "Upload"); MenuItem menuItemBookmark = menu.add(2, 2, 2, "Bookmark"); menuItemUpload.setIcon(R.drawable.icon_upload); menuItemBookmark.setIcon(R.drawable.icon_bookmark); // groupId, itemId, order, title SubMenu subMenuShare= menu.addSubMenu(3, 3, 3, "Share"); subMenuShare.setIcon(R.drawable.icon_share); subMenuShare.add(4, 31, 1, "Google" ); subMenuShare.add(5, 32, 2, "Instagram"); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuItem_bookmark: Toast.makeText(this, "Bookmark", Toast.LENGTH_SHORT).show(); break; case R.id.menuItem_upload: Toast.makeText(this, "Upload", Toast.LENGTH_SHORT).show(); break; case R.id.menuItem_facebook: Toast.makeText(this, "Share Facebook", Toast.LENGTH_SHORT).show(); break; case R.id.menuItem_instagram: Toast.makeText(this, "Share Instagram", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show(); break; } return true; } }