在Android中,CollapsingToolbarLayout
通常与AppBarLayout
和Toolbar
一起使用,以实现可折叠的工具栏效果。如果你想在片段(Fragment)中使用CollapsingToolbarLayout
并固定某个视图,你可以采取以下步骤:
CollapsingToolbarLayout
、AppBarLayout
和Toolbar
的设置是正确的。例如:
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"> <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <com.google.android.material.appbar.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin"/> </com.google.android.material.appbar.CollapsingToolbarLayout> <!-- 其他布局内容 --> </androidx.coordinatorlayout.widget.CoordinatorLayout>
在上面的布局中,Toolbar
使用了app:layout_collapseMode="pin"
属性,这意味着当工具栏折叠时,Toolbar
会固定在顶部。
Fragment
,可以通过ViewBinding
或者findViewById
来获取布局中的视图。
public class MyFragment extends Fragment { private FragmentMyBinding binding; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentMyBinding.inflate(inflater, container, false); return binding.getRoot(); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 在这里你可以访问binding.toolbar等视图 } @Override public void onDestroyView() { super.onDestroyView(); binding = null; } }
CollapsingToolbarLayout
的布局文件。这通常在你的Activity的布局文件中通过<fragment>
标签来实现。
<androidx.fragment.app.FragmentContainerView android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
然后在Activity中添加片段:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new MyFragment())
.commit();
}
}
}
领取专属 10元无门槛券
手把手带您无忧上云