Screen Orientation (Portrait, Landscape)

પડદો ઊભો દેખાય કે આડો એ તમે manifest માં <activity> પરના android:screenOrientation ના attribute થી નિયંત્રિત કરો છો (portrait, landscape, sensor, અને બીજાં), અને મૂળભૂત રીતે ઉપકરણ ફેરવવાથી Activity નાશ પામીને ફરી સર્જાય છે, એટલે તમે સંભાળો નહીં ત્યાં સુધી ન સંઘરાયેલી અવસ્થા ખોવાય છે.

8 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

એ form જેણે પોતાને ખાલી કરી નાખ્યું

એક student FestConnect નું form અડધું ભરે છે, પછી વધુ આરામથી લખવા ફોનને આડો ફેરવે છે. એણે લખેલું દરેક ખાનું અચાનક કોરું થઈ જાય છે.

એ તમે લખેલો bug નથી; એ Android નું મૂળભૂત વર્તન છે. પડદો ફેરવવો એ ગોઠવણનો ફેરફાર છે, અને મૂળભૂત રીતે Android એ Activity ને નાશ કરીને ફરી સર્જે છે, અને ન સંઘરાયેલી અવસ્થા ભૂંસી નાખે છે. તમે એને એક manifest ના attribute, android:screenOrientation, થી અને ફેરવવાથી ખરેખર શું થાય છે એ સમજીને નિયંત્રિત કરો છો.

Theory

પેટી ફેરવો એટલે ઓરડો ફરી બંધાય

ઢીંગલીઘરનો એવો ઓરડો કલ્પો જ્યાં, દર વખતે તમે આખું ઘર ફેરવો ત્યારે રાચરચીલું કાઢી નખાય છે અને ઓરડો નકશા પરથી નવેસરથી ગોઠવાય છે. તમે હાથે જે ફેરગોઠવણ કરી હતી એ બધું જતું રહે છે. Android ફેરવવા પર આ જ કરે છે: એ Activity ને તોડીને onCreate થી ફરી બાંધે છે. કાં તો તમે તમારી ગોઠવણ પહેલાં સંઘરો, કાં તો ઘરને ફરતું અટકાવો.

Theory

દિશા ગોઠવવી અને સમજવી

એને manifest માં Activity પર ગોઠવો:

  • portrait: ઊભું બંધાયેલું.
  • landscape: આડું બંધાયેલું.
  • sensor / fullSensor: ઉપકરણના ફેરવવાના sensor ને અનુસરે છે.
  • unspecified: તંત્ર નક્કી કરે છે (મૂળભૂત).

મુશ્કેલી: ફેરવવું એ ગોઠવણનો ફેરફાર છે, અને મૂળભૂત રીતે એ Activity ને નાશ કરીને ફરી સર્જે છે (onCreate ફરી ચાલે છે), અને ન સંઘરાયેલી UI ની અવસ્થા ખોવાય છે. દિશા બાંધવાથી ફેરવવાનું અટકે છે, અને એથી ફરી ગોઠવાવાનું પણ; વૈકલ્પિક રીતે, અવસ્થા onSaveInstanceState માં સંઘરો.

Practical

Form ને portrait માં બાંધો (manifest)

<activity
    android:name=".MainActivity"
    android:screenOrientation="portrait">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<!-- screenOrientation="portrait" -> the screen will not rotate,
     so the Activity is not recreated, so the half-filled
     FestConnect form keeps its values. -->

This example runs in Gri-Learn on the web, where you can edit it and see the output.

Think first

ફેરવવાથી ખાનાં કેમ ખાલી થયાં?

મૂળભૂત દિશા સાથે, ફોન ફેરવવાથી FestConnect નું form ભૂંસાઈ ગયું. ઘટનાઓની સાંકળ સમજાવો, અને બે જુદા ઉકેલ આપો.

Show the answer

ફેરવવાથી ગોઠવણનો ફેરફાર થાય છે; મૂળભૂત રીતે Android Activity નો નાશ કરીને એને ફરી સર્જે છે, અને onCreate ને શરૂઆતથી ફરી ચલાવે છે, એટલે memory માંનાં ખાનાંનાં મૂલ્યો જતાં રહે છે. બે ઉકેલ: (1) android:screenOrientation="portrait" થી દિશા બાંધો, એટલે ફેરવવાનું નહીં, ફરી સર્જાવાનું નહીં; કે (2) મૂલ્યોને onSaveInstanceState/onCreate માં સંઘરો અને પાછાં લાવો જેથી એ ફરી બંધાવાનું ટકી જાય. Form માટે બાંધવું સૌથી સાદું છે; અવસ્થા સંઘરવી એ વધુ સામાન્ય, મજબૂત ટેવ છે.

Quiz

મૂળભૂત રીતે, વાપરનાર ઉપકરણ ફેરવે ત્યારે Activity નું શું થાય છે?

  1. એ નાશ પામીને ફરી સર્જાય છે (onCreate ફરી ચાલે છે), અને ન સંઘરાયેલી UI ની અવસ્થા ખોવાય છે
  2. કશું થતું નથી; Activity અડ્યા વગર ચાલતી રહે છે
  3. App સાવ બંધ થઈ જાય છે
  4. ફક્ત manifest ફરી load થાય છે, Activity નહીં
Show the answer

એ નાશ પામીને ફરી સર્જાય છે (onCreate ફરી ચાલે છે), અને ન સંઘરાયેલી UI ની અવસ્થા ખોવાય છે

ફેરવવું એ ગોઠવણનો ફેરફાર છે, અને મૂળભૂત રીતે Android Activity નો નાશ કરીને એને ફરી સર્જે છે, અને onCreate ફરી બોલાવે છે, અને એટલે જ ન સંઘરાયેલાં ખાનાં ફરી ગોઠવાય છે (A). Activity ફક્ત અડ્યા વગર ચાલતી રહેતી નથી (B), app બંધ થતી નથી (C), અને manifest ચાલતી વખતે 'ફરી load' થતું નથી (D). ફેરવવા પર ફરી સર્જાવાનું આ વર્તન જ કારણ છે કે કાં તો દિશા બાંધો કાં તો અવસ્થા સંઘરો.

Watch out

દિશાના ફાંદા

1. ફેરવવાથી અવસ્થા ટકે છે એવું માનવું: મૂળભૂત રીતે ટકતી નથી; Activity ફરી સર્જાય છે. દિશા બાંધો કે અવસ્થા સંઘરો.

2. દિશાને responsive layout સાથે ગૂંચવવી: screenOrientation કઈ બાજુ ઉપર એ બાંધે છે; layout ને landscape પ્રમાણે ગોઠવવું એ અલગ રચનાનું કામ છે (વૈકલ્પિક layout નાં resources).

3. બધું જ portrait માં ચુસ્તપણે બાંધી દેવું: form માટે ઠીક છે, પણ એ ખરો પાઠ છુપાવે છે કે Activities એ ફરી સર્જાવાનું ટકી શકવું જોઈએ.

Theory

આગળ: પડદા પર નિયંત્રણો મૂકો

તમારો FestConnect નો પડદો સ્વચ્છ (મથાળાની પટ્ટી નહીં) અને સ્થિર (દિશા બંધાયેલી) છે. હવે એને ખરેખરાં inputs જોઈએ. હવે પછીનો પાઠ મુખ્ય form નાં widgets મૂકે છે, એટલે કે નામ માટે EditText અને એક Button, અને Button ના onClick ને ખાનું વાંચવા જોડે છે, જે તમારી Android ની app માં પહેલી ખરેખરી interactivity છે.

Summary

Key takeaways

  • Manifest માં <activity> પર android:screenOrientation ગોઠવો: portrait, landscape, sensor, unspecified (મૂળભૂત).
  • ફેરવવું એ ગોઠવણનો ફેરફાર છે; મૂળભૂત રીતે Android Activity નો નાશ કરીને એને ફરી સર્જે છે (onCreate ફરી ચાલે છે).
  • એ ફરી સર્જાવાનું ન સંઘરાયેલી UI ની અવસ્થા ભૂંસી નાખે છે, અને એટલે જ અડધું ભરેલું form ફેરવવા પર ખાલી થાય છે.
  • દિશા બાંધીને (portrait) કે onSaveInstanceState માં અવસ્થા સંઘરીને/પાછી લાવીને સુધારો.
  • screenOrientation (કઈ બાજુ ઉપર) એ responsive landscape નું layout રચવાથી જુદું છે.
  • Memory hook: પેટી ફેરવવાથી ઓરડો નકશા પરથી ફરી બંધાય છે.

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Android Widgets (UI)

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Screen Orientation (Portrait, Landscape) · Mobile Application Development - 1 (option B) · Gri-Learn