And*_*ast 7 android android-layout android-snackbar
我正在更新我当前的应用程序以使用零食栏,在Google规范中它们显示了各种使用它们的方法http://www.google.com/design/spec/components/snackbars-toasts.html#snackbars-toasts-specs
例A:

例B:

这是我的代码atm:
Snackbar snackbar = Snackbar.make(mParentLayout, displayMessage,
Snackbar.LENGTH_LONG);
snackbar.setAction(actionMessage, mClickListener);
snackbar.show();
Run Code Online (Sandbox Code Playgroud)
我在例B中得到了结果,
我该如何添加保证金?
Bam*_*amx 23
比Saeid的答案更好,您可以获得默认的SnackBar布局参数并根据需要进行修改:
public static void displaySnackBarWithBottomMargin(Snackbar snackbar, int sideMargin, int marginBottom) {
final View snackBarView = snackbar.getView();
final CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) snackBarView.getLayoutParams();
params.setMargins(params.leftMargin + sideMargin,
params.topMargin,
params.rightMargin + sideMargin,
params.bottomMargin + marginBottom);
snackBarView.setLayoutParams(params);
snackbar.show();
}
Run Code Online (Sandbox Code Playgroud)
M.U*_*man 15
以上解决方案都不适合我。
但是,我得到了一个技巧,我们可以在翻译的帮助下使用它。
Snackbar snackbar = Snackbar.make(mActivity.getWindow().getDecorView().getRootView(), message, Snackbar.LENGTH_SHORT);
View snackBarView = snackbar.getView();
snackBarView.setTranslationY(-(convertDpToPixel(48, mActivity)));
snackbar.show();
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到 convertDpToPixel 方法
我只是添加我的解决方案,因为@BamsMamx 解决方案不起作用我需要添加 getChildAt(0)
public static void displaySnackBarWithBottomMargin(BaseActivity activity, View main) {
Snackbar snackbar = Snackbar.make(main, R.string.register_contacts_snackbar, Snackbar.LENGTH_SHORT);
final FrameLayout snackBarView = (FrameLayout) snackbar.getView();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) snackBarView.getChildAt(0).getLayoutParams();
params.setMargins(params.leftMargin,
params.topMargin,
params.rightMargin,
params.bottomMargin + 100;
snackBarView.getChildAt(0).setLayoutParams(params);
snackbar.show();
}
Run Code Online (Sandbox Code Playgroud)
借助 Material Components 库,您可以snackbarStyle在应用主题中使用该属性:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<item name="snackbarStyle">@style/MySnackbar</item>
</style>
Run Code Online (Sandbox Code Playgroud)
和:
<style name="MySnackbar" parent="Widget.MaterialComponents.Snackbar">
<item name="android:layout_margin">32dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
小智 5
添加 CoordinatorLayout 或 Frame Layout 然后设置边距对我不起作用
要解决此问题,请使用 Drawable Background,其中使用 item 设置 Margin 和 shape 以设置所需的 Padding
container_snackbar.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Set Margin Here -->
<item
android:left="20dp"
android:right="20dp"
android:bottom="10dp"
android:top="10dp">
<!-- Insert your shape here: -->
<shape android:shape="rectangle" >
<solid android:color="#FE4C4C" />
<!-- Padding for inner text-->
<padding android:left="25dp" android:right="10dp" android:bottom="10dp" android:top="10dp" />
<corners android:radius="5dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
然后从 Activity 设置 Drawable
主活动.java
Snackbar snack = Snackbar
.make(activity,"Hello World ",Snackbar.LENGTH_INDEFINITE);
snack.getView()
.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.contianer_snackbar));
snack.show();
Run Code Online (Sandbox Code Playgroud)
控制 Snackbar 显示的关键是使用android.support.design.widget.CoordinatorLayout布局。如果没有它,您的 Snackbar 将始终显示在小型设备的底部和大型设备的左下角。注意:您可以使用作为布局的CoordinatorLayout根或布局树结构中的任何位置。ViewGroup
添加后,确保将CoordinatorLayout(或子)作为 Snackbar.make() 命令的第一个参数传递。
通过添加填充或边距,CoordinatorLayout您可以控制位置并将 Snackbar 从屏幕底部移动。
材料设计指南指定了 Snackbar 的最小和最大宽度。在小型设备上,您会看到它填满屏幕的宽度,而在平板电脑上,您会看到 Snackbar 达到最大宽度,但不会填满屏幕的宽度。
| 归档时间: |
|
| 查看次数: |
9398 次 |
| 最近记录: |