如何将Android SnackBar调整到屏幕上的特定位置

时间:2015-07-18 14:49:00

标签: android android-view android-snackbar snackbar

掌握新的安卓小吃吧,我试图将其设置为定位在特定的y坐标上。它似乎甚至不可能。

我试图获得小吃店的观点的父母,但是,为了确定它的位置,父母没有什么可做的。

mSnackBar.getView().getParent();

在深入实际课程时,有一个mView实例,mParent是私有的,无论如何都无法到达。

https://developer.android.com/reference/android/support/design/widget/Snackbar.html

3 个答案:

答案 0 :(得分:50)

可以通过在现有的活动布局中定位android.support.design.widget.CoordinatorLayout来设置小吃栏的显示位置。

例如,假设您现有的布局为RelativeLayout,您可以添加CoordinatorLayout,如下所示:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:id="@+id/myCoordinatorLayout"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">
</android.support.design.widget.CoordinatorLayout>

然后,确保将CoordinatorLayout作为Snackbar.make()命令的第一个参数传递。

final View viewPos = findViewById(R.id.myCoordinatorLayout);    
Snackbar.make(viewPos, R.string.snackbar_text, Snackbar.LENGTH_LONG)
                            .setAction(R.string.snackbar_action_undo, showListener)
                            .show();

这将导致Snackbar显示在提供给make()函数的CoordinatorLayout底部

如果您传递的View不是CoordinatorLayout,则Snackbar将沿树向上走,直到找到CoordinatorLayout或布局的根。

答案 1 :(得分:2)

明确定义Snackbar的布局可能并不总是切实可行。

问题似乎是针对父母,而不是Snackbar。

Snackbar snackbar = Snackbar.make(layout, message, duration);
View snackbarLayout = snackbar.getView();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT
);
// Layout must match parent layout type
lp.setMargins(50, 0, 0, 0);
// Margins relative to the parent view.
// This would be 50 from the top left.
snackbarLayout.setLayoutParams(lp);
snackbar.show();

答案 2 :(得分:0)

除了brentm的答案之外,我还必须使用:

androidx.constraintlayout.widget.ConstraintLayout

并为其添加依赖项:

implementation "androidx.coordinatorlayout:coordinatorlayout:1.1.0"

相关问题