android - 如何在运行时将 fragment 的屏幕方向锁定为横向

标签 android fragment android-orientation

我有一个 Activity ,其 ist fragment 设置为正常纵向方向,但在加载第二个 fragment 时,我需要将第二个 fragment 的方向锁定为横向。有可能吗?

这是我的java fragment 类

public class DeputationsFragment extends Fragment implements AdapterView.OnItemSelectedListener{
    LinearLayout ll;
    RecyclerView recyclerView;
    SessionManager sessionManager;
    CheckBox checkBox;
    Spinner reportType;
    String[] reportTypes,reportCodes;
    String reportCode;




    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        return inflater.inflate(R.layout.fragment_deputations, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        sessionManager=SessionManager.NewInstance(getActivity());
        ll=(LinearLayout)view.findViewById(R.id.ll1);
        recyclerView=(RecyclerView)view.findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        checkBox=(CheckBox)view.findViewById(R.id.sno);
        reportType=(Spinner)view.findViewById(R.id.spin_report);
        reportType.setOnItemSelectedListener(this);
        if(Constants.isOnline())
        {
            getTypes();
        }

    }

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        reportCode=reportCodes[i];
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }


    private void getTypes()
    {
        AsyncHttpClient client=new AsyncHttpClient();
        String url=getResources().getString(R.string.urlReportType);
        Constants.showProgress(getActivity());
        client.get(url, new TextHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
                Constants.dismissProgress();
                try {
                    int p1 = responseString.indexOf(">"); Constants.dismissProgress();
                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                    int p2 = responseString.lastIndexOf("<");
                    String r = responseString.substring(p1 + 1, p2);
                    p1 = r.indexOf(">");
                    r = r.substring(p1 + 1, r.length());
                    JSONArray jsonArray = new JSONArray(r);
                    reportTypes = new String[jsonArray.length()];
                    reportCodes = new String[jsonArray.length()];
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        reportTypes[i] = (jsonObject.getString("Name"));
                        reportCodes[i] = (jsonObject.getString("Value"));
                    }
                    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, reportTypes);
                    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    reportType.setAdapter(arrayAdapter);
                    reportType.setSelection(0);
                    reportCode = reportCodes[0];
                    getDeputations();

                } catch (Exception e) {
                    Constants.dismissProgress();
                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                }
            }
        });
        }

    void getDeputations()
    {
        Constants.showProgress(getActivity());
        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        String url=getResources().getString(R.string.urlDeputationRequest);
        params.put("DistrictCode","ydRRTTxkdt6Trx91pX1+cA==");
        params.put("ReportType","1");
        client.get(url, params, new TextHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
                try {
                    Constants.dismissProgress();
                    int p1 = responseString.indexOf(">");
                    int p2 = responseString.lastIndexOf("<");
                    String r = responseString.substring(p1 + 1, p2);
                    p1 = r.indexOf(">");
                    r = r.substring(p1 + 1, r.length());
                    JSONArray jsonArray = new JSONArray(r);
                    RecyclerDeputations recyclerDeputations=new RecyclerDeputations(jsonArray,getActivity());
                    ll.setVisibility(View.VISIBLE);
                    recyclerView.setAdapter(recyclerDeputations);
                    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

                }
                catch (Exception e)
                {

                }
            }
        });
    }


}

这是布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/ll"
        android:background="@color/colorAccent"
        android:layout_marginTop="10dp"
        android:weightSum="4">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_weight="1.7"
            android:gravity="right"
            android:padding="3dp"

            android:text="Report Type"
            android:textStyle="bold" />

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_weight="2.3"
            android:gravity="left"
            android:padding="3dp"
            android:background="@color/white"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp">
            <Spinner
                android:id="@+id/spin_report"
                android:layout_width="match_parent"
                android:popupBackground="@color/white"
                android:gravity="left"
                android:layout_height="match_parent"
                android:textSize="8sp"
                android:scrollbars="horizontal"/>
        </RelativeLayout>
    </LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="8.5"
    android:background="#386FA5"
    android:id="@+id/ll1"
    android:orientation="horizontal">


    <CheckBox
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1.3"
        android:gravity="center_vertical"
        android:layout_gravity="start"
        android:text="All"
        android:background="@drawable/borders"
        android:id="@+id/sno"/>

    <TextView
        android:layout_width="0dp"
        android:text="S.No."
        android:gravity="start"
        android:layout_gravity="start"
        android:background="@drawable/borders"
        android:id="@+id/serial"
        android:textSize="12sp"
        android:padding="3dp"
      android:layout_height="match_parent"
        android:layout_weight=".5" />
    <TextView

        android:layout_width="0dp"
        android:text="Name"
        android:id="@+id/name"
        android:gravity="start"
        android:layout_gravity="start"
        android:textSize="12sp"
        android:background="@drawable/borders"
        android:padding="3dp"
      android:layout_height="match_parent"
        android:layout_weight="1" />
    <TextView

        android:layout_width="0dp"
        android:id="@+id/from"
        android:gravity="start"
        android:textSize="12sp"
        android:layout_gravity="start"

        android:text="From"
        android:background="@drawable/borders"
        android:padding="3dp"
      android:layout_height="match_parent"
        android:layout_weight="1.4" />
    <TextView

        android:layout_width="0dp"
        android:id="@+id/to"
        android:text="To"
        android:gravity="start"
        android:textSize="12sp"
        android:layout_gravity="start"
        android:background="@drawable/borders"
        android:padding="3dp"
      android:layout_height="match_parent"
        android:layout_weight="1.3" />

    <TextView

        android:layout_width="0dp"
        android:id="@+id/req_date"
        android:text="Request Date"
        android:gravity="start"
        android:textSize="12sp"
        android:layout_gravity="start"
        android:background="@drawable/borders"
        android:padding="3dp"
      android:layout_height="match_parent"
        android:layout_weight="1" />

    <TextView

        android:layout_width="0dp"
        android:id="@+id/pending"
        android:text="Pending With"
        android:gravity="start"
        android:textSize="12sp"
        android:layout_gravity="start"
        android:background="@drawable/borders"
        android:padding="3dp"
      android:layout_height="match_parent"
        android:layout_weight="1" />
    <TextView

        android:layout_width="0dp"
        android:id="@+id/remarks"
        android:text="Remarks"
        android:gravity="start"
        android:textSize="12sp"
        android:layout_gravity="start"
        android:background="@drawable/borders"
        android:padding="3dp"
      android:layout_height="match_parent"
        android:layout_weight="1" />
</LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"/>
</LinearLayout>

最佳答案

我自己实现了相同的功能。我的应用程序被锁定为除一个 fragment 之外的所有 fragment 的纵向模式。为了实现正确的功能,我将 android:screenOrientation="nosensor" 用于 Activity (在 Manifest 文件中)以防止由于用户旋转设备而导致方向改变。

我还使用 android:configChanges="keyboardHidden|orientation|screenSize" 来防止 Activity 在方向改变时重新启动。否则,很容易进入一个循环,在该循环中, Activity 重新启动,进入正确的 fragment 并再次改变方向,重复。

在 Fragment 的 onResume() 方法中,我调用了 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 并在其中调用了 onPause()我调用 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

希望对你有帮助!

关于android - 如何在运行时将 fragment 的屏幕方向锁定为横向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697375/

相关文章:

android - 如何在 Android 中存储和检索首选项?

android - 视差背景和引擎

java - 我不明白如何使用带有选项卡的操作栏 sherlock

android - 检测方向变化,当 Android 只允许纵向时

android - 如何在 camera2 Android api 中创建一个 BottomBar 作为 StickyBottomCaptureLayout?

android - 如何在android中围绕其中心旋转按钮

java - 尝试在空对象引用上调用虚拟方法 'void android.widget.EditText.setText(java.lang.CharSequence)'

android - 构建版本更改后无法获取构建

安卓 MVP : defining Presenter in Fragments

android - Glide 库在 AsyncTask.doInBackground 中停止