Перемещение плавающей кнопки действий вверх и вниз, чтобы избежать блокировки с помощью закусочной

Я использую эту библиотеку для реализации плавающей панели действий, и я не могу найти способ переместить кнопку, когда на экране появляется закутка. Возможно ли это с помощью этой библиотеки?

Ответ 1

Каждому, кто ищет ответ в будущем.

Формат координатора, используемый в качестве родительского макета плавающей кнопки, автоматически обрабатывает эффект анимации.

Кнопка плавающего действия имеет поведение по умолчанию, которое определяет добавленные виды Snackbar и соответственно подстраивает кнопку над высотой Snackbar.

Поведение с плавающей кнопкой действия

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/clayout">
<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_marginBottom="16dp"
    android:layout_marginRight="16dp"
    android:src="@drawable/filter_icon"
    app:rippleColor="@color/colorGray"
    app:fabSize="normal"
    app:borderWidth="0dp"/>
</android.support.design.widget.CoordinatorLayout>

Тогда наш код SnackBar будет использовать Coordinatorlayout [здесь clayout] как parentlayout, как показано ниже:

Snackbar.make(clayout, "Click on row to know more details", Snackbar.LENGTH_LONG)
                    .setAction("OK", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                        }
                    }).show();

Ответ 2

Вы можете переключиться на android.support.design.widget.FloatingActionButton и использовать CoordinatorLayout, чтобы указать Behaviors для ваших просмотров.

CoordinatorLayout - это супермощный FrameLayout.

КоординаторLayout предназначен для двух основных случаев использования:

  1. Как декор приложения верхнего уровня или хромированный макет
  2. В качестве контейнера для конкретного взаимодействия с одним или несколькими дочерними представлениями

Указав Behaviors для дочерних представлений CoordinatorLayout, вы можете обеспечить множество разных взаимодействий внутри одного родителя, и эти представления также могут взаимодействовать друг с другом. В классах просмотра могут указываться поведение по умолчанию при использовании в качестве дочернего элемента CoordinatorLayout с использованием аннотации DefaultBehavior.

Поведение может быть использовано для реализации разнообразных взаимодействий и дополнительных модификаций макета, начиная от выдвижных ящиков и панелей до прокручиваемых элементов и кнопок, которые придерживаются других элементов по мере их перемещения и анимации.

У детей координатораLayout может быть якорь. Этот идентификатор представления должен соответствовать произвольному потомку CoordinatorLayout, но он может не быть привязанным самим ребенком или потомком привязанного ребенка. Это можно использовать для размещения плавающих просмотров относительно других произвольных окон контента.

Ответ 3

Попробуйте использовать android.support.design.widget.FloatingActionButton и CoordinatorLayout.

И затем попробуйте следующее:

fabView = findViewById(R.id.floating_action_button_id);
Snackbar.make(fabView, "Hi", Snackbar.LENGTH_LONG).show()

Ответ 4

Вы можете использовать для установки parentLayout - как FAB,

Snackbar.make(parentLayout, R.string.snackbar_text,Snackbar.LENGTH_LONG).setAction(R.string.snackbar_action, myOnClickListener).show();

Ответ 5

Котлин:

class CustomBehavior : CoordinatorLayout.Behavior<FloatingActionButton> {   

....

    override fun onAttachedToLayoutParams(params: CoordinatorLayout.LayoutParams) {
        super.onAttachedToLayoutParams(params)

        //set dodgeInsetEdges to BOTTOM so that we dodge any Snackbars
        params.dodgeInsetEdges = Gravity.BOTTOM
    }

.....

}