【问题标题】:Activity on portrait and DialogFragment on landscape纵向活动和横向 DialogFragment
【发布时间】:2015-05-05 02:44:26
【问题描述】:

我正在尝试在横向上呈现 DialogFragment,但我的基本 Activity 被锁定为纵向 (android:screenOrientation="portrait")。我通过在创建过程中进行对话来实现对话旋转。但是,当它显示时,容器似乎是旧格式(旋转前的宽度和高度)并且旋转的对话框不适合其中。此外,容器会剪切对话框的内容。

public class MenuFragment extends DialogFragment {

  private final int mOrientation;

  public PlantsMenuFragment(int orientation) {
    mOrientation = orientation;
  }


  public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View mRootView = inflater.inflate(R.layout.fragment_plants_menu,
            container, false);

    if (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE == mOrientation) {
        mRootView.setRotation(90);
    }

    return mRootView;
  }
}

我已经尝试在布局xml中设置它,但结果是一样的。 我如何解决它?或者有更好的方法以不同的活动方向呈现对话? 提前谢谢你,

【问题讨论】:

    标签: android orientation dialogfragment


    【解决方案1】:

    在每个片段中覆盖 setUserVisibleHint()。

    在肖像中只有碎片:

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser) {
            Activity a = getActivity();
            if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    }
    

    在纵向/横向片段中:

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser) {
            Activity a = getActivity();
            if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
        }
    }
    

    这将允许整个活动在一个片段中旋转,但在其他片段中将其固定为纵向。

    【讨论】:

    • 谢谢谢克!我尝试了你的方法,但它不适用于我正在做的事情。因为整个活动都在旋转,所以我需要它保持稳定并且对话框旋转。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2015-09-09
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    相关资源
    最近更新 更多