2013-11-02 22 views
6

vì vậy, tôi đang đối mặt với vấn đề này trong thời gian dài. Tôi có Nexus 4 và Nexus 7 đều chạy Android 4.3 và tôi đã có ứng dụng với targetSdkVersion = "11" ("Tôi sử dụng 11 vì bất kỳ sdk mục tiêu nào dưới đây 11 không hỗ trợ cảm ứng đa điểm cho tôi). Và vấn đề là rằng 3-dot trình đơn hiển thị trên Nexus 4 nhưng chương doesnt trên Nexus 7. nút menu 3 dấu chấm trên Nexus 7 chỉ làm việc nếu tôi đặt targetSdkVersion = "8" nhưng sau đó doesnt cảm ứng đa điểm công việcnút menu không hiển thị trên nexus 7

Nexus 4: enter image description here

Nexus 7: enter image description here

mã:

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="11" /> 

ảnh chụp màn hình: nexus 7 enter image description here

Nexus 4: enter image description here

+2

Bạn có đang tham chiếu đến nút ... trong thanh tác vụ không? Đăng ảnh chụp màn hình sẽ hữu ích. Nếu bạn không có đủ danh tiếng để thực hiện việc đó trực tiếp, hãy tải hình ảnh lên nơi khác và tham khảo chúng trong câu hỏi của bạn. – CommonsWare

+0

tôi đã thêm màn hình, tôi không muốn sử dụng thanh tác vụ, tôi muốn có menu 3 dấu chấm trong thanh điều hướng – user1798049

Trả lời

12

Trong trường hợp bạn đang đặc biệt tự hỏi tại sao các nút không được hiển thị các quy tắc sau đây được áp dụng khi Android xác định nếu một nút menu di sản là cần thiết:

  • Nếu phiên bản đích API là ít hơn 11 nó được hiển thị trên tất cả thiết bị
  • Nếu phiên bản đích là 11, 12 hoặc 13 (tức là Honeycomb chỉ dành cho máy tính bảng), Android cho rằng ứng dụng của bạn đã được thiết kế cho máy tính bảng và sẽ không hiển thị nút cũ trên máy tính bảng, nhưng trên điện thoại
  • Nếu mục tiêu là 14 trở lên (ICS trở lên), Android giả định ứng dụng của bạn được thiết kế cho máy tính bảng và điện thoại và do đó nút không được hiển thị.

Nhưng giống như các câu trả lời khác nói, bạn không nên sử dụng nút menu này. Nếu bạn không muốn toàn bộ ActionBar, một tùy chọn khác sẽ có nút ba dấu chấm trong hoạt động của bạn hiển thị menu sử dụng PopupMenu.

+0

Bài viết tổng hợp điều này khá độc đáo: http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html – RonR

+0

bạn xứng đáng với 50 điểm đó! +1 từ tôi – Li3ro

9

Bạn không nên sử dụng menu nữa. Từ the Menus documentation:

Trên Android 3.0 trở lên, các mục từ trình đơn tùy chọn được trình bày bởi thanh tác vụ như kết hợp các mục tác vụ trên màn hình và tùy chọn tràn. Bắt đầu với Android 3.0, nút Menu không được chấp nhận (một số thiết bị không có), vì vậy bạn nên di chuyển về phía sử dụng thanh tác vụ để cung cấp quyền truy cập vào các tác vụ và các tùy chọn khác.

Sử dụng ActionBar.

+0

Sử dụng tốt hơn ActionBar (Tham khảo: http://developer.android.com/guide/topics/ui/ actionbar.html với ví dụ). –

2

Giải pháp chính xác là sử dụng ActionBar nhưng có thể có một số hacks để trình đơn mục bổ sung xuất hiện.

Cụ thể, có một cờ cửa sổ ẩn FLAG_NEEDS_MENU_KEY bạn có thể truy cập thông qua phản ánh. Đây là đoạn mã (từ this blog):

public static void addLegacyOverflowButton(Window window) { 
    if (window.peekDecorView() == null) { 
    throw new RuntimeException("Must call addLegacyOverflowButton() after setContentView()"); 
    } 

    try { 
    window.addFlags(WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null)); 
    } 
    catch (NoSuchFieldException e) { 
    // Ignore since this field won't exist in most versions of Android 
    } 
    catch (IllegalAccessException e) { 
    Log.w(TAG, "Could not access FLAG_NEEDS_MENU_KEY in addLegacyOverflowButton()", e); 
    } 
} 

Tôi đã thử nghiệm điều này trên một vài thiết bị Nexus và thiết bị hoạt động. Nhận xét về trạng thái blog có các thiết bị không hoạt động. Sử dụng cẩn thận. Và sử dụng ActionBar, thực sự.

1

Có một cách đơn giản để buộc tùy chọn trình đơn ở lại tràn trong menu. Nếu bạn đang tạo một trình đơn bằng XML, bạn có thể ép buộc điều này bằng thuộc tính "showAsAction".

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/menu_option" 
     android:showAsAction="never" 
     android:title="@string/option_name" /> 

</menu> 

Nếu bạn đặt "showAsAction" thành "never", nó sẽ bị buộc phải không hiển thị trên ActionBar, vì vậy tùy chọn sẽ vẫn còn trên menu tràn.

Có thêm thông tin (như làm thế nào để vinculate menu file XML để một hoạt động) trên trang web tài liệu Android chính thức: http://developer.android.com/guide/topics/resources/menu-resource.html

Tôi muốn này có thể hữu ích!

0

Tôi wouldnt luôn khuyên bạn sử dụng này, vì một hack của nó mà phá vỡ tính thống nhất của điện thoại, nhưng nếu bạn muốn "3 chấm" menu, được gọi là menu tràn bạn cần phải thêm phương pháp này

//Hack to display overflowMenu on devices with a menu button 
private void getOverflowMenu() { 

    try { 
     ViewConfiguration config = ViewConfiguration.get(this); 
     Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); 
     if(menuKeyField != null) { 
      menuKeyField.setAccessible(true); 
      menuKeyField.setBoolean(config, false); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Và trong số onCreate(), hãy gọi phương thức này.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
setContentView(R.layout.Activity); 

getOverflowMenu(); 
} 
+0

Tính năng này không hoạt động đối với tôi trên Nexus 5 –

Các vấn đề liên quan