我可以建議你去下面的解決方案,
步驟1,創建兩種不同的佈局(layout
& layout_land
)並定義設計
St EP 2.使用擴展FrameLayout()
第3步:您的自定義視圖取代常規的FrameLayout自定義視圖,MyNonChangingLayout()的
<MyNonChangingLayout
android:id="@+id/unity_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</MyNonChangingLayout>
例,
MyNonChangingLayout extends FrameLayout {
MyNonchangingLayout(Context content) {
super(context);
myContext = context;
makeFromXML();
}
private void makeFromXML() {
LayoutInflater inflater = (LayoutInflater)myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
topView = inflater.inflate(MyR.layout.my_non_changing_layout, this, false);
super.addView(topView);
}
/*
* Then, you can override quite a lot of the layout's calls and
* enforce behaviour on the children. Two examples:
*/
// To specifically catch orientation changes
@Overridge
onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// You could create the layout here by removing all views and rebuilding them
// Perhaps by having a two xml layouts, one of which is "90 degrees out" ...
// If you do make the layot here, make sure you don't clash with the constructor code!
switch (newConfig.orientation) {
case ORIENTATION_LANDSCAPE:
// Make the layout for this orientation (as per above)
break;
case ORIENTATION_PORTRAIT:
// Make the layout for this orientation (as per above)
break;
case ORIENTATION_SQUARE:
// Make the layout for this orientation (as per above)
break;
}
}
//to handle size changes to enforce aspect ratios on children:
@override
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int viewWidth = //something I've determine
int viewHeight = //something I've determined
setViewsize(viewToHaveSizedControlled, viewWidth, viewheight);
}
// The post thing means that it doesn't crash no matter which thread it is
// executed on ...
private void setViewsize(final View v, final int w, final int h) {
post(new Runnable() {
public void run() {
ViewGroup.LayoutParams lp = v.getLayoutParams();
lp.width = w;
lp.height = h;
v.setLayoutParams(lp);
}});
}
這個答案本來這裏給出,
How to prevent orientation change for just a layout, not the whole screen/activity
是y你試圖阻止整個屏幕旋轉? http://stackoverflow.com/questions/2730855/prevent-screen-rotation-android – JDenais
圖像鏈接不可訪問。 – Gagan