Поиск…


Вступление

КоординаторLayout является супермощным FrameLayout, и цель этой ViewGroup - координировать представления, которые внутри него.

Основной привлекательностью CoordinatorLayout является его способность координировать анимацию и переходы представлений в самом файле XML.

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

: Как декор приложения верхнего уровня или хром

: Как контейнер для конкретного взаимодействия с одним или несколькими дочерними представлениями

замечания

CoordinatorLayout - это контейнер, который расширяет FrameLayout .
Присоединив CoordinatorLayout.Behavior к прямому ребенку CoordinatorLayout , вы сможете перехватывать события касания, вставки окна, измерение, макет и вложенную прокрутку.

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

Создание простого поведения

Чтобы создать Behavior просто расширьте класс CoordinatorLayout.Behavior .

Расширьте координаторLayout.Behavior

Пример:

public class MyBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {

      /**
       * Default constructor.
       */
      public MyBehavior() {
      }
    
      /**
       * Default constructor for inflating a MyBehavior from layout.
       *
       * @param context The {@link Context}.
       * @param attrs The {@link AttributeSet}.
       */
      public MyBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
      }
}

Это поведение должно быть привязано к ребенку. Вид CoordinatorLayout для вызова.

Привязать поведение программно

MyBehavior myBehavior = new MyBehavior();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
params.setBehavior(myBehavior);

Привязать поведение в XML

Вы можете использовать атрибут layout_behavior для привязки поведения в XML:

<View
  android:layout_height="...."
  android:layout_width="...."
  app:layout_behavior=".MyBehavior" />

Прикрепите поведение автоматически

Если вы работаете с настраиваемым представлением, вы можете прикрепить поведение, используя аннотацию @CoordinatorLayout.DefaultBehavior :

@CoordinatorLayout.DefaultBehavior(MyBehavior.class)
public class MyView extends ..... {

}

Использование SwipeDismissBehavior

SwipeDismissBehavior работает над любым представлением и реализует функциональные возможности салфетки для удаления в наших макетах с помощью CoordinatorLayout .

Просто используйте:

        final SwipeDismissBehavior<MyView> swipe = new SwipeDismissBehavior();

        //Sets the swipe direction for this behavior.
        swipe.setSwipeDirection(
            SwipeDismissBehavior.SWIPE_DIRECTION_ANY);

        //Set the listener to be used when a dismiss event occurs
        swipe.setListener(
            new SwipeDismissBehavior.OnDismissListener() {
            @Override public void onDismiss(View view) {
                //......
            }

            @Override 
            public void onDragStateChanged(int state) {
                //......
            }
        });

        //Attach the SwipeDismissBehavior to a view
        LayoutParams coordinatorParams = 
            (LayoutParams) mView.getLayoutParams();    
        coordinatorParams.setBehavior(swipe);

Создание зависимостей между представлениями

Вы можете использовать CoordinatorLayout.Behavior для создания зависимостей между представлениями. Вы можете якорь View на другой View по:

  • используя атрибут layout_anchor .
  • создание пользовательского Behavior и реализация метода layoutDependsOn возвращающего true .

Например, чтобы создать Behavior для перемещения ImageView при перемещении другого (пример панели инструментов), выполните следующие действия:

  • Создайте пользовательское поведение :

    public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}
    
  • Переопределите метод layoutDependsOn возвращающий true . Этот метод вызывается каждый раз, когда происходит изменение в макете:

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, 
            ImageView child, View dependency) {
        // Returns true to add a dependency.
        return dependency instanceof Toolbar;
    }
    
  • Всякий раз, когда метод layoutDependsOn возвращает true onDependentViewChanged метод onDependentViewChanged :

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child, View dependency) {
        // Implement here animations, translations, or movements; always related to the provided dependency.
        float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); 
        child.setTranslationY(translationY);
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow