Как вы можете настроить Android SnackBar в определенное положение на экране
следуя новому Android snackbar, я пытаюсь установить его на определенную координату y. Это кажется даже невозможным.
Я попытался получить родителя представления snackbar, но для него ничего не нужно делать, чтобы установить его положение.
mSnackBar.getView().getParent();
при копании в фактический класс есть экземпляр mView и mParent, который является частным и не может быть достигнут как угодно.
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
2 ответов
возможно установить положение которое Snackbar показано путем располагать 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
в качестве первого аргумента .
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();
это выльется в закусочной отображается в дно на CoordinatorLayout
предоставлена сделать (функция).
если вы View
это не CoordinatorLayout
закусочная будет ходить по дереву, пока не найдет CoordinatorLayout
или корень макета.
определение макета явно для 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();