3

アプリのスクリーンショット 1スクリーンショット 2

問題は基本的に次のとおりです。ViewPager に layout_behaviour を設定しているにもかかわらず、PagerTitleStrip と RecyclerView がツールバーの下に表示されます。

もっと詳しく:

以下のレイアウトを使用するメイン アクティビティがあり、そこからフラグメントを起動します。CoordinatorLayout + ViewPager と他のすべての凝ったものを試す前に、フラグメントを表示する FrameLayout を用意しました。しかし、私は私が使いたいと決めました

app:layout_scrollFlags="scroll|enterAlways"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

リサイクルビューをスクロールするとツールバーが消えるようにします。FrameLayout には、ツールバーの下にある recyclerView の位置を修正できる動作がないことがオンラインでわかったので、フラグメントを管理するために ViewPager + CoordinatorLayout に変更しました。

ただし、これによりいくつかの問題が発生しました。私が達成したいのは - PagerTitleStrip が添付されたツールバーです。スクロールするとツールバーが消え、理想的には PagerTitleStrip が表示されたままになります。しかし、Navigation Drawer を引き続き機能させたいのですが、機能しません。まるで存在しない。

さて、この最初のレイアウトでは実際に上記のすべての機能が動作していますが、問題はストリップがツールバーの下にあり、スクロール時にツールバーが非表示にならないと表示されないことです。引き出しが動作します。残念ながら、リサイクラーのビュー項目はツールバーの下に部分的に隠されています - 私が設定したにもかかわらず、画面の正しい位置からスクロールを開始しません - appbar_scrolling_view_behavior

メインアクティビティが膨張するための m_drawerlayout.xml のレイアウト:

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

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="6dp"
            android:paddingBottom="6dp"
            android:layout_gravity="top"
            android:textSize="15sp"
            android:textColor="@color/tealfifty"
            android:background="@color/teal">

        </android.support.v4.view.PagerTitleStrip>
    </android.support.v4.view.ViewPager>
    <ListView
        android:id="@+id/drawer_list"
        android:background="@color/tealDark"
        android:cacheColorHint="@android:color/transparent"
        android:choiceMode="singleChoice"
        android:divider="@drawable/list_divider"
        android:dividerHeight="1dp"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <include layout="@layout/app_bar"/>

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

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

そして、これは私の app_bar.xml のコードです

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/top_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/teal"
app:theme="@style/ToolbarTheme"
app:popupTheme="@style/Green.Overlay.LightPopup"
app:layout_scrollFlags="scroll|enterAlways" >

<Spinner android:id="@+id/spinner"
    android:layout_gravity="right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="true"
    android:paddingRight="20dp"
    />
</android.support.v7.widget.Toolbar>

要素を他のコンポーネントの内外に移動しようとしましたが、成功しませんでした。たとえば、ツールバーに添付された PagerTitleStrip を作成し、AppBar レイアウト内に PagerTitleStrip をネストする必要がある 1 つの動作を共有することは論理的に思えますが、PagerTitleStrip は ViewPager の直接の子でなければなりません...このすべて?私はこれらすべてのデザイン機能に不慣れで、成功せずに多くの調査を行いました。ここには同様のトピックがありますが、必要なものはまったくありません。他の基本的なトピックと比較して、私が上でやろうとしていることについてインターネット上にはほとんど何もないようです (いくつかあります)。

タブがないのになぜ ViewPager を使っているのか不思議に思っている人がいれば、それは言ったように、FrameLayout には消えるツールバーを正しく使うための動作がなく、それが私が見つけた良い使い方だからです。また、NestedScrollView を使用できることも確認しましたが、これまで使用したことがありません... ViewPagerTitle を使用する可能性があるため、フラグメントの ViewPager に制限されていると思います。

4

1 に答える 1

2

問題は次のとおりです。

<android.support.design.widget.CoordinatorLayout 

<android.support.v4.widget.DrawerLayout

ルート レイアウトにするDrawerLayout必要があります。

参照してください: http://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout

を追加するには、レイアウトのルート ビューとしてオブジェクトを使用してユーザーを navigation drawer宣言します。内に 、画面のメイン コンテンツ (ドロワーが非表示の場合のプライマリ レイアウト) を含む 1 つのビューと、 のコンテンツを含む別のビューを追加します。interfaceDrawerLayoutDrawerLayoutnavigation drawer

ListViewまた、の代わりに使用することはお勧めしませんNavigationView

そして、ここにドキュメントが推奨する方法があります(それを除いてListView:)):

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

また:

ただし、これによりいくつかの問題が発生しました。私が達成したいのは - ToolbarPagerTitleStrip添付された A です。スクロールするとツールバーが消え、PagerTitleStrip理想的には表示されたままになります。おそらくそれも非表示になります。それについてはあまり気にしません。しかし、私は自分が働き続けたいと思って Navigation Drawerいますが、そうではありません。

これについての私の答えを確認してください:

https://stackoverflow.com/a/35241363/4409113

ツールバーを次のCollapsingToolbarLayoutように配置するだけです。

<android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingtoolbarly"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|snap">

            <android.support.v7.widget.Toolbar
                android:id="@+id/my_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:elevation="4dp"
                android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="190dp"
                android:minHeight="190dp"
                android:scaleType="fitXY"
                android:src="@drawable/header"
                app:layout_collapseMode="parallax" />

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

折りたたむ必要があり、ツールバーはその後非表示になります。それを保持したい場合(最近PagerTitleStrip使用することをお勧めします)、次のように下と上に配置します。TabLayoutCollapsingToolbarLayout</android.support.design.widget.AppBarLayout>

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

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            android:background="?attr/colorPrimary" />

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

以上です、グッドラック。

于 2016-02-06T22:28:29.833 に答える