2011-10-06 86 views
5

Chuyển từ chế độ toàn màn hình sang chế độ toàn màn hình bằng Android hoạt động tốt. Tuy nhiên, khi trở về từ hoạt động toàn màn hình của tôi (trình phát video toàn màn hình), hoạt động sẽ xuất hiện khi trượt xuống khi thanh trạng thái hoạt ảnh xuống. Dường như hoạt động tiếp tục hoạt ảnh từ chế độ toàn màn hình nhưng với thanh trạng thái không có hoạt động thực tế đang được vẽ như thể nó bị thiếu.Chuyển từ chế độ toàn màn hình sang pop/slide toàn màn hình

Tôi đã thử gây rối với tệp kê khai của tôi chỉ định chủ đề/kiểu. Tôi đã cố gắng làm điều này lập trình trong onCreate() trước khi xem nội dung được thiết lập và những nơi khác nhau trong vòng đời hoạt động:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 

Dường như không có cách nào để giữ cho các thanh trạng thái từ hiệu ứng động xuống và/hoặc từ chế độ xem nội dung từ bản vẽ đầu tiên mà không có thanh trạng thái ở đó và sau đó điều chỉnh xuống khi nó được hiển thị lại.

Bất kỳ ai có bất kỳ suy nghĩ nào về điều này? Tôi không chắc chắn nếu có bất kỳ cách nào để thay đổi điều này và chỉ là một hành vi của Android.

Xin cảm ơn trước.

Trả lời

1

Trong giao diện gốc của cách bố trí hoạt động thêm

android: paddingTop = "25dp"

Trong onCreate của hoạt động này, trước khi setContentView() thêm

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 
2
private void toggleFullscreen(boolean fullscreen) 
{ 
    WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
    if (fullscreen) 
    { 
     attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
    } 
    else 
    { 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
    } 
    getWindow().setAttributes(attrs); 
} 

Sử dụng tính năng này chắc chắn sẽ hoạt động

0

Tôi đã có thể đạt được điều này theo hai bước.

  1. Sử dụng Theme.AppCompat.Light.NoActionBar trong kiểu của tôi cho Hoạt động mà tôi muốn hiển thị ở chế độ toàn màn hình.

  2. Sử dụng mã bên dưới trong phương thức onCreate(Bundle savedInstanceState) của Hoạt động WindowManager.LayoutParams attributes = getWindow(). GetAttributes(); attributes.flags | = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; getWindow(). SetAttributes (thuộc tính);

Hy vọng điều này sẽ hữu ích. Hạnh phúc Mã hóa :)

1

Sau đây là giải pháp của tôi:

Hiển thị thanh trạng thái hệ thống trước khi kết thúc màn hình Hoạt động toàn

@Override 
public void onBackPressed() { 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

    mUIHandler.post(new Runnable() { 
     @Override 
     public void run() { 
      MyFullScreenActivity.super.onBackPressed(); 
     } 
    }); 
} 
+0

giải pháp này hữu ích hơn cho tôi bởi vì nó không gây ra hoạt động ban đầu phải điều chỉnh bố trí của nó. –

0

Tôi không biết nếu điều này sẽ làm việc cho bạn, nhưng nó làm việc cho tôi. Đặt đầy đủ hoạt động màn hình:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
setContentView(R.layout.my_screen); 

tắt toàn màn hình:

WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
getWindow().setAttributes(attrs); 
startActivity(new Intent(getBaseContext(),NewActivity.class)); 
finish(); 
1

Dưới đây là cách hoàn hảo để loại bỏ vấn đề này:

private void setFullscreen(boolean fullscreen) { 
    WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
    if (fullscreen) { 
     attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
     attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
    } 
    else { 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
    } 
    getWindow().setAttributes(attrs); 
} 

Gọi này trước super.onCreate(...) bên trong hoạt động của bạn.

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