是的,Android BottomSheet 可以动态改变高度。要实现这个功能,你可以使用 CoordinatorLayout 和 AppBarLayout 来调整 BottomSheet 的高度。以下是一个简单的示例:
build.gradle
文件中添加 Material Design 库的依赖:dependencies {
implementation 'com.google.android.material:material:1.4.0'
}
activity_main.xml
)中添加 BottomSheet 和其他相关组件:<?xml version="1.0" encoding="utf-8"?>
<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"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<!-- 在这里添加你的 BottomSheet 内容 -->
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
MainActivity.java
)中设置 BottomSheet 的行为,并动态改变其高度:import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
public class MainActivity extends AppCompatActivity {
private BottomSheetBehavior<?> bottomSheetBehavior;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CoordinatorLayout coordinatorLayout = findViewById(R.id.coordinator_layout);
LinearLayout bottomSheet = findViewById(R.id.bottom_sheet);
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
// 设置初始状态为展开
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
// 为按钮设置点击事件,用于动态改变 BottomSheet 高度
Button changeHeightButton = findViewById(R.id.change_height_button);
changeHeightButton.setOnClickListener(v -> {
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
} else {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
}
}
在这个示例中,我们创建了一个 BottomSheet,并使用 AppBarLayout 和 CoordinatorLayout 来控制其高度。我们还添加了一个按钮,用于在展开和折叠状态之间切换 BottomSheet 的高度。你可以根据需要修改这个示例,以实现自己的需求。