Android:点击按钮从屏幕底部显示布局
最近,我在play store安装了一个名为walnut的应用程序,在那里我看到了一个弹出窗口的新功能。在主屏幕上有一个浮动操作菜单,当单击菜单按钮时,它将展开其中的项目,在展开的菜单上有一个添加帐户的选项,点击该选项后,屏幕底部会弹出一个特定高度的弹出窗口。我想知道屏幕底部弹出窗口的功能是什么。它真的是弹出窗口还是滑动抽屉?我想在我的android应用程序中使用完全相同的功能。如果有人知道这个功能,请帮助我。下面是这个弹出式布局的屏幕截图,它出现在胡桃木应用程序中的按钮点击上。Android:点击按钮从屏幕底部显示布局,android,Android,最近,我在play store安装了一个名为walnut的应用程序,在那里我看到了一个弹出窗口的新功能。在主屏幕上有一个浮动操作菜单,当单击菜单按钮时,它将展开其中的项目,在展开的菜单上有一个添加帐户的选项,点击该选项后,屏幕底部会弹出一个特定高度的弹出窗口。我想知道屏幕底部弹出窗口的功能是什么。它真的是弹出窗口还是滑动抽屉?我想在我的android应用程序中使用完全相同的功能。如果有人知道这个功能,请帮助我。下面是这个弹出式布局的屏幕截图,它出现在胡桃木应用程序中的按钮点击上。 使用snack
使用snackbar实现此目的
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "Welcome to AndroidHive", Snackbar.LENGTH_LONG);
snackbar.show();
XML设计:
从获得参考您可以使用BottomSheetLayout
您可以使用带有自定义布局的对话框。你们要做的唯一一件事就是从底部调用它,并像这样使用“样式作为材质”对话框
final Dialog mBottomSheetDialog = new Dialog(getActivity(), R.style.MaterialDialogSheet);
mBottomSheetDialog.setContentView(view); // your custom view.
mBottomSheetDialog.setCancelable(true);
mBottomSheetDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
mBottomSheetDialog.getWindow().setGravity(Gravity.BOTTOM);
mBottomSheetDialog.show();
我将布局高度改为800而不是包裹内容,结果如下
style.xml
<style name="MaterialDialogSheet" parent="@android:style/Theme.Dialog">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>
</style>
<style name="MaterialDialogSheetAnimation">
<item name="android:windowEnterAnimation">@anim/popup_show</item>
<item name="android:windowExitAnimation">@anim/popup_hide</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="100%p"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>
真的
@android:彩色/透明
@空的
真的
真的
假的
@style/MaterialDialogSheet动画
@动画/弹出式节目
@动画/弹出窗口隐藏
动画
弹出显示.xml
<style name="MaterialDialogSheet" parent="@android:style/Theme.Dialog">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>
</style>
<style name="MaterialDialogSheetAnimation">
<item name="android:windowEnterAnimation">@anim/popup_show</item>
<item name="android:windowExitAnimation">@anim/popup_hide</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="100%p"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>
弹出隐藏.xml
<style name="MaterialDialogSheet" parent="@android:style/Theme.Dialog">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>
</style>
<style name="MaterialDialogSheetAnimation">
<item name="android:windowEnterAnimation">@anim/popup_show</item>
<item name="android:windowExitAnimation">@anim/popup_hide</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="100%p"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>
您拥有的是一个自定义视图;所以尝试使用SnackBar会有很多麻烦。但是,使用BottomSheet()可以更轻松地实现这一点。您可以提供walnut应用程序的屏幕截图吗。我几乎无法想象你试图实现的目标。我将附加它。请稍候。@ribads我已附加了屏幕截图。请看一看。最好使用底层第三方库。@KJEjava48使用自定义设计的snackBar。请参阅回答我认为snackbar用于显示带有操作的消息。据我所知,它仅包含一个textView和一个操作。我认为我们无法使用xml布局自定义此操作。请查看我在问题中附带的屏幕截图中的布局。我在添加屏幕截图之前发布了此答案。有没有不使用第三方图书馆??当然。您只需要找到一种将自定义视图膨胀到活动的方法。然后根据要显示视图的事件管理其可见性(可能是动画)。更不用说,您还需要处理活动中的州费用,如反压、旋转和其他可能影响布局的更改。@Raja Jawahar有没有办法不使用第三方库来做到这一点??@KJEjava48。。Android为该选项提供了支持库。可能是因为效果完全相同。等等,我将发送我的弹出图像。哦,对不起,我弄错了。这是我的老项目,我忘了:)我正在更新我的答案。暂时放在抽屉里。很好。ohk忘记了在资源中创建动画文件夹并在其中添加xml。