2012-02-13 14 views
6

Tôi có một tình huống, trong đó, nếu thiết bị Android là máy tính bảng, thì tôi muốn định hướng được bật (dọc và ngang), trong khi thiết bị là điện thoại, tôi muốn hướng ở chế độ Chân dung. Bạn có thể giúp tôi cách thực hiện việc này không?Làm cách nào để đặt hướng của hoạt động trong Android, dựa trên thiết bị?

Cảm ơn, Nithin

+0

+ 1 để có khái niệm đẹp. – Praveenkumar

+0

kiểm tra http://stackoverflow.com/questions/4616176/android-orientation-change –

+0

và http: //www.workingfromhere.com/blog/2009/03/30/orientation-sensor-tips-in-android/ –

Trả lời

0

Bạn có thể sử dụng this lớp để có được những thông tin thiết bị về xây dựng hiện hành, chiết xuất từ ​​thuộc tính hệ thống.

Để thiết lập các thuộc tính thuộc tính định hướng, sử dụng sau đây ...

android:screenOrientation=["unspecified" | "user" | "behind" | 
            "landscape" | "portrait" | 
            "reverseLandscape" | "reversePortrait" | 
            "sensorLandscape" | "sensorPortrait" | 
            "sensor" | "fullSensor" | "nosensor"] 
+0

Không hoạt động. Điều này là hardcoding nó trong biểu hiện! Vì vậy, nó giống nhau cho máy tính bảng và điện thoại. – nithinreddy

+0

Bạn không thể đặt hướng động trước khi bạn thực sự chạy chương trình. Sử dụng mặc định, để cho phép nó thay đổi dựa trên tùy chọn thiết bị và cách người dùng xoay màn hình. Hoặc "nosensor" cho hướng ưa thích của thiết bị. –

0

có được chiều rộng và chiều cao của màn hình điện thoại, nếu độ phân giải thấp hơn so với máy tính bảng, sau đó bạn có thể thiết lập các định hướng của ứng dụng theo chiều dọc.

Nếu cần các kích thước màn hình bằng pixel hoạt động, bạn có thể sử dụng getSize:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

Nếu không phải là một Hoạt động bạn có thể nhận được hiển thị mặc định thông qua WINDOW_SERVICE:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 

if(width<= (resolution width of tablet) && height<=(resolution height of tablet)) 
{ 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

Dont đưa ra bất cứ lệnh trong tệp kê khai dựa trên

android: screenOrientation

+0

Tại sao lại là downvote? Câu trả lời này là không thể? –

+0

tôi nghĩ rằng công trình này .. tôi sẽ cho nó một shot..thanks! – nithinreddy

0

Tôi chỉ là một người mới bắt đầu với điều này, nhưng có lẽ nó có thể thực hiện điều này bằng cách nhắm mục tiêu một cấp API cụ thể hoặc dpi? Bạn có thể cung cấp tài nguyên thay thế cho các thiết bị khác nhau mà bạn đang nhắm mục tiêu.

Ví dụ:

res/layout/main.xml 
res/layout-xhdpi/main.xml 
res/layout-v11/main.xml 

Một tài liệu tốt cho điều đó có thể được tìm thấy here.

1

Bạn có 2 phương pháp:

a) Tạo bộ khác nhau của bố trí và drawables cho điện thoại và máy tính bảng riêng biệt và thiết kế chúng theo định hướng mà bạn cần.

b) Kiểm tra thiết bị hoạt động trong khi chạy và đặt hướng. Để kiểm tra các thiết bị, cung cấp cho một tấm séc trên các thông số sau đây và thiết lập các định hướng programatically,

(1) Build.VERSION.SDK_INT 
    (2) Configuration.SCREENLAYOUT_SIZE_MASK 
1

thử này Nó hoạt động một cách hoàn hảo đối với tôi .....

if (isXLargeScreen()) 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

và chức năng này để quyết định giữa máy tính bảng và điện thoại, Được gọi trong IF ở trên .....

public static boolean isXLargeScreen(Context context) { 
return (context.getResources().getConfiguration().screenLayout 
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; 
} 
Các vấn đề liên quan