(Lưu ý rằng tôi đã thêm một câu trả lời tốt hơn tiếp tục xuống, qua đường. Tôi đi đây một đầu này ở trong trường hợp nhu cầu tốt hơn phù hợp của người khác.)
Yeah, tôi đã được giao dịch với cùng một vấn đề. Tôi có một giải pháp hơi phức tạp. Tôi nhận thấy rằng bạn có thể xoay khá nhiều bất kỳ Chế độ xem nào với setRotate. Thật không may, điều này chỉ quay hình ảnh của nó, hoặc một cái gì đó, và không hoàn toàn đối phó với các vấn đề hoặc vị trí hoặc kích thước hoặc sự liên kết. Mặc dù vậy, tôi đã xoay xở để gom lại một thứ gì đó mà bù đắp cho nó, mặc dù nó chỉ được thực hiện một nửa (không hoàn toàn hoạt động đúng nếu bạn xoay sang hướng dọc). Sau đây được gọi là bất cứ khi nào máy tính bảng được xoay hoặc bố cục được sắp xếp lại hoặc bất kỳ thứ gì.
private LinearLayout llMain;
private LinearLayout ll1;
private LinearLayout mainView;
private TabHost myTabHost;
public void setStuff() {
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if (display.getOrientation() == 0 || display.getOrientation() == 2) {
ViewGroup.LayoutParams lp = myTabHost.getLayoutParams();
int top = 0;
int left = 0;
int height = 696;
int width = 1280;
int centerx = (width/2) + left;
int centery = (height/2) + top;
lp.height = width;
lp.width = height;
myTabHost.setLayoutParams(lp);
myTabHost.setTranslationX(centerx - (height/2));
myTabHost.setTranslationY(centery - (width/2));
lp = mainView.getLayoutParams();
lp.width = 1280;
lp.height = 696;
mainView.setLayoutParams(lp);
lp = llMain.getLayoutParams();
lp.width = 1280;
lp.height = 696;
llMain.setLayoutParams(lp);
ll1.setRotation(-90);
lp = ll1.getLayoutParams();
lp.height = 696;
lp.width = 1141;
ll1.setLayoutParams(lp);
left = 0;
top = 0;
height = 696;
width = 1141;
centerx = (width/2) + left;
centery = (height/2) + top;
ll1.setTranslationX(centery - (width/2));
ll1.setTranslationY(centerx - (height/2));
//ll1.setTranslationX(tx);
//ll1.setTranslationY(ty);
} else {
ViewGroup.LayoutParams lp = myTabHost.getLayoutParams();
int top = 0;
int left = 0;
int height = 1280;
int width = 696;
int centerx = (width/2) + left;
int centery = (height/2) + top;
lp.height = width;
lp.width = height;
myTabHost.setLayoutParams(lp);
myTabHost.setTranslationX(centerx - (height/2));
myTabHost.setTranslationY(centery - (width/2));
lp = mainView.getLayoutParams();
lp.width = 696;
lp.height = 1280;
mainView.setLayoutParams(lp);
lp = llMain.getLayoutParams();
lp.width = 696;
lp.height = 1280;
llMain.setLayoutParams(lp);
ll1.setRotation(-90);
lp = ll1.getLayoutParams();
lp.height = 1141;
lp.width = 696;
ll1.setLayoutParams(lp);
left = 0;
top = 0;
height = 1141;
width = 696;
centerx = (width/2) + left;
centery = (height/2) + top;
ll1.setTranslationX(centery - (width/1));
ll1.setTranslationY(centerx - (height/1));
//ll1.setTranslationX(tx);
//ll1.setTranslationY(ty);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setStuff();
//setContentView(R.layout.main);
}
llMain chứa mainView chứa myTabHost chứa ll1; bạn sẽ cần phải gán chúng như vậy trong mã khởi tạo. Ý tưởng là các TabHost được xoay theo chiều kim đồng hồ, và kích thước của nó phải được đổi bằng tay để container của nó biết rằng đó là một kích thước khác nhau/hình dạng, bây giờ, nếu không các cạnh được cắt bỏ. Ngoài ra, một số tính toán được thực hiện để nó được xoay quanh điểm đúng, hoặc ít nhất là kết thúc ở đúng nơi. Kết quả không phải lúc nào cũng hợp lý, vì vậy tôi chỉ thay đổi nội dung cho đến khi nó hoạt động, ít nhất là ở chế độ ngang. Nội dung của TabHost cũng được xoay, do đó, có mã trong đó quay nó trở lại, ít nhất là tab đầu tiên, đó là ll1. Các tab khác sẽ cần phải được quay lại tương tự. Tôi rối tung với điều này một lúc, và có thể có một số thứ không cần thiết. Ví dụ, mainView. Tôi nghĩ rằng không cần phải ở đó. Oh, và nếu các TabHost là ở một nơi khác, các con số sẽ cần phải được điều chỉnh bằng cách nào đó. Chúc may mắn với điều đó. Dù sao, tôi hy vọng điều này sẽ giúp ai đó. Người đàn ông, Android GUI rất trầm trọng ... Tôi ước họ sẽ sửa nó ....Tuy nhiên, tôi sẽ thừa nhận rằng mặc dù tất cả các chướng ngại vật và thất vọng, sự xoay vòng của bất kỳ thành phần nào là khá thú vị. Tôi chỉ muốn mọi thứ khác hoạt động như bạn mong đợi.
Xin chào, tôi đã tìm ra cách làm cho nó hoạt động đúng cách! Các nhãn nằm ngang, do đó, có thể hoặc không phải là một điều tốt, tùy thuộc vào những gì bạn muốn, nhưng anyway:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">
<FrameLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_weight="1" android:id="@android:id/tabcontent"></FrameLayout>
<ScrollView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none">
<TabWidget android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:id="@android:id/tabs"></TabWidget>
</ScrollView>
</LinearLayout>
</TabHost>
</LinearLayout>
Tệp XML này xác định một tabhost trống với các tab ở bên phải. Chỉ cần thêm các tab trong mã của bạn; có những bài viết xung quanh cho điều đó. Sao chép/thay đổi/làm bất cứ điều gì bạn cần làm để làm cho nó phù hợp với nhu cầu của bạn. Ngoài ra, vì nó thật tuyệt, tôi đã thêm một chế độ xem cuộn xung quanh tabwidget, vì vậy nó sẽ tự động cho phép cuộn nếu bạn có quá nhiều tab. Loại bỏ nó nếu bạn không muốn nó. Có điều cuộn chủ yếu là từ http://java.dzone.com/articles/scrolling-tabs-android. Yay!
Thật đáng tiếc khi TabActivty không thể xử lý các tab ở phía dưới hoặc bên cạnh chính nó. Tôi không thấy lý do tại sao điều này không được tích hợp. Tôi đã đặt một báo cáo lỗi trên trình theo dõi lỗi của android, nhưng thực sự không có dấu hiệu nào cho biết điều này sẽ sớm hoạt động. http://code.google.com/p/android/issues/detail?id=3862&can=1&q=TabWidget&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars#makechanges –