安卓Snackbar 显示在虚拟按键栏的上面。

本文介绍了一种在Android应用中使SnackBar显示在虚拟按键栏上方的方法。通过调整窗口装饰视图的系统UI可见性属性,使得SnackBar能够覆盖虚拟按键区域,并提供了一个具体的实现示例。
若有虚拟按键栏,安卓Snackbar 显示在虚拟按键栏的上面。

private Snackbar snackbar;

 

/**
     * 展示一个SnackBar
     */
    public void showSnackBar(String message) {


        //显示在虚拟按钮上面
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

        snackbar = Snackbar.make(getWindow().getDecorView(), message, Snackbar.LENGTH_INDEFINITE);
        snackbar.setActionTextColor(Color.YELLOW);
        snackbar.setAction("知道了", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismissSnackBar();
            }
        }).show();
    }
/**
 * 隐藏一个SnackBar
 */
public void dismissSnackBar() {
    if (snackbar != null && snackbar.isShownOrQueued()) {//不为空,是否正在显示或者排队等待即将要显示
        snackbar.dismiss();
        snackbar = null;
    }

}
在 Android Java 中,默认情况下 Snackbar 是依附于 Snackbar 的父布局显示的,而 AlertDialog 是一个模态对话框,要让 Snackbar 显示在 AlertDialog 上面,可通过将 Snackbar 依附到一个更高层级的视图上实现。 以下是一个示例代码: ```java import android.os.Bundle; import android.view.View; import android.widget.Button; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import com.google.android.material.snackbar.Snackbar; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button showDialogButton = findViewById(R.id.show_dialog_button); showDialogButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 构建 AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Alert Dialog") .setMessage("This is an alert dialog.") .setPositiveButton("Show Snackbar", (dialog, which) -> { // 获取当前 Activity 的根视图 View rootView = getWindow().getDecorView().findViewById(android.R.id.content); // 显示 Snackbar Snackbar.make(rootView, "Snackbar over AlertDialog", Snackbar.LENGTH_SHORT).show(); }) .setNegativeButton("Close", (dialog, which) -> dialog.dismiss()); // 创建并显示 AlertDialog AlertDialog dialog = builder.create(); dialog.show(); } }); } } ``` 在这个示例中,点击按钮会弹出一个 AlertDialog。在 AlertDialog 中点击 “Show Snackbar” 按钮,会获取当前 Activity 的根视图,然后将 Snackbar 依附到这个根视图上,从而使 Snackbar 显示在 AlertDialog 之上。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值