-
Notifications
You must be signed in to change notification settings - Fork 24.3k
/
ReactDrawerLayout.java
73 lines (61 loc) · 2.18 KB
/
ReactDrawerLayout.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.views.drawer;
import android.support.v4.widget.DrawerLayout;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.uimanager.PixelUtil;
import com.facebook.react.uimanager.events.NativeGestureUtil;
/**
* Wrapper view for {@link DrawerLayout}. It manages the properties that can be set on the drawer
* and contains some ReactNative-specific functionality.
*/
/* package */ class ReactDrawerLayout extends DrawerLayout {
public static final int DEFAULT_DRAWER_WIDTH = LayoutParams.MATCH_PARENT;
private int mDrawerPosition = Gravity.START;
private int mDrawerWidth = DEFAULT_DRAWER_WIDTH;
public ReactDrawerLayout(ReactContext reactContext) {
super(reactContext);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (super.onInterceptTouchEvent(ev)) {
NativeGestureUtil.notifyNativeGestureStarted(this, ev);
return true;
}
return false;
}
/* package */ void openDrawer() {
openDrawer(mDrawerPosition);
}
/* package */ void closeDrawer() {
closeDrawer(mDrawerPosition);
}
/* package */ void setDrawerPosition(int drawerPosition) {
mDrawerPosition = drawerPosition;
setDrawerProperties();
}
/* package */ void setDrawerWidth(int drawerWidthInPx) {
mDrawerWidth = drawerWidthInPx;
setDrawerProperties();
}
// Sets the properties of the drawer, after the navigationView has been set.
/* package */ void setDrawerProperties() {
if (this.getChildCount() == 2) {
View drawerView = this.getChildAt(1);
LayoutParams layoutParams = (LayoutParams) drawerView.getLayoutParams();
layoutParams.gravity = mDrawerPosition;
layoutParams.width = mDrawerWidth;
drawerView.setLayoutParams(layoutParams);
drawerView.setClickable(true);
}
}
}