是的,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 的高度。你可以根據需要修改這個示例,以實現自己的需求。