Добавлено дополнительное пространство при изменении ориентации экрана - PullRequest
0 голосов
/ 12 июня 2018

Мое приложение добавляет фрагменты со значениями к основному действию во время выполнения, но мне нужно иметь возможность изменять ориентацию экрана без потери этих значений.Основной проблемой является добавление android:configChanges="orientation|screenSize" к работам манифеста, но в верхнюю часть приложения добавляется большой объем дополнительного пространства, поэтому при любом изменении ориентации после первого изменения примерно четверть экрана является недоступным пробелом..

activity_main.xml

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:fitsSystemWindows="true"
        android:theme="@style/MyAppTheme">

    </android.support.design.widget.AppBarLayout>


    <include layout="@layout/content_main" />

</android.support.design.widget.CoordinatorLayout>

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="25dp"
    android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="60dp"
        android:layout_marginTop="8dp">

        <TextView
            android:id="@+id/manu_label"
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:text="Manufacturer:"
            android:textSize="12sp"
            android:gravity="center"
            android:layout_marginBottom="4dp"
            android:layout_marginLeft="8dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"/>

        <Spinner
            android:id="@+id/manu_spinner"
            android:theme="@style/SpinnerStyle"
            android:layout_width="80dp"
            android:layout_height="20dp"
            android:dropDownWidth="150dp"
            android:layout_marginLeft="8dp"
            android:background="@drawable/cell_background"
            android:layout_toRightOf="@id/manu_label"
            android:layout_alignParentTop="true">

        </Spinner>

        <LinearLayout
            android:id="@+id/panels_container"
            android:orientation="vertical"
            android:layout_below="@id/manu_spinner"
            android:layout_alignParentLeft="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </LinearLayout>
</RelativeLayout>

</android.support.v4.widget.NestedScrollView>

Мой Java-код не управляет видом, кроме добавления фрагментов в линейный макет:

private View.OnClickListener cableListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentTransaction ft = manager.beginTransaction();
            PanelsFragment frag = PanelsFragment.newInstance();
            cables.add(frag);
            ft.add(R.id.panels_container, frag, Integer.toString(trans.indexOf(frag)));
            ft.commit();
        }
    };

Есть ли способ предотвратить дополнительное пространство между моей панелью приложений и просмотром прокрутки, или мне нужна другая стратегия?Я попытался переопределить onSaveInstanceState и onRestoreInstanceState, но мои методы предположительно требовали более высокого API, чем мой минимум 14. Любые предложения будут оценены.

РЕДАКТИРОВАТЬ: из-за характера проекта, я не могу предоставить изображениевопроса.Когда приложение запускается впервые, между меткой и спиннером с идентификаторами «manu» и панелью приложения почти нет места.Тем не менее, когда экран переходит от портрета к ландшафту, между панелью приложения и надписью и счетчиком остается не менее 60dp недоступного пространства.Я отметил, что для представления содержимого необходимо 25dp верхнего поля, в противном случае его содержимое начинается за панелью приложения.

1 Ответ

0 голосов
/ 12 июня 2018

Моя проблема была неожиданно решена путем указания высоты, ширины и полей для представления содержимого в файле activity_main.xml:

<include
    layout="@layout/content_main"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_marginTop="0dp" />
...