2011-12-12 17 views
28

Chỉ cần tự hỏi cách ẩn các nút phần mềm ICS/home/etc theo lập trình. Cũng giống như các ứng dụng Youtube thực hiện khi phát video. Tôi muốn ẩn chúng trong khi video đang phát, nhưng đưa chúng lên nếu người dùng chạm vào màn hình.Ẩn các nút công tắc trở về nhà ICS

Tôi dường như không thể tìm thấy nó ở bất cứ đâu trên web hoặc trong tài liệu của Google.

Trả lời

22

cố gắng thiết lập một cửa sổ toàn màn hình với cờ SYSTEM_UI_FLAG_HIDE_NAVIGATION

+0

Đây có phải là cần thiết để gọi đây trên xem gốc? – Talha

-1

Nó được gọi là "Lights Out Mode" khi họ nói về nó trong các ứng dụng. Tôi không thể tìm thấy bất cứ điều gì liên quan đến ICS nhưng đây là một liên kết đến một cuộc thảo luận Honeycomb.

where is api call to do lights out mode in honeycomb

+0

Điều đó chỉ biến chúng thành "dấu chấm" nhỏ, không thực sự ẩn chúng (như ứng dụng YouTube nói trên). –

29

pinxue là chỗ-on ... bạn muốn SYSTEM_UI_FLAG_HIDE_NAVIGATION. Ví dụ:

myView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

Một điều cần lưu ý là mặc dù mọi tương tác người dùng (và ý tôi là BẤT K)) sẽ được chuyển sang lại.

Với tổ ong, gần nhất bạn có thể nhận được là chuyển sang chế độ "tắt đèn" (bây giờ được gọi là "cấu hình thấp" ... SYSTEM_UI_FLAG_LOW_PROFILE). Điều này chỉ làm cho các mục trên thanh điều hướng ít hiển thị hơn (các "dấu chấm" nhỏ mà bạn có thể thấy). Nếu bạn muốn làm việc tốt nhất mà bạn có thể duy trì ở tương thích ngược với Honeycomb bạn có thể sử dụng phản ánh để sử dụng phương pháp "tốt nhất":

// Ask the System Bar to hide 
int whichHiddenStatusToUse = android.view.View.STATUS_BAR_HIDDEN; 
try { 
    // if this next line doesn't thrown an exception then we are on ICS or 
    // above, so we can use the new field. 
    whichHiddenStatusToUse = View.class.getDeclaredField("SYSTEM_UI_FLAG_HIDE_NAVIGATION").getInt(mDrawingSurface); 
} catch (Exception ex) { 
} 
// now lets actually ask one of our views to request the decreased visibility 
myView.setSystemUiVisibility(whichHiddenStatusToUse); 
+7

Câu trả lời là tuyệt vời. Mặc dù, tôi sẽ cố gắng tránh sự phản chiếu bất cứ khi nào có thể. Bởi vì nó xấu xí - như thường lệ. Tôi chỉ cần kiểm tra phiên bản nền tảng hiện tại và sử dụng một trong các hằng số. Ví dụ. if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.ICE_CREAM_SANDWICH) {...} –

+1

Nơi lấy mDrawingSurface? – Nik

6

Bạn muốn SYSTEM_UI_FLAG_HIDE_NAVIGATION.

Cờ này đã được thêm vào là Ice Cream Sandwich, API 14. Trước đó, 14 cờ STATUS_BAR_HIDDEN đã được thêm vào Honeycomb, API 11. Trước đó, các nút điều hướng mềm không tồn tại, vì vậy chế độ toàn màn hình đã được xử lý hoàn toàn Themes (cụ thể là Theme.NoTitleBar.Fullscreen).

Sử dụng:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    mBaseLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    mBaseLayout.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
0

Câu trả lời này có thể không trực tiếp trả lời các câu hỏi. nhưng tôi đăng nó rằng nó có thể giúp người khác tiết kiệm thời gian.

Tôi cần phải ẩn hoàn toàn thanh Điều hướng. Ngay cả khi người dùng nhấp vào màn hình, nó sẽ vẫn ẩn.

Không có điều nào ở trên phù hợp với tôi.

Tôi đã viết một lớp sau vài ngày googling chủ đề này từ lâu. Tôi kết thúc lớp học này.

UtilsTaskBar.java

tôi không thể kiểm tra nó ở khắp mọi nơi, nhưng nó hoạt động trên 4 **

LƯU Ý:. tôi sử dụng lớp này cho các ứng dụng mục đích đặc biệt, mà không phải là cho người dùng thông thường.

Nếu bạn ẩn thanh Điều hướng với lớp này, nó sẽ không được hiển thị lại cho đến khi bạn khởi động lại thiết bị hoặc bạn hiển thị lại nó với cùng một lớp.

Vì vậy, chỉ sử dụng nó nếu bạn thực sự cần đến nó.

+0

Đã không hoạt động trong API 23 – yshahak

+0

@yshahak nó yêu cầu quyền root để chạy các chức năng đó, và tôi đã không kiểm tra nó trên api23 hoặc cao hơn, cảm ơn bạn đã thông báo. – MBH

+0

Vâng, bạn đã không đề cập đến một điều về rễ ... Đó là một câu chuyện khác nhau sau đó. – yshahak

0

trong AndroidManifest.xml thêm này:

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> 

sau đó bạn có thể sử dụng chức năng này để hiển thị và ẩn các home/trở lại thanh điều hướng

private void changeSystemBarVisibilty(boolean show) 
{ 
    Context context = getApplicationContext(); 
    final Intent intent = new Intent("android.intent.action.SYSTEM_BAR_VISIBILITY"); 
    intent.putExtra("show", show); 
    context.sendStickyBroadcast(intent); 
} 
Các vấn đề liên quan