2012-05-17 18 views
17

Tôi đã có một trường hợp lạ đối với Android ICS Launcher 4.0.x.Android ICS Launcher 4.0.x không thể giữ nguyên hướng màn hình

Pre-condition:

  • Một thiết bị ICS với sự cho phép gốc

  • Tải về Android ICS Launcher 4.0.3/4 mã nguồn (để sửa đổi và chạy)

Quy trình:

  1. Tới thị trường (Play Store), tải "Go Task Manager"

  2. mở Widgets tab trên Launcher, tìm "Mem Optimize", kéo vào màn hình Home (workspace)

  3. Tải về và cài đặt "Fruit Ninja "

  4. Tạo lối tắt" Fruit Ninja "bên cạnh tiện ích" Mem Optimize "trên Màn hình chính.

  5. Execute "Fruit Ninja" và giữ điện thoại của bạn trong CẢNH QUAN (giữ nó trong tay của bạn ở vị trí này, không thay đổi này)

  6. Trên màn hình menu của "Fruit Ninja", lát "Thoát" , chọn "Yes"

  7. Bây giờ trở lại trên màn hình Launcher Home, chạm vào "Mem Optimize" phụ tùng

Kết quả hiện tại:

  • Sau bước 7, màn hình được xoay sang LANDSCAPE một lúc và trở về PORTRAIT.

vọng:

  • Sau bước 7, màn hình nên được giữ trong CHÂN DUNG.

Tries của tôi (sửa đổi mã nguồn Launcher ICS):

  • Add để "manifest.xml": android:screenOrientation="portrait" => vẫn không thể khắc phục vấn đề.

  • Xử lý thay đổi cấu hình, android:configChanges="orientation|screenSize" => vẫn không thể khắc phục được sự cố.

  • Sử dụng: setRequestedScreenOrientation(PORTRAIT) => vẫn không thể khắc phục được sự cố.

Tôi đã thử làm việc trên Android 2.x; tuy nhiên, từ 4.0.3+, bằng cách nào đó nó không hoạt động như mong đợi. Có ai có bất kỳ ý tưởng về điều này?

+4

chúng tôi có thể có bản giới thiệu video về lỗi này không? – Ronnie

+0

Vị trí trong tệp kê khai bạn thêm android: screenOrientation? Bạn có thể sao chép đoạn trích không? – Warpzit

Trả lời

0

Trình khởi chạy ICS cổ phiếu có một vài nơi mà nó sẽ đặt hướng không xác định.Chỉ cần tìm kiếm Launcher.java cho setRequestedOrientation, nhưng cụ thể là trên trình tạo hoặc máy tính bảng "eng". Nó thực hiện nó trong onCreate nhưng cũng sau khi kéo/thả từ appscustomize.

Từ onCreate Launcher.java của:

// On large interfaces, we want the screen to auto-rotate based on the current orientation 
if (LauncherApplication.isScreenLarge() || Build.TYPE.contentEquals("eng")) { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 
+0

hi Kevin, lâu rồi không gặp! Đúng là một số nơi trong mã đã đặt định hướng, nhưng trên thực tế, tôi đã xóa các mã đó hoặc đặt hướng cho 'PORTRAIT', nó vẫn không hoạt động. Tôi vẫn đang đào sâu vào các khung để tìm lý do tại sao nó hoạt động GB 2.x nhưng không ở ICS 4.x –

1

Vấn đề không phải là ở Launcher. Vấn đề là một cấu hình duy nhất (và bao gồm cả định hướng) được chia sẻ giữa tất cả các hoạt động trên điện thoại.

Vì vậy, nếu bạn có hoạt động đặt hướng đến Vùng đất, ví dụ: Camera (đây là ví dụ điển hình khi tôi làm việc), điều này sẽ "làm cho" tất cả các hoạt động khác cũng đang ở trên cảnh quan, bởi vì như tôi đã nói thông tin đó là duy nhất trong hệ thống và được chia sẻ trong tất cả.

Điều này xảy ra kể từ khi bắt đầu Android mặc dù đôi khi bạn sẽ không nhận thấy rằng bởi vì những thay đổi này khá nhanh.

Để kiểm tra những gì tôi đang nói, hãy làm theo. Viết hoạt động với chủ đề của hộp thoại như @android:style/Theme.Holo.Dialog, vì vậy nó sẽ không bao gồm toàn bộ màn hình và bạn vẫn có thể xem hoạt động dưới đây. Hoạt động đó phải có định hướng cố định. Giả sử bạn đặt nó ở chế độ ngang. Sau đó, use am start on Android shell để có thể bắt đầu hoạt động bạn vừa tạo trên đầu bất kỳ hoạt động nào khác. Bạn sẽ thấy rằng bất kể định hướng mà hoạt động trước đó có, ngay sau khi bạn khởi chạy bạn kiểm tra hoạt động, hoạt động trước đó sẽ giả định cùng một hướng so với hoạt động thử nghiệm của bạn. Khi bạn nhấn lại, hoạt động trước đó sẽ khôi phục lại hướng. Nhưng đôi khi nó có thể mất một lúc, vì vậy bạn thấy những thứ như kết quả hiện tại của bạn.

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