Screen Orientations in Android with Examples
Screen Orientation, also known as screen rotation, is the attribute of activity element in android. When screen orientation change from one state to other, it is also known as configuration change.
States of Screen orientation
There are various possible screen orientation states for any android application, such as:
- ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
- ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
- ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
- ActivityInfo.SCREEN_ORIENTATION_USER
- ActivityInfo.SCREEN_ORIENTATION_SENSOR
- ActivityInfo.SCREEN_ORIENTATION_BEHIND
- ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
- ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
- ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
- ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
The initial orientation of the Screen has to be defined in the AndroidManifest.xml file.
Syntax:
AndroidManifest.xml
< activity android:name = "package_name.Your_ActivityName" android:screenOrientation = "orientation_type" > </ activity > |
Example:
android:screenOrientation="orientation_type">
How to change Screen orientation?
Here is an example of an Android application that changes screen orientation for Landscape and Portrait mode.
We will create two activities of different screen orientation.
- The first activity will be as “portrait” orientation and
- Second activity as “landscape” orientation state.
Step-by-Step demonstration:
- Creating the activities: There will be two activities and hence two XML files, one for each activity.
- activity_main.xml: XML file for first activity consist of constraint layout with Button and Text View in it. This activity is in Landscape state.
- activity_next.xml: XML file for second activity consist of constraint layout with Text View in it. This activity is in Landscape state.
Below is the code for both activities:
activity_main.xml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<!--Constraint Layout-->
<
android.support.constraint.ConstraintLayout
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
tools:context
=
"com.geeksforgeeks.screenorientation.MainActivity"
>
<!--Button to launch next activity with onClick-->
<
Button
android:id
=
"@+id/b1"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"Next Activity"
android:layout_marginTop
=
"100dp"
android:onClick
=
"onClick"
android:layout_marginBottom
=
"10dp"
app:layout_constraintBottom_toBottomOf
=
"parent"
app:layout_constraintEnd_toEndOf
=
"parent"
app:layout_constraintVertical_bias
=
"0.613"
app:layout_constraintHorizontal_bias
=
"0.612"
app:layout_constraintStart_toStartOf
=
"parent"
app:layout_constraintTop_toBottomOf
=
"@+id/tv1"
/>
<!--TextView -->
<
TextView
android:text
=
"Potrait orientation"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_centerHorizontal
=
"true"
android:layout_marginTop
=
"124dp"
android:textSize
=
"25dp"
app:layout_constraintEnd_toEndOf
=
"parent"
app:layout_constraintHorizontal_bias
=
"0.502"
app:layout_constraintStart_toStartOf
=
"parent"
app:layout_constraintTop_toTopOf
=
"parent"
/>
</
android.support.constraint.ConstraintLayout
>
activity_next.xml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<!--Constraint layout-->
<
android.support.constraint.ConstraintLayout
android:layout_height
=
"match_parent"
android:layout_width
=
"match_parent"
tools:context
=
"com.geeksforgeeks.screenorientation.NextActivity"
>
<!--TextView-->
<
TextView
android:id
=
"@+id/tv"
android:text
=
"Landscape orientation"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_marginTop
=
"170dp"
android:textSize
=
"22dp"
app:layout_constraintStart_toStartOf
=
"parent"
app:layout_constraintEnd_toEndOf
=
"parent"
app:layout_constraintHorizontal_bias
=
"0.502"
app:layout_constraintTop_toTopOf
=
"parent"
/>
</
android.support.constraint.ConstraintLayout
>
- Creating the Java file: There will be two activities and hence two Java files, one for each activity.
- MainActivity.java: Java file for Main Activity, in which setOnClick() listener is attached to the button to launch next activity with different orientation.
- NextActivity.java: Java file for Next Activity which is in Landscape mode.
MainActivity.java
package
com.geeksforgeeks.screenorientation;
import
android.support.v7.app.AppCompatActivity;
import
android.content.Intent;
import
android.view.View;
import
android.widget.Button;
public
class
MainActivity
extends
AppCompatActivity {
// declare button variable
Button button;
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialise button with id
button = findViewById(R.id.b1);
}
// onClickListener attached to button
// to send intent to next activity
public
void
onClick(View v)
{
// Create instance of intent and
// startActivity with intent object
Intent intent
=
new
Intent(
MainActivity.
this
,
NextActivity.
class
);
startActivity(intent);
}
}
NextActivity.java
package
com.geeksforgeeks.screenorientation;
import
android.support.v7.app.AppCompatActivity;
public
class
MainActivity
extends
AppCompatActivity {
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
- Updating the AndroidManifest file: In AndroidManifest.xml file, add the screenOrientation state in activity along with its orientation. Here, we provide “portrait” orientation for MainActivity and “landscape” for NextActivity.
Below is the code for AndroidManifest file:
AndroidManifest.xml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
package
=
"com.geeksforgeeks.screenorientation"
>
<
application
android:allowBackup
=
"true"
android:icon
=
"@mipmap/ic_launcher"
android:label
=
"@string/app_name"
android:roundIcon
=
"@mipmap/ic_launcher_round"
android:supportsRtl
=
"true"
android:theme
=
"@style/AppTheme"
>
<!-Define potrait orientation for Main activity-->
<
activity
android:name
=
"com.geeksforgeeks.screenorientation.MainActivity"
android:screenOrientation
=
"portrait"
>
<
intent-filter
>
<
action
android:name
=
"android.intent.action.MAIN"
/>
<
category
android:name
=
"android.intent.category.LAUNCHER"
/>
</
intent-filter
>
</
activity
>
<!--Define landscape orientation for NextActivity-->
<
activity
android:name
=
".NextActivity"
android:screenOrientation
=
"landscape"
>
</
activity
>
</
application
>
</
manifest
>
- Output:
Please Login to comment...