11

NSV が下にスクロールしたときにツールバーを圧縮できるように、CL で NSV を使用しています。私が抱えている問題は、ロード時に NSV が一番上にスクロールされず、代わりに NSV の一番上からかなりのマージンでオフセットされていることです (この間隔がどこから来ているのかわかりません。レイアウト)。

スクリーン キャプチャを見てください。最初の 1 つは NSV がどのように読み込まれるかを示しており、2 番目を比較すると (NSV を手動で一番上までスクロールすると)、NSV が上からかなり下にスクロールしたことがはっきりとわかります。

NSV が読み込まれると、一番上に表示されない 比較のためにNSVを手動で一番上までスクロール

このレイアウトにいくつかの更新を行ったところ、これが発生しました。以前は、問題なく上部にロードされていました。ただし、これを引き起こすはずのスペースを追加しませんでした。

これが私がこれに使用しているレイアウトです:

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/cl_goal_detail"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/abl_goal_detail"
        android:layout_width="match_parent"
        android:layout_height="144dp"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_goal_detail"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/content_space_double"
            app:collapsedTitleTextAppearance="@style/title.dark"
            app:expandedTitleTextAppearance="@style/display3.plus.dark"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_goal_detail"
                style="@style/toolbar"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nsv_goal_detail"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/content_space_half"
        android:paddingLeft="@dimen/content_space_half"
        android:paddingRight="@dimen/content_space_half"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <FrameLayout
            android:id="@+id/container_goal_detail"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="fill_vertical"/>
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

どんなアイデアでも大歓迎です!

4

4 に答える 4

7

わかった!レイアウトとフラグメントのすべてのコンポーネントを 1 日かけてしっかりとデバッグした後、バグと思われるものを特定しました。

まず、問題: NSV の子ビューに、実行時に可視性を View.GONE に変更する要素が含まれていると、リストが下にスクロールされることが判明しました。可視性が切り替えられた要素のすぐ上までリストがスクロールすることに気付きました (ビューに設定されたマージンを含む)。

次に、修正: すべてのビューに android:visibility="gone" を xml レイアウトで設定することでこの問題を修正し、必要に応じて各ビューの可視性を切り替えました。以前は、デフォルトでビューが表示され、そこから作業していました。ロジックを変更して、すべてがなくなった状態で開始する必要がありましたが、それほど難しくはありません。

実行時に非表示にするビューは、onCreateView() で NSV が作成されるときに全体の高さの計算の一部を形成しないため、これが機能すると思います。フラグメントが onCreateView() を過ぎて進行したら、ビューを動的に変更しても安全ですが、ビューが onCreateView() の高さの一部として計算され、View.GONE で非表示になっている場合、測定値が不安定になり、リストになってしまいます大幅に下にスクロールしました。

于 2015-07-06T19:24:44.547 に答える
4

あなたの場合、ビューグループ、つまりFrameLayoutに以下の行を追加しようとしましたか

android:descendantFocusability="blocksDescendants"

これもあなたのために働くと思います。

そうでない場合は、NSV に追加してみてください。

于 2015-08-14T07:12:48.217 に答える
0

あなたの投稿の回答は、私の問題を見つけるのに大いに役立ちました(ところで、それは同じでした). しかし、私はそれを別の方法で機能させました。を使用していると思いますRecyclerView。私の場合、 3 を使用していRecyclerViewsます。さて、あなたの答えから、リサイクル業者を隠し始めましたが、そのうちの1つだけがこの問題を引き起こしていることがわかりました. 私がしたことは、postDelayed を入力したことです。

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                recyler.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
                recyler.setAdapter(new MyAdapter(myList));
            }
        }, 3000);

それはうまくいきました!

于 2016-03-09T17:14:39.183 に答える