Java 类android.support.design.widget.CoordinatorLayout.Behavior 实例源码
项目:boohee_v5.6
文件:BottomSheetBehavior.java
public static <V extends View> BottomSheetBehavior<V> from(V view) {
LayoutParams params = view.getLayoutParams();
if (params instanceof CoordinatorLayout.LayoutParams) {
Behavior behavior = ((CoordinatorLayout.LayoutParams) params).getBehavior();
if (behavior instanceof BottomSheetBehavior) {
return (BottomSheetBehavior) behavior;
}
throw new IllegalArgumentException("The view is not associated with BottomSheetBehavior");
}
throw new IllegalArgumentException("The view is not a child of CoordinatorLayout");
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
public void testDependentViewRemoved() throws Throwable {
final CoordinatorLayout col = activityTestRule.getActivity().mCoordinatorLayout;
// Add two views, A & B, where B depends on A
final View viewA = new View(col.getContext());
final View viewB = new View(col.getContext());
final CoordinatorLayout.LayoutParams lpB = col.generateDefaultLayoutParams();
final CoordinatorLayout.Behavior behavior = spy(new DependentBehavior(viewA));
lpB.setBehavior(behavior);
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.addView(viewA);
col.addView(viewB, lpB);
}
});
getInstrumentation().waitForIdleSync();
// Now remove view A
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.removeView(viewA);
}
});
// And assert that View B's Behavior was called appropriately
verify(behavior, times(1)).onDependentViewRemoved(col, viewB, viewA);
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
public void testGetDependenciesAfterDependentViewRemoved() throws Throwable {
final CoordinatorLayout col = activityTestRule.getActivity().mCoordinatorLayout;
// Add two views, A & B, where B depends on A
final View viewA = new View(col.getContext());
final View viewB = new View(col.getContext());
final CoordinatorLayout.LayoutParams lpB = col.generateDefaultLayoutParams();
final CoordinatorLayout.Behavior behavior =
new DependentBehavior(viewA) {
@Override
public void onDependentViewRemoved(
CoordinatorLayout parent, View child, View dependency) {
parent.getDependencies(child);
}
};
lpB.setBehavior(behavior);
// Now add views
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.addView(viewA);
col.addView(viewB, lpB);
}
});
// Wait for a layout
getInstrumentation().waitForIdleSync();
// Now remove view A, which will trigger onDependentViewRemoved() on view B's behavior
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.removeView(viewA);
}
});
}
项目:material-components-android
文件:ExpandableBehavior.java
/**
* A utility function to get the {@link ExpandableBehavior} attached to the {@code view}.
*
* @param view The {@link View} that the {@link ExpandableBehavior} is attached to.
* @param klass The expected {@link Class} of the attached {@link ExpandableBehavior}.
* @return The {@link ExpandableBehavior} attached to the {@code view}.
*/
public static <T extends ExpandableBehavior> T from(View view, Class<T> klass) {
ViewGroup.LayoutParams params = view.getLayoutParams();
if (!(params instanceof CoordinatorLayout.LayoutParams)) {
throw new IllegalArgumentException("The view is not a child of CoordinatorLayout");
}
CoordinatorLayout.Behavior<?> behavior =
((CoordinatorLayout.LayoutParams) params).getBehavior();
if (!(behavior instanceof ExpandableBehavior)) {
throw new IllegalArgumentException("The view is not associated with ExpandableBehavior");
}
return klass.cast(behavior);
}
项目:chromium-for-android-56-debug-video
文件:TabContentViewParent.java
/**
* @return The {@link Behavior} that controls how children of this class animate together.
*/
public Behavior<?> getBehavior() {
return mBehavior;
}
项目:AndroidChromium
文件:TabContentViewParent.java
/**
* @return The {@link Behavior} that controls how children of this class animate together.
*/
public Behavior<?> getBehavior() {
return mBehavior;
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
@TargetApi(21)
@SdkSuppress(minSdkVersion = 21)
public void testSetFitSystemWindows() throws Throwable {
final CoordinatorLayout col = activityTestRule.getActivity().mCoordinatorLayout;
final View view = new View(col.getContext());
// Create a mock which calls the default impl of onApplyWindowInsets()
final CoordinatorLayout.Behavior<View> mockBehavior = mock(CoordinatorLayout.Behavior.class);
doCallRealMethod()
.when(mockBehavior)
.onApplyWindowInsets(same(col), same(view), any(WindowInsetsCompat.class));
// Assert that the CoL is currently not set to fitSystemWindows
assertFalse(col.getFitsSystemWindows());
// Now add a view with our mocked behavior to the CoordinatorLayout
view.setFitsSystemWindows(true);
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
final CoordinatorLayout.LayoutParams lp = col.generateDefaultLayoutParams();
lp.setBehavior(mockBehavior);
col.addView(view, lp);
}
});
getInstrumentation().waitForIdleSync();
// Now request some insets and wait for the pass to happen
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.requestApplyInsets();
}
});
getInstrumentation().waitForIdleSync();
// Verify that onApplyWindowInsets() has not been called
verify(mockBehavior, never())
.onApplyWindowInsets(same(col), same(view), any(WindowInsetsCompat.class));
// Now enable fits system windows and wait for a pass to happen
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.setFitsSystemWindows(true);
}
});
getInstrumentation().waitForIdleSync();
// Verify that onApplyWindowInsets() has been called with some insets
verify(mockBehavior, atLeastOnce())
.onApplyWindowInsets(same(col), same(view), any(WindowInsetsCompat.class));
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
public void testDependentViewChanged() throws Throwable {
final CoordinatorLayout col = activityTestRule.getActivity().mCoordinatorLayout;
// Add two views, A & B, where B depends on A
final View viewA = new View(col.getContext());
final CoordinatorLayout.LayoutParams lpA = col.generateDefaultLayoutParams();
lpA.width = 100;
lpA.height = 100;
final View viewB = new View(col.getContext());
final CoordinatorLayout.LayoutParams lpB = col.generateDefaultLayoutParams();
lpB.width = 100;
lpB.height = 100;
final CoordinatorLayout.Behavior behavior = spy(new DependentBehavior(viewA));
lpB.setBehavior(behavior);
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.addView(viewA, lpA);
col.addView(viewB, lpB);
}
});
getInstrumentation().waitForIdleSync();
// Reset the Behavior since onDependentViewChanged may have already been called as part of
// any layout/draw passes already
reset(behavior);
// Now offset view A
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
ViewCompat.offsetLeftAndRight(viewA, 20);
ViewCompat.offsetTopAndBottom(viewA, 20);
}
});
getInstrumentation().waitForIdleSync();
// And assert that view B's Behavior was called appropriately
verify(behavior, times(1)).onDependentViewChanged(col, viewB, viewA);
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
public void testDodgeInsetBeforeLayout() throws Throwable {
final CoordinatorLayout col = activityTestRule.getActivity().mCoordinatorLayout;
// Add a dummy view, which will be used to trigger a hierarchy change.
final View dummy = new View(col.getContext());
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.addView(dummy);
}
});
// Wait for a layout.
getInstrumentation().waitForIdleSync();
final View dodge = new View(col.getContext());
final CoordinatorLayout.LayoutParams lpDodge = col.generateDefaultLayoutParams();
lpDodge.dodgeInsetEdges = Gravity.BOTTOM;
lpDodge.setBehavior(
new Behavior() {
@Override
public boolean getInsetDodgeRect(CoordinatorLayout parent, View child, Rect rect) {
// Any non-empty rect is fine here.
rect.set(0, 0, 10, 10);
return true;
}
});
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
col.addView(dodge, lpDodge);
// Ensure the new view is in the list of children.
int heightSpec = MeasureSpec.makeMeasureSpec(col.getHeight(), MeasureSpec.EXACTLY);
int widthSpec = MeasureSpec.makeMeasureSpec(col.getWidth(), MeasureSpec.EXACTLY);
col.measure(widthSpec, heightSpec);
// Force a hierarchy change.
col.removeView(dummy);
}
});
// Wait for a layout.
getInstrumentation().waitForIdleSync();
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
public void testNestedScrollingDispatchesToBehavior() throws Throwable {
final CoordinatorLayoutActivity activity = activityTestRule.getActivity();
final CoordinatorLayout col = activity.mCoordinatorLayout;
// Now create a view and add it to the CoordinatorLayout with the spy behavior,
// along with a NestedScrollView
final ImageView imageView = new ImageView(activity);
final CoordinatorLayout.Behavior behavior = spy(new NestedScrollingBehavior());
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
LayoutInflater.from(activity).inflate(R.layout.include_nestedscrollview, col, true);
CoordinatorLayout.LayoutParams clp = new CoordinatorLayout.LayoutParams(200, 200);
clp.setBehavior(behavior);
col.addView(imageView, clp);
}
});
// Now vertically swipe up on the NSV, causing nested scrolling to occur
onView(withId(R.id.nested_scrollview)).perform(swipeUp());
// Verify that the Behavior's onStartNestedScroll was called once
verify(behavior, times(1))
.onStartNestedScroll(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(View.class), // direct child target
any(int.class)); // axes
// Verify that the Behavior's onNestedScrollAccepted was called once
verify(behavior, times(1))
.onNestedScrollAccepted(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(View.class), // direct child target
any(int.class)); // axes
// Verify that the Behavior's onNestedPreScroll was called at least once
verify(behavior, atLeastOnce())
.onNestedPreScroll(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(int.class), // dx
any(int.class), // dy
any(int[].class)); // consumed
// Verify that the Behavior's onNestedScroll was called at least once
verify(behavior, atLeastOnce())
.onNestedScroll(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(int.class), // dx consumed
any(int.class), // dy consumed
any(int.class), // dx unconsumed
any(int.class)); // dy unconsumed
// Verify that the Behavior's onStopNestedScroll was called once
verify(behavior, times(1))
.onStopNestedScroll(
eq(col), // parent
eq(imageView), // child
any(View.class)); // target
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
public void testNestedScrollingDispatchingToBehaviorWithGoneView() throws Throwable {
final CoordinatorLayoutActivity activity = activityTestRule.getActivity();
final CoordinatorLayout col = activity.mCoordinatorLayout;
// Now create a GONE view and add it to the CoordinatorLayout with the spy behavior,
// along with a NestedScrollView
final ImageView imageView = new ImageView(activity);
imageView.setVisibility(View.GONE);
final CoordinatorLayout.Behavior behavior = spy(new NestedScrollingBehavior());
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
LayoutInflater.from(activity).inflate(R.layout.include_nestedscrollview, col, true);
CoordinatorLayout.LayoutParams clp = new CoordinatorLayout.LayoutParams(200, 200);
clp.setBehavior(behavior);
col.addView(imageView, clp);
}
});
// Now vertically swipe up on the NSV, causing nested scrolling to occur
onView(withId(R.id.nested_scrollview)).perform(swipeUp());
// Verify that the Behavior's onStartNestedScroll was not called
verify(behavior, never())
.onStartNestedScroll(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(View.class), // direct child target
any(int.class)); // axes
// Verify that the Behavior's onNestedScrollAccepted was not called
verify(behavior, never())
.onNestedScrollAccepted(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(View.class), // direct child target
any(int.class)); // axes
// Verify that the Behavior's onNestedPreScroll was not called
verify(behavior, never())
.onNestedPreScroll(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(int.class), // dx
any(int.class), // dy
any(int[].class)); // consumed
// Verify that the Behavior's onNestedScroll was not called
verify(behavior, never())
.onNestedScroll(
eq(col), // parent
eq(imageView), // child
any(View.class), // target
any(int.class), // dx consumed
any(int.class), // dy consumed
any(int.class), // dx unconsumed
any(int.class)); // dy unconsumed
// Verify that the Behavior's onStopNestedScroll was not called
verify(behavior, never())
.onStopNestedScroll(
eq(col), // parent
eq(imageView), // child
any(View.class)); // target
}
项目:material-components-android
文件:CoordinatorLayoutTest.java
@Test
public void testNestedScrollingTriggeringDependentViewChanged() throws Throwable {
final CoordinatorLayoutActivity activity = activityTestRule.getActivity();
final CoordinatorLayout col = activity.mCoordinatorLayout;
// First a NestedScrollView to trigger nested scrolling
final View scrollView =
LayoutInflater.from(activity).inflate(R.layout.include_nestedscrollview, col, false);
// Now create a View and Behavior which depend on the scrollview
final ImageView dependentView = new ImageView(activity);
final CoordinatorLayout.Behavior dependentBehavior = spy(new DependentBehavior(scrollView));
// Finally a view which accepts nested scrolling in the CoordinatorLayout
final ImageView nestedScrollAwareView = new ImageView(activity);
activityTestRule.runOnUiThread(
new Runnable() {
@Override
public void run() {
// First add the ScrollView
col.addView(scrollView);
// Now add the view which depends on the scrollview
CoordinatorLayout.LayoutParams clp = new CoordinatorLayout.LayoutParams(200, 200);
clp.setBehavior(dependentBehavior);
col.addView(dependentView, clp);
// Now add the nested scrolling aware view
clp = new CoordinatorLayout.LayoutParams(200, 200);
clp.setBehavior(new NestedScrollingBehavior());
col.addView(nestedScrollAwareView, clp);
}
});
// Wait for any layouts, and reset the Behavior so that the call counts are 0
getInstrumentation().waitForIdleSync();
reset(dependentBehavior);
// Now vertically swipe up on the NSV, causing nested scrolling to occur
onView(withId(R.id.nested_scrollview)).perform(swipeUp());
// Verify that the Behavior's onDependentViewChanged is not called due to the
// nested scroll
verify(dependentBehavior, never())
.onDependentViewChanged(
eq(col), // parent
eq(dependentView), // child
eq(scrollView)); // axes
}