react-native-orientation-locker
Version:
A react-native module that can listen on orientation changing of device, get current orientation, lock to preferred orientation.
128 lines (90 loc) • 3.83 kB
Markdown
# react-native-orientation-locker
[](https://www.npmjs.com/package/react-native-orientation-locker)
A react-native module that can listen on orientation changing of device, get current orientation, lock to preferred orientation. (cross-platform support)
### Feature
* lock screen orientation to PORTRAIT|LANDSCAPE-LEFT|PORTRAIT-UPSIDEDOWN|LANDSCAPE-RIGHT.
* listen on orientation changing of device
* get the current orientation of device
### Installation
#### Using npm
npm install react-native-orientation-locker --save
react-native link react-native-orientation-locker
#### Using CocoaPods (iOS Only)
pod 'react-native-orientation-locker', :path => 'node_modules/react-native-orientation-locker'
Consult the React Native documentation on how to [install React Native using CocoaPods](https://facebook.github.io/react-native/docs/embedded-app-ios.html#install-react-native-using-cocoapods).
### Configuration
#### iOS
Add the following to your project's `AppDelegate.m`:
```objc
#import "Orientation.h" // <--- import
AppDelegate
// ...
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return [Orientation getOrientation];
}
```
#### Android
Implement onConfigurationChanged method (in MainActivity.java)
```
import android.content.Intent; // <--- import
import android.content.res.Configuration; // <--- import
public class MainActivity extends ReactActivity {
......
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Intent intent = new Intent("onConfigurationChanged");
intent.putExtra("newConfig", newConfig);
this.sendBroadcast(intent);
}
......
}
```
## Usage
Whenever you want to use it within React Native code now you can:
`import Orientation from 'react-native-orientation-locker';`
```javascript
_onOrientationDidChange: function(orientation) {
if (orientation == 'LANDSCAPE-LEFT') {
//do something with landscape left layout
} else {
//do something with portrait layout
}
},
componentWillMount: function() {
//The getOrientation method is async. It happens sometimes that
//you need the orientation at the moment the js starts running on device.
//getInitialOrientation returns directly because its a constant set at the
//beginning of the js code.
var initial = Orientation.getInitialOrientation();
if (initial === 'PORTRAIT') {
//do stuff
} else {
//do other stuff
}
},
componentDidMount: function() {
Orientation.lockToPortrait(); //this will lock the view to Portrait
//Orientation.lockToLandscapeLeft(); //this will lock the view to Landscape
//Orientation.unlockAllOrientations(); //this will unlock the view to all Orientations
Orientation.addOrientationListener(this._onOrientationDidChange);
},
componentWillUnmount: function() {
Orientation.getOrientation((orientation)=> {
console.log("Current Device Orientation: ", orientation);
});
Orientation.removeOrientationListener(this._onOrientationDidChange);
}
```
## Events
- `addOrientationListener(function(orientation))`
orientation can return either `PORTRAIT` `LANDSCAPE-LEFT` `LANDSCAPE-RIGHT` `PORTRAIT-UPSIDEDOWN` `UNKNOWN`
- `removeOrientationListener(function(orientation))`
## Functions
- `lockToPortrait()`
- `lockToLandscapeLeft()`
- `lockToLandscapeRight()`
- `unlockAllOrientations()`
- `getOrientation(function(orientation)`
orientation can return either `PORTRAIT` `LANDSCAPE-LEFT` `LANDSCAPE-RIGHT` `PORTRAIT-UPSIDEDOWN` `UNKNOWN`