まず、コーディネーターのレイアウトに関する私の知識不足を述べておきたいと思います。私はオンラインで見つけたチュートリアルに従っているだけなのですが、なぜ私の行動がうまくいかないのか不思議に思っています。
コーディネーター レイアウト内の子ビューは、アプリ バー レイアウトである必要がありますか? または、そこに任意のビューを配置できますか。
また、res-auto 名前空間を定義しても、layout_behavior のオプションは表示されません。通常、Android Studio は関数が利用可能な場合は自動補完しますが、今回は利用できませんでした。ただし、layout_behavior と入力してもエラーは表示されません。おそらく動作しているのでしょう...?
いずれにせよ、私は独自のカスタム レイアウト動作を定義し、それを適用しようとしていますが、うまく機能していないようです。ご意見をいただければ幸いです。
これがレイアウトです。最初の LinearLayout (search_polls_toolbar) にカスタム動作を適用し、垂直の recyclerview が上にスクロールしたときに、上にスクロールするようにします (現在ツールバーがそうであるように)。また、この xml はビュー ページャーのフラグメント用であることも言及する必要があります。また、ホスティング アクティビティには、ツールバーを上にスクロールさせるコーディネーター レイアウトが添付されています (そのために競合が発生する可能性がありますか?)。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/root"
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="match_parent">
<RelativeLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/search_polls_toolbar"
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize"
android:background="@color/icitizen_toolbar_orange"
android:weightSum="1"
app:layout_behavior="com.example.chrisjohnson.icitizenv2.CustomBehaviors.ToolbarBehavior"
>
<EditText
android:id="@+id/search_polls"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/search_polls"
android:gravity="center_horizontal"
android:layout_weight=".5"
android:drawableLeft="@drawable/magnifying_glass"
android:drawableStart="@drawable/magnifying_glass"
android:layout_marginTop="5dp"
android:layout_marginLeft="15dp"
android:drawablePadding="-50dp"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:paddingBottom="10dp"
android:cursorVisible="false"
android:textSize="20sp"
android:background="@color/icitizen_light_orange"
/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/poll_horizontal_recycler_view"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_below="@id/search_polls_toolbar"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:scrollbars="none"
>
</android.support.v7.widget.RecyclerView>
<android.support.v7.widget.RecyclerView
android:id="@+id/poll_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:layout_below="@id/poll_horizontal_recycler_view"
app:layout_scrollFlags="scroll|enterAlways"
android:scrollbars="vertical" />
</RelativeLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/polls_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/white_plus_icon"
android:layout_marginBottom="70dp"
app:backgroundTint="@color/icitizen_orange"
app:layout_anchor="@id/container"
app:layout_anchorGravity="bottom|right|end"
app:borderWidth="0dp"
android:layout_marginRight="15dp"
android:layout_marginEnd="15dp"/>
カスタム動作は次のとおりです。
public class ToolbarBehavior extends CoordinatorLayout.Behavior<Toolbar> {
public ToolbarBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
Toast.makeText(context, "AJSJA", Toast.LENGTH_LONG).show();
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, Toolbar child, View dependency) {
return dependency instanceof RecyclerView;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, Toolbar child, View dependency) {
child.setTranslationY(child.getY());
return true;
}
}
ホスティングアクティビティのレイアウトは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<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.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/home_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</android.support.design.widget.CoordinatorLayout>
私のコードをもっと投稿してほしいという方がいらっしゃいましたら、お知らせください。ありがとうございます :)
ベストアンサー1
動作しない理由は、 のビューがBehavior
の直接の子である必要があるためですCoordinatorLayout
。あなたの場合、階層はCoordinatorLayout
-> RelativeLayout
-> LinearLayout
( の場合Behavior
) です。