gpt4 book ai didi

android - 协调器布局自定义布局行为永远不会被调用

转载 作者:IT老高 更新时间:2023-10-28 22:19:20 30 4
gpt4 key购买 nike

首先,我想以我对协调器布局缺乏了解作为开头。我只是按照我在网上找到的教程进行操作,我很好奇为什么我的行为不起作用。

协调器布局内的 subview 是否必须是应用栏布局?或者你能把任何 View 放在那里。

另外,当我定义 res-auto 命名空间时,它没有给我 layout_behavior 的选项。通常,如果一个功能可用而它没有,android studio 会自动完成。虽然,如果我输入 layout_behavior 它不会提示。所以也许它正在工作......?

无论如何,我已经定义了我自己的自定义布局行为并尝试应用它,但它似乎不起作用。任何见解将不胜感激。

这是布局。我正在尝试将我的自定义行为应用于第一个 LinearLayout (search_polls_toolbar),并在垂直回收 View 向上滚动时让它向上滚动。 (就像当前的工具栏一样。)我还应该提到,这个 xml 是用于 viewpager 中的一个 fragment 。并且宿主 Activity 有一个附加的协调器布局,它确实使工具栏向上滚动。 (会不会因此而产生冲突?)

<?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;
}
}

这是托管 Activity 的布局。

    <?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>

如果有人希望我发布我的代码,请告诉我!谢谢:)

最佳答案

它不起作用的原因是具有 Behavior 的 View 必须是 CoordinatorLayout 的直接子级。在您的情况下,层次结构是: CoordinatorLayout -> RelativeLayout -> LinearLayout (带有 Behavior)。

关于android - 协调器布局自定义布局行为永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735603/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com