Настроить элементы внутри вида переработчика + изменения ориентации - PullRequest
0 голосов
/ 26 октября 2018

У меня есть эта проблема - я думаю, что кто-то наверняка может осветить, что, черт возьми, здесь происходит не так ...

Мой общий поток выглядит так - Activity (@ + id / activity) показывает фрагмент(@ + id / image_container) снизу экрана при нажатии кнопки (клавиатура закрывается, если присутствует, и фрагмент показан скользящим вверх снизу), этот фрагмент показывает видовой пейджер с индикатором страницы в линейном макете, видовой пейджер показывает другой фрагмент, который содержит вид рециркулятора сгоризонтальный gridlayoutmanager.Это представление переработчика содержит различные изображения, и мне нужно расположить их, сохраняя фиксированными строки, скажем, 3, но столбцы могут быть переменными в зависимости от ширины экрана и плотности.Imageview имеет фиксированную высоту и ширину.

Это макет моей активности

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/activity">
    <include
        layout="@layout/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentTop="true" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="4dp"
        android:id="@+id/divider"
        android:layout_below="@+id/toolbar"/>

    <include
        layout="@layout/edit_bar"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_below="@+id/divider"/>

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/edit_bar" />

    <FrameLayout
        android:id="@+id/image_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/container"
        android:layout_alignParentBottom="true"/>

</RelativeLayout>

// Фрагмент внутри image_container

<?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="wrap_content"
    android:orientation="vertical"
    android:weightSum="1">

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginBottom="12dp"
        android:layout_weight=".9"/>

    <LinearLayout
        android:id="@+id/sliderDots"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="horizontal"
        android:layout_weight=".1"/>

//Fragment inside viewpager

<?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="wrap_content">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="26dp"
        android:paddingRight="26dp">
    </android.support.v7.widget.RecyclerView>

</LinearLayout>

// Элемент внутри представления переработчика

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/imageView"
        android:layout_width="48dp"
        android:layout_height="48dp"
        tools:visibility="visible"
        android:layout_margin="6dp"/>

// Код фрагмента, который добавляется в image_container при нажатии кнопки

FragmentManager fm = activity.getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.view_transition_up_from_bottom, R.anim.view_transition_down_to_bottom);
        fragmentTransaction.add(R.id.image_container, new ImageFragment(activity.getApplicationContext())).commit();

Внутри этогоImageFragment Я вычисляю строки (это исправлено, скажем, 3) и столбцы (Math.round ((dpWidth - 52) / 60)) - 52 (26 * 2 - для обеих сторон представления переработчика, 60 - пространство заняло мой 1 элементвключая ширину и поля (L + R)), поэтому я знаю изображения, которые будут отображаться на каждой странице, и передаю их в ImageViewFragment, содержащий представление рециркулятора, которое используется адаптером.Я использую recyclerView.setLayoutManager(new CustomGridLayoutManager(getActivity(), 3, CustomGridLayoutManager.HORIZONTAL, false));, чтобы сделать мой вид переработчика и, следовательно, я использую фиксированные строки.

Так что мой вопрос -
1. Я написал код, чтобы мои строки фиксировались и вычислялись столбцы на основе ширины экрана, но иногда я вижу слишком большое расстояние от правой стороны окна рециркулятора до края экрана.держал это исправленным с 26 dp, но это показывает больше того.Как я могу реализовать этот тип функциональности, когда я вижу равномерный интервал в виде сетки ??
2. Как обрабатывать изменение ориентации, когда фрагмент сетки открыт, моя деятельность не перерисовывается.как я вижу, я могу только переопределить onConfigurationChanged.

...