如何正确地使片段旋转

时间:2014-05-05 13:02:49

标签: android layout android-fragments

我正在尝试为应用程序创建一个片段,该片段将在显示之前旋转(以避免更改为横向和纵向,因为我希望避免再次创建活动)。

当显示第一个片段(列表)时,用户选择一个选项,然后第二个片段显示为像是纵向。    为此,我在第二个片段的xml文件中添加了:

android:rotation="90"

然而,这似乎无法正常工作,看起来屏幕是以纵向模式绘制的,然后旋转了90度然后显示,这会产生右侧和左侧有大空白的效果,以及片段的标题未正确显示。

有人可以通过帮助我解决显示问题或向我展示替代方案来帮助我吗?

3 个答案:

答案 0 :(得分:2)

我终于找到了答案 Change Screen Orientation programmatically using a Button

但由于它是一个片段,我希望不旋转整个屏幕,代码是这样的:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (mView != null) return mView; //I use this because I use the same fragment , if you use different fragments remove this
    mView = (LinearLayout) inflater.inflate(R.layout.fragment_customer_card_view, container, false);
    int w = container.getWidth();
    int h = container.getHeight();
    mView.setRotation(90);
    mView.setTranslationX((w - h) / 2);
    mView.setTranslationY((h - w) / 2);
    ViewGroup.LayoutParams lp = mView.getLayoutParams();
    lp.height = w;
    lp.width = h;
    mView.requestLayout();
    return mView;
}

希望它能在将来帮助某人

答案 1 :(得分:-1)

在你想要定位的片段中使用它。

getActivity().setRequestedOrientation(
            ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

如果你想要很多片段和只有一个片段,那么其他片段应该是基于用户的兼容性,那么请确保在片段中给出上面你想要纵向的片段以及其他片段使用

getActivity().setRequestedOrientation(
                ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

答案 2 :(得分:-1)

设置orientation="horizontal"不能解决问题吗?

更一般地说,重新创建活动对你来说不是一件大事。您应该能够保留所有更改,然后将它们从传递给onCreate的Bundle中删除。如果这是一个大问题,我会重新考虑您在应用中进行的一些设计选择。