You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Android底部弹出Activity,内部CardView含EditText与按钮

Android底部弹出输入型Activity实现步骤

1. 自定义Activity主题

在res/values/styles.xml中添加底部弹窗专用主题:

<style name="BottomSheetActivityTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
    <item name="android:windowExitAnimation">@anim/slide_out_bottom</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:backgroundDimAmount">0.5</item>
</style>

2. 添加弹出/关闭动画

新建res/anim文件夹,添加两个动画文件:

  • 进入动画slide_in_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>
  • 退出动画slide_out_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="0"
        android:toYDelta="100%p" />
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

3. 注册Activity并配置软键盘适配

在AndroidManifest.xml中给目标Activity绑定主题:

<activity
    android:name=".BottomInputActivity"
    android:theme="@style/BottomSheetActivityTheme"
    android:windowSoftInputMode="adjustResize" />

4. 编写布局文件(activity_bottom_input.xml)

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom"
    android:padding="16dp">

    <com.google.android.material.card.MaterialCardView
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardCornerRadius="16dp"
        app:cardElevation="8dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="24dp">

            <EditText
                android:id="@+id/input_et"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入内容"
                android:inputType="text" />

            <Button
                android:id="@+id/submit_btn"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:text="提交" />

        </LinearLayout>

    </com.google.android.material.card.MaterialCardView>

</FrameLayout>

5. 编写Activity逻辑代码

class BottomInputActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_bottom_input)
        
        // 点击空白区域关闭页面
        findViewById<FrameLayout>(R.id.root_layout).setOnClickListener {
            finish()
        }
        
        // 拦截CardView点击事件,避免点输入区域触发关闭
        findViewById<MaterialCardView>(R.id.card_view).setOnClickListener {  }
        
        // 按钮点击处理逻辑
        findViewById<Button>(R.id.submit_btn).setOnClickListener {
            val inputContent = findViewById<EditText>(R.id.input_et).text.toString()
            // 自行处理输入内容的业务逻辑
            finish()
        }
    }

    override fun finish() {
        super.finish()
        // 绑定退出动画
        overridePendingTransition(R.anim.slide_in_bottom, R.anim.slide_out_bottom)
    }
}

注意事项

  • 使用Java开发的项目直接把上述Kotlin代码转换为对应Java语法即可,逻辑完全一致
  • 需确保项目引入Material组件库,在module级build.gradle的dependencies中添加implementation 'com.google.android.material:material:1.9.0'即可
  • 不需要点击空白关闭的话,直接删除根布局的点击监听即可
  • 已配置软键盘自动顶起布局,不需要额外处理输入框遮挡问题

内容的提问来源于stack exchange,提问作者MiniDev99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:24:03