掌握新的安卓小吃吧,我试图将其设置为定位在特定的y坐标上。它似乎甚至不可能。
我试图获得小吃店的观点的父母,但是,为了确定它的位置,父母没有什么可做的。
mSnackBar.getView().getParent();
在深入实际课程时,有一个mView实例,mParent是私有的,无论如何都无法到达。
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
答案 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"