ویژگی های صفحه نمایش و چرخش آن، در برنامه نویسی اندروید

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست تاپیک:

  1. طراحی نوع نمایش فایل های xml برای صفحه های نمایش با اندازه های مختلف (گوشی های مختلف)
  2. غیرفعال کردن چرخش خودکار در برنامه اندروید، هنگام چرخاندن گوشی موبایل (برنامه اندروید یا یک Activity ، همیشه در حالت عمودی (portrait) یا حالت افقی (landscape) باشند)
  3. از دست نرفتن اطلاعات Activity هنگام چرخش صفحه نمایش (عدم restart شدن Activity)، در برنامه نویسی اندروید
  4. چرخاندن صفحه نمایش گوشی به حالت عمودی (portrait) یا حالت افقی (landscape)، با کدنویسی java ، در برنامه نویسی اندروید
  5. تعیین یک لایه گرافیکی متفاوت برای Activity ، هنگامی که گوشی در حالت افقی (landscape) قرار می گیرد، در برنامه نویسی اندروید
  6. به دست آوردن ابعاد صفحه نمایش گوشی، بر حسب پیکسل (Pixel)، در برنامه نویسی اندروید
  7. به دست آوردن جهت صفحه نمایش گوشی (بودن صفحه نمایش گوشی در حالت عمودی (portrait) یا در حالت افقی (landscape))، سپس اجرای یک سری کد بر اساس یکی از آن دو حالت، در برنامه نویسی اندروید
  8. روشن ماندن صفحه نمایش گوشی برای همیشه (جلوگیری از خاموش شدن صفحه نمایش)، در برنامه نویسی اندروید
  9. اجرای یک سری کد، هنگام چرخش صفحه نمایش گوشی، با استفاده از روش onConfigurationChanged ، در برنامه نویسی اندروید
  10. Restart کردن Activity ، هنگام چرخش صفحه نمایش گوشی، در برنامه نویسی اندروید

منبع: kelidestan.com
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
طراحی نوع نمایش فایل های xml برای صفحه های نمایش با اندازه های مختلف (گوشی های مختلف)

طراحی نوع نمایش فایل های xml برای صفحه های نمایش با اندازه های مختلف (گوشی های مختلف)

زمانی که شما یک برنامه اندروید می سازید، ممکن است آن را بر روی یک شبیه ساز یا یک گوشی اندروید واقعی تست کنید، اما باید توجه داشته باشید که چنانچه برنامه شما بر روی یک گوشی اندروید با اندازه صفحه نمایش متفاوتی اجرا شود، ممکن است ظاهر آن تفاوت داشته باشد و بنابراین کل طراحی شما به هم بریزد. خوشبختانه برای رفع این مشکل، راه حلی در هنگام ساخت پروژه اندروید، در نظر گرفته شده است.
نگاهی به شکل زیر بیندازید (شکلی از پوشه های یک پروژه اندروید) :

android-127.png

در شکل بالا، ما 4 پوشه (folder) را با کادر قرمز رنگ، مشخص کرده ایم، اما اگر دقت کنید، شما در پروژه اندروید خود (در برنامه eclipse)، تنها پوشه با نام layout را دارید. موضوع این است که، پوشه layout که ما در آن، فایل های xml خود برای نمایش ظاهر activity ها را قرار می دهیم، برای گوشی های با اندازه نرمال (normal) مناسب است و چنانچه بخواهیم فایل های xml ، در گوشی های با سایر اندازه های صفحه نمایش نیز به طور مناسب نمایش داده شوند، باید 3 پوشه دیگر را نیز برای پروژه اندروید خود ساخته و سپس از فایل xml مورد نظرمان، به درون هر یک از آنها، کپی کنیم. (اگر تنها فولدر layout موجود باشد، برای همه گوشی ها، فایل های xml موجود در آن، به کاربر نمایش داده می شود)
بنابراین تا اینجا شرح دادیم که علاوه بر پوشه layout ، باید 3 پوشه دیگر نیز بسازیم (با نام ها و موقعیت نمایش داده شده در شکل قبل)، سپس مثلا یک فایل xml را قبلا در پوشه layout ساخته ایم و آن را ویرایش کرده ایم. اکنون برای اطمینان از نمایش صحیح آن در سایر گوشی ها، در هر یک از 3 پوشه دیگر، آن را کپی می کنیم. در نهایت باید فایل های xml درون 4 پوشه را به طور جداگانه باز کنیم و موقعیت عناصر را در آنها تنظیم نماییم.
هر یک از این 4 پوشه، برای یک دسته از گوشی های اندروید با یک محدوده صفحه نمایش مشخص می باشد. مثلا فرض کنید که برنامه اندروید را بر روی یک گوشی با صفحه نمایش بزرگ (large) نصب نماییم، گوشی اندروید، به جای اینکه فایل xml موجود در پوشه layout را به کاربر نمایش دهد، فایل xml موجود در layout-large را نمایش خواهد داد. بنابراین کاربر، طراحی شما برای گوشی اندروید با صفحه نمایش بزرگ (large) را مشاهده می کند و از این بابت، خیال شما آسوده خواهد بود.

اثرگذاری رزولوشن عکس های برنامه اندروید :

قرار دادن عکس در پوشه های drawable مختلف، برای ((رزولوشن)) است، نه ((اندازه صفحه نمایش)). یعنی ما عکس های با رزولوشن مختلف را در پوشه های مختلف قرار می دهیم تا برای یک گوشی با رزولوشن بالا، عکس با رزولوشن بالاتری نمایش داده شود. اما در مواردی که تعیین کرده باشید که اندازه ImageView به اندازه خود محتوای آن (یعنی عکس) وابسته باشد، رزولوشن در نحوه قرارگیری ImageView تاثیر خواهد داشت. در واقع، رزولوشن برای کیفیت مناسب عکس است و زیاد جالب نیست که نحوه قرارگیری عناصر مربوط به عکس را به گونه ای تعیین کنیم که رزولوشن در آنها تاثیرگذار باشد.

بنابراین بهتر است که یک جمع بندی در این زمینه داشته باشیم :

1- در پوشه های layout با نام های مختلف، فایل های xml جداگانه ای را برای ظاهر گرافیکی Activity در گوشی های با ((اندازه صفحه نمایش)) مختلف قرار می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]small[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]large[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]xlarge[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]small[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]large[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]xlarge[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای بالا، پوشه هایی نیز با پسوند land ساخته ایم، مثلا یک پوشه با نام layout-xlarge-land ساخته ایم که مربوط به گوشی های با اندازه xlarge است که برای زمانی است که گوشی دارای اندازه xlarge بوده و همچنین در حالت افقی (landscape) قرار گرفته باشد (یک یادآوری برای این نکته است که برای هر Activity ، می توانیم یک فایل xml نیز برای زمانی طراحی کنیم که کاربر، گوشی را در حالت افقی (landscape) قرار می دهد).

610.jpg


بنابراین برای لایه گرافیکی Activity ، در هر کدام از پوشه ها، یک فایل xml قرار می دهیم (مثلا ابتدا یکی ساخته و سپس آن را در بقیه کپی کنید). معمولا توسعه دهنده ها، ابتدا برای یک دسته (معمولا در پوشه layout که پیش فرض است)، یک فایل xml می سازند و تمامی عناصر آن را طراحی می کنند و عملکرد کدهای java مربوط به Activity را هم تست می کنند و در آخر که خیالشان از همه چیز راحت شد، فایل xml را در بقیه پوشه ها کپی کرده و سپس آنها را تک تک باز می کنند و از طریق برنامه eclipse که این امکان را می دهد که ظاهر گرافیکی فایل xml را ببینیم، نحوه چیدمان عنصرها را تنظیم می کنند.

2- واحد dp را برای اندازه عناصر گرافیکی و واحد sp را برای متن به کار می بریم (واحد sp برای اندازه خود متن، نه برای اندازه TextView یا عناصری که حاوی متن هستند).

3- باید ببینیم که آیا اندازه عناصر گرافیکی موجود در لایه گرافیکی را به محتوایی که در آنها قرار می گیرد، وابسته کرده ایم یا خیر. مثلا آیا اندازه یک ImageView به عکسی که در آن قرار می گیرد وابسته است یا خیر. توصیه این است که چنین وابستگی ایجاد نکنیم، اما اگر وابسته است، قرار دادن عکس با رزولوشن های مختلف، در پوشه های مختلف drawable که برای گوشی های اندروید با ((رزولوشن)) مختلف می باشند، کمک می کند که چندان ظاهر گرافیکی، در گوشی های با رزولوشن متفاوت، تغییر نکند (ولی باز هم می گویم که آنها را به رزولوشن وابسته نکنید) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]res[COLOR=#339933]/[/COLOR]drawable[COLOR=#339933]-[/COLOR]hdpi[COLOR=#339933]/[/COLOR]icon.[COLOR=#006633]png[/COLOR]
res[COLOR=#339933]/[/COLOR]drawable[COLOR=#339933]-[/COLOR]ldpi[COLOR=#339933]/[/COLOR]icon.[COLOR=#006633]png[/COLOR]
res[COLOR=#339933]/[/COLOR]drawable[COLOR=#339933]-[/COLOR]mdpi[COLOR=#339933]/[/COLOR]icon.[COLOR=#006633]png[/COLOR]
res[COLOR=#339933]/[/COLOR]drawable[COLOR=#339933]-[/COLOR]xhdpi[COLOR=#339933]/[/COLOR]icon.[COLOR=#006633]png[/COLOR]
res[COLOR=#339933]/[/COLOR]drawable[COLOR=#339933]-[/COLOR]xxhdpi[COLOR=#339933]/[/COLOR]icon.[COLOR=#006633]png[/COLOR][/FONT]
[/FONT][/COLOR]

609.png

نکته :
هر فایل xml که برای یک دسته از گوشی ها با ((اندازه صفحه نمایش)) مشخص به کار می بریم، در واقع برای یک دسته از گوشی ها است که اندازه صفحه نمایش آنها، در یک بازه مشخص قرار می گیرد (اندازه آنها دقیقا یکسان نیست). بنابراین بهتر است عناصر به گونه ای تعریف شوند که در همین بازه نیز تغییرات چندانی نداشته باشیم.

نکته :

اگر برنامه اندروید خیلی به اندازه صفحه نمایش و رزولوشن وابسته است، روش هایی وجود دارد که با آنها می توان مقدار پیکسل های صفحه نمایش را به دست آورد و سپس بر اساس آنها، عناصر را در صفحه قرار داد. اما این روش، اصلا توصیه نمی شود و همان طور که گفتیم، تنها برای برخی برنامه اندروید با هدف های خاص می تواند کاربرد داشته باشد.

نکته :

علاوه بر مواردی که شرح داده شد، بد نیست تذکر بدهیم که ممکن است که شما مثلا در یک Activity ، مقداری متن به کاربر نمایش بدهید و حجم متن ها هم زیاد باشد. هنگامی که بر روی یک گوشی با صفحه نمایش بزرگ، برنامه را تست می کنید، کل متن در صفحه نمایش قابل دیدن می باشد، اما بر روی یک گوشی با صفحه نمایش کوچک، ممکن است که تنها بخش کوچکی از متن در کل صفحه نمایش قرار بگیرد و کاربر نتواند ادامه متن را بخواند. برای حل این مشکل، ساخت صفحات با قابلیت اسکرول به بالا و پایین توصیه می شود.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
غیرفعال کردن چرخش خودکار در برنامه اندروید، هنگام چرخاندن گوشی موبایل

غیرفعال کردن چرخش خودکار در برنامه اندروید، هنگام چرخاندن گوشی موبایل

غیرفعال کردن چرخش خودکار در برنامه اندروید، هنگام چرخاندن گوشی موبایل (برنامه اندروید یا یک Activity ، همیشه در حالت عمودی (portrait) یا حالت افقی (landscape) باشند) :


معمولا زمانی که کاربر، گوشی موبایل خود را می چرخاند، برنامه اندروید نیز به صورت خودکار، چرخیده و حالت عوض می کند (مگر اینکه کاربر این امکان را در گوشی موبایل خود از کار انداخته باشد). اما ممکن است که خود ما بخواهیم که تعیین کنیم، چرخش خودکار برنامه اندرویدی که می سازیم، غیرفعال باشد (برنامه اندروید نچرخد).

612.jpg



در برنامه eclipse ، ابتدا یک پروژه اندروید با نام Kelidestan بسازید (نام package را برابر com.example.kelidestan انتخاب کنید. نام activity اصلی را برابر Activity1 انتخاب کنید).

برای عدم چرخش برنامه اندروید، ابتدا فایل AndroidManiseft.xml را باز می کنیم. کدهای درون این فایل، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<?[/COLOR]xml version[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] encoding[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"utf-8"[/COLOR][COLOR=#339933]?>[/COLOR]
[COLOR=#339933]<[/COLOR]manifest xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
     [B]package[/B][COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.example.kelidestan"[/COLOR]
     android[COLOR=#339933]:[/COLOR]versionCode[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1"[/COLOR]
     android[COLOR=#339933]:[/COLOR]versionName[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] [COLOR=#339933]>[/COLOR]

     [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]sdk
         android[COLOR=#339933]:[/COLOR]minSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"8"[/COLOR]
         android[COLOR=#339933]:[/COLOR]targetSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"17"[/COLOR] [COLOR=#339933]/>[/COLOR]

     [COLOR=#339933]<[/COLOR]application
         android[COLOR=#339933]:[/COLOR]allowBackup[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"true"[/COLOR]
         android[COLOR=#339933]:[/COLOR]icon[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ic_launcher"[/COLOR]
         android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR]
         android[COLOR=#339933]:[/COLOR]theme[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@style/AppTheme"[/COLOR] [COLOR=#339933]>[/COLOR]
         [COLOR=#339933]<[/COLOR]activity
             android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.example.kelidestan.Activity1"[/COLOR]
             android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR] [COLOR=#339933]>[/COLOR]
             [COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
                 [COLOR=#339933]<[/COLOR]action android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.action.MAIN"[/COLOR] [COLOR=#339933]/>[/COLOR]

                 [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.LAUNCHER"[/COLOR] [COLOR=#339933]/>[/COLOR]
             [COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
         [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
     [COLOR=#339933]</[/COLOR]application[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]manifest[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
باید یکی از دو کد زیر را به کدهای نوشته شده برای activity اضافه کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]screenOrientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"landscape"[/COLOR]
android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"orientation|keyboardHidden"[/COLOR][/FONT]
[/FONT][/COLOR]
یا :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]screenOrientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"portrait"[/COLOR]
android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"orientation|keyboardHidden"[/COLOR][/FONT]
[/FONT][/COLOR]
هر یک از این دو کد، تعیین می کند که آن activity ، همیشه در حالت landscape نمایش داده شود یا اینکه همیشه در حالت portrait .

این بخش از کدها، قسمتی از کدهای activity است که می خواهیم آن را تغییر بدهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]activity
              android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.example.kelidestan.Activity1"[/COLOR]
              android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR] [COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
این کدها را به صورت زیر تغییر می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]activity
              android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.example.kelidestan.Activity1"[/COLOR]
              android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR]
              android[COLOR=#339933]:[/COLOR]screenOrientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"portrait"[/COLOR]
              android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"orientation|keyboardHidden"[/COLOR] [COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین، activity مورد نظر، همیشه به صورت portrait نمایش داده خواهد شد.

[h=2]ایجاد امکان چرخش 180 درجه ای :[/h]در مواردی که ذکر کردیم، چرخش 180 درجه ای امکان پذیر نمی باشد. چنانچه بخواهیم که چرخش 180 درجه ای نیز امکان پذیر باشد، باید برای حالت افقی (landscape)، کد زیر را بنویسیم (به جای landscape ، عبارت sensorLandscape نوشته می شود) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]screenOrientation[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"sensorLandscape"[/COLOR]
android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"orientation|keyboardHidden"[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
از دست نرفتن اطلاعات Activity هنگام چرخش صفحه نمایش (عدم restart شدن Activity)، در برنامه نویسی اندروید

از دست نرفتن اطلاعات Activity هنگام چرخش صفحه نمایش (عدم restart شدن Activity)، در برنامه نویسی اندروید

هنگامی که یک Activity در برنامه اندروید می سازیم، ممکن است که بر اساس انتخاب های کاربر، یک سری اطلاعات در آن تولید شود و بر اساس آن، ظاهر Activity تغییر داده شود. در چنین حالتی، اگر کاربر، موبایل را بچرخاند، صفحه نمایش می چرخد و این مورد، باعث restart شدن Activity می شود (روش onCreate دوباره اجرا می شود). این اتفاق، اصلا مطلوب نیست و کل روند فعل و انفعالی بین انتخاب های کاربر و Activity را خراب می کند و کاربر مجبور خواهد بود که دوباره روند قبلی را تکرار کند. برای رفع این مشکل، باید در برنامه اندروید، تعیین کنیم که هنگام چرخش صفحه نمایش، اطلاعات از دست نرود و Activity دوباره از اول اجرا نگردد. برای این منظور، در فایل AndroidManifest.xml ، به مشخصات Activity مورد نظرمان، مشخصه زیر را اضافه می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"keyboard|keyboardHidden|orientation"[/COLOR][/FONT]
[/FONT][/COLOR]
یعنی ابتدا تگ activity مربوط به آن Activity را پیدا می کنیم. مثلا فرض کنید Activity دارای نام Activity_2 باشد، بنابراین کدهای تگ مربوط به آن در فایل AndroidManifest.xml ، مشابه کد زیر می باشد (نام Activity_2 در مشخصه name ذکر شده است) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]activity
    android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com.Activity_2"[/COLOR]
    android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/title_activity_activity_2"[/COLOR] [COLOR=#339933]>[/COLOR]
[COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون کد ذکر شده را نیز به آن اضافه می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]activity
    android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com.Activity_2"[/COLOR]
    android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/title_activity_activity_2"[/COLOR]
    android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"keyboard|keyboardHidden|orientation"[/COLOR] [COLOR=#339933]>[/COLOR]
[COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
البته قبل از افزودن کد، بررسی کنید که قبلا مشخصه configChanges در تگ به کار رفته یا نه، اگر به کار رفته بود، باید تنها کد مربوط به آن را مطابق کدی که ذکر شد، بروزرسانی کنید (مقادیر آن مشخصه را مطابق مقادیر ذکر شده قرار بدهید).
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چرخاندن صفحه نمایش گوشی به حالت عمودی (portrait) یا حالت افقی (landscape)، با کدنویسی java ، در برنامه نویسی اندروید

چرخاندن صفحه نمایش گوشی به حالت عمودی (portrait) یا حالت افقی (landscape)، با کدنویسی java ، در برنامه نویسی اندروید

معمولا زمانی که کاربر، گوشی موبایل خود را می چرخاند، برنامه اندروید نیز به صورت خودکار، چرخیده و حالت عوض می کند (مگر اینکه کاربر این امکان را در گوشی موبایل خود از کار انداخته باشد). اکنون فرض کنید که خود ما بخواهیم که با یک سری کد (کد java) که در Activity می نویسیم، صفحه نمایش گوشی را چرخانده و به یکی از دو حالت عمودی (portrait) یا افقی (landscape) ببریم. برای این منظور، در ادامه، کدهایی را ذکر می کنیم.
دقت شود که این مورد، برای زمانی است که بخواهیم به طور ناگهانی، جهت صفحه نمایش را تغییر بدهیم، اما اگر قصد دارید که Activity همیشه در یکی از دو حالت عمودی (portrait) یا حالت افقی (landscape) نمایش داده شود، باید اموزش دوم این تاپیک را بخوانید.

984.jpg

برای اینکه Activity به حالت عمودی (portrait) برود، باید کدهای زیر را در میان کدهای Activity بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]setRequestedOrientation[COLOR=#009900]([/COLOR]ActivityInfo.[COLOR=#006633]SCREEN_ORIENTATION_PORTRAIT[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
برای اینکه Activity به حالت افقی (landscape) برود، باید کدهای زیر را در میان کدهای Activity بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]setRequestedOrientation[COLOR=#009900]([/COLOR]ActivityInfo.[COLOR=#006633]SCREEN_ORIENTATION_LANDSCAPE[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تعیین یک لایه گرافیکی متفاوت برای Activity ، هنگامی که گوشی در حالت افقی (landscape) قرار می گیرد، در برنامه نویسی اندروید

تعیین یک لایه گرافیکی متفاوت برای Activity ، هنگامی که گوشی در حالت افقی (landscape) قرار می گیرد، در برنامه نویسی اندروید

همان طور که می دانید کاربر می تواند در دو حالت عمودی (portrait) و افقی (landscape)، برنامه اندروید ساخته شده توسط شما را مشاهده نماید. اما ممکن است که شما بخواهید نحوه چینش عنصرهای لایه گرافیکی متناظر با Activity (یعنی فایل xml) را برای حالت افقی (landscape) تغییر بدهید. زیرا در حالت افقی (landscape)، ممکن است ظاهر خوشایندی نداشته باشند. برخی توسعه دهنگان، نحوه چیدمان در حالت افقی (landscape) را تنها با تغییر اندازه عناصر، تنظیم می کنند، اما برخی نیز، به طور کامل چیدمان عناصر را تغییر می دهند تا شکلی تازه و مناسبتر برای حالت افقی (landscape) داشته باشد.

بنابراین در این مبحث، شرح می دهیم که چگونه می توان چیدمان عناصر لایه گرافیکی را برای حالت افقی (landscape)، متفاوت با حالت عمودی (portrait) قرار داد. بد نیست این نکته را هم یادآوری کنیم که شما می توانید تعیین کنید که برنامه اندروید، همیشه در حالت افقی (landscape) یا همیشه در حالت عمودی (portrait) باشد و یا این مسئله می تواند تنها برای تعدادی از Activity های برنامه اندروید، اجرا شود. اما اگر قصد دارید که لایه های گرافیکی متفاوت برای این دو حالت تعیین کنید (و برنامه اندروید قرار است که در دو حالت نمایش داده شود)، ادامه این مبحث را بخوانید.همان طور که می دانید، ما برای اینکه لایه گرافیکی یک Activity ، در گوشی های با ((اندازه صفحه نمایش متفاوت))، به طور یکسان نمایش داده شود، برای 4 دسته گوشی که بر اساس اندازه صفحه نمایش، در 4 دسته قرار گرفته اند، 4 پوشه می سازیم و در هر پوشه، یک فایل xml برای لایه گرافیکی Activity قرار می دهیم (نام همه فایل های xml یکسان است):
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]small[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]large[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]xlarge[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR][/FONT]
[/FONT][/COLOR]
این فایل های xml (هر کدام برای یک دسته)، هم در حالت عمودی (portrait) به کار می روند و هم در حالت افقی (landscape). اکنون اگر بخواهیم که ظاهر گرافیکی (فایل xml)این دو حالت، متفاوت باشند، 4 پوشه دیگر نیز می سازیم و اکنون 8 پوشه خواهیم داشت (نام پوشه ها باید حتما همین نام ها باشد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]small[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]large[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]xlarge[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]small[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]large[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR]  
res[COLOR=#339933]/[/COLOR]layout[COLOR=#339933]-[/COLOR]xlarge[COLOR=#339933]-[/COLOR]land[COLOR=#339933]/[/COLOR]layout.[COLOR=#006633]xml[/COLOR][/FONT]
[/FONT][/COLOR]
4 پوشه جدید، دارای پسوند land می باشند که از ابتدای کلمه landscape گرفته شده است و بیان می کند که این پوشه ها، مربوط به حالت افقی (landscape) می باشند. بنابراین آن 4 پوشه هم که دارای پسوندی نیستند، تنها برای حالت عمودی (portrait) به کار خواهند رفت.

بنابراین برای لایه گرافیکی Activity ، در هر کدام از پوشه ها، یک فایل xml قرار می دهیم (مثلا ابتدا یکی ساخته و سپس آن را در بقیه کپی کنید). معمولا توسعه دهنده ها، ابتدا برای یک دسته (معمولا در پوشه layout که پیش فرض است)، یک فایل xml می سازند و تمامی عناصر آن را طراحی می کنند و عملکرد کدهای java مربوط به Activity را هم تست می کنند و در آخر که خیالشان از همه چیز راحت شد، فایل xml را در بقیه پوشه ها کپی کرده و سپس آنها را تک تک باز می کنند و از طریق برنامه eclipse که این امکان را می دهد که ظاهر گرافیکی فایل xml را ببینیم، نحوه چیدمان عنصرها را تنظیم می کنند.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن ابعاد صفحه نمایش گوشی، بر حسب پیکسل (Pixel)، در برنامه نویسی اندروید

به دست آوردن ابعاد صفحه نمایش گوشی، بر حسب پیکسل (Pixel)، در برنامه نویسی اندروید

برای به دست آوردن ابعاد صفحه نمایش گوشی، بر حسب پیکسل (Pixel)، در ادامه سه روش بیان می شود.

[h=2]روش اول :[/h]کد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Display display [COLOR=#339933]=[/COLOR] getWindowManager[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getDefaultDisplay[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
DisplayMetrics outMetrics [COLOR=#339933]=[/COLOR] [B]new[/B] DisplayMetrics [COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
display.[COLOR=#006633]getMetrics[/COLOR][COLOR=#009900]([/COLOR]outMetrics[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#000066][B]float[/B][/COLOR] height [COLOR=#339933]=[/COLOR] outMetrics.[COLOR=#006633]heightPixels[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#000066][B]float[/B][/COLOR] width  [COLOR=#339933]=[/COLOR] outMetrics.[COLOR=#006633]widthPixels[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
ارتفاع صفحه نمایش، بر اساس تعداد پیکسل، در متغیر height و عرض صفحه نمایش، بر اساس تعداد پیکسل، در متغیر width ذخیره شده است.

[h=2]روش دوم : تنها برای نسخه های API بالاتر از 13[/h]این کد تنها برای نسخه های API بالاتر از 13 به کار می رود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Display display [COLOR=#339933]=[/COLOR] getWindowManager[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getDefaultDisplay[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]Point[/COLOR] size [COLOR=#339933]=[/COLOR] [B]new[/B] [COLOR=#003399]Point[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
display.[COLOR=#006633]getSize[/COLOR][COLOR=#009900]([/COLOR]size[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#000066][B]int[/B][/COLOR] width [COLOR=#339933]=[/COLOR] size.[COLOR=#006633]x[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#000066][B]int[/B][/COLOR] height [COLOR=#339933]=[/COLOR] size.[COLOR=#006633]y[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
ارتفاع صفحه نمایش، بر اساس تعداد پیکسل، در متغیر height و عرض صفحه نمایش، بر اساس تعداد پیکسل، در متغیر width ذخیره شده است.

[h=2]روش سوم :[/h]کد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Display display [COLOR=#339933]=[/COLOR] getWindowManager[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getDefaultDisplay[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] 
[COLOR=#000066][B]int[/B][/COLOR] width [COLOR=#339933]=[/COLOR] display.[COLOR=#006633]getWidth[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]  [COLOR=#666666][I]// deprecated[/I][/COLOR]
[COLOR=#000066][B]int[/B][/COLOR] height [COLOR=#339933]=[/COLOR] display.[COLOR=#006633]getHeight[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]  [COLOR=#666666][I]// deprecated[/I][/COLOR][/FONT]
[/FONT][/COLOR]
البته توصیه شده است که از دو روش getWidth و getHeight استفاده نشود (deprecated).

ارتفاع صفحه نمایش، بر اساس تعداد پیکسل، در متغیر height و عرض صفحه نمایش، بر اساس تعداد پیکسل، در متغیر width ذخیره شده است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن جهت صفحه نمایش گوشی، سپس اجرای یک سری کد بر اساس یکی از آن دو حالت، در برنامه نویسی اندروید

به دست آوردن جهت صفحه نمایش گوشی، سپس اجرای یک سری کد بر اساس یکی از آن دو حالت، در برنامه نویسی اندروید

به دست آوردن جهت صفحه نمایش گوشی (بودن صفحه نمایش گوشی در حالت عمودی (portrait) یا در حالت افقی (landscape))، سپس اجرای یک سری کد بر اساس یکی از آن دو حالت، در برنامه نویسی اندروید :


فرض کنید بخواهیم جهت صفحه نمایش گوشی را به دست آوریم و سپس بر اساس اینکه گوشی در حالت عمودی (portrait) یا حالت افقی (landscape) باشد، یک سری کد را اجرا نماییم :

برای این منور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000066][B]int[/B][/COLOR] portrait_or_landscape [COLOR=#339933]=[/COLOR] getResources[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]getConfiguration[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]orientation[/COLOR][COLOR=#339933];[/COLOR]
[B]if[/B][COLOR=#009900]([/COLOR]portrait_or_landscape[COLOR=#339933]==[/COLOR][COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR] [COLOR=#666666][I]// portrait[/I][/COLOR]
    Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], [COLOR=#0000FF]"portrait"[/COLOR], Toast.[COLOR=#006633]LENGTH_SHORT[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#666666][I]// some code for ((portrait))[/I][/COLOR]
[COLOR=#009900]}[/COLOR][B]else[/B][COLOR=#009900]{[/COLOR] [COLOR=#666666][I]// landscape[/I][/COLOR]
    Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR]getApplicationContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], [COLOR=#0000FF]"landscape"[/COLOR], Toast.[COLOR=#006633]LENGTH_SHORT[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#666666][I]// some code for ((landscape))[/I][/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
با کدنیسی فوق، می توانیم دو سری کد داشته باشیم، یکی هنگامی اجرا می شود که صفحه نمایش در حالت عمودی (portrait) باشد و دیگری هم زمانی اجرا می گردد که صفحه نمایش در حالت افقی (landscape) باشد.

[h=4]نکته :[/h]در مبحثی دیگر شرح دادیم که چگونه تعیین کنیم که هنگام چرخش صفحه نمایش گوشی، Activity دوباره از ابتدا اجرا نشود، بنابراین اگر قصد دارید که از کد بالا استفاده کنید، به این موارد نیز توجه داشته باشید و ببینید که این مورد چگونه تعیین شده است. یا اصلا ممکن است که چرخش صفحه نمایش را غیر فعال کرده باشیم. در کل، هر زمان که در مورد چرخش صفحه نمایش گوشی، کدنویسی می کنید، این موارد را هم چک کنید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
روشن ماندن صفحه نمایش گوشی برای همیشه (جلوگیری از خاموش شدن صفحه نمایش)، در برنامه نویسی اندروید

روشن ماندن صفحه نمایش گوشی برای همیشه (جلوگیری از خاموش شدن صفحه نمایش)، در برنامه نویسی اندروید

همان طور که می دانید، بر اساس تنظیمات گوشی، چنانچه کاربر در یک مدت مشخص، با گوشی کار نکند، صفحه نمایش خاموش می شود. بنابراین بهتر است که در برنامه اندروید، از خاموش شدن صفحه نمایش جلوگیری کنیم. برای این منظور، می توانیم کد زیر را اجرا کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]getWindow[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]addFlags[/COLOR][COLOR=#009900]([/COLOR]WindowManager.[COLOR=#006633]LayoutParams[/COLOR].[COLOR=#006633]FLAG_KEEP_SCREEN_ON[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
مثلا می توانیم کد بالا را بعد از روش setContentView که با آن، لایه گرافیکی (فایل xml) متناظر با Activity را تعیین می کنیم، بنویسیم (این یک پیشنهاد است). مثل کد زیر برای یک Activity دلخواه :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]package[/B] [COLOR=#006699]com.www.www.iran-eng.ir[/COLOR][COLOR=#339933];[/COLOR]

[B]import[/B] [COLOR=#006699]android.app.Activity[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.os.Bundle[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.View.OnClickListener[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.view.WindowManager[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Button[/COLOR][COLOR=#339933];[/COLOR]
[B]import[/B] [COLOR=#006699]android.widget.Toast[/COLOR][COLOR=#339933];[/COLOR]

[B]public[/B] [B]class[/B] MainActivity [B]extends[/B] Activity [COLOR=#009900]{[/COLOR]

    @Override
    [B]protected[/B] [COLOR=#000066][B]void[/B][/COLOR] onCreate[COLOR=#009900]([/COLOR]Bundle savedInstanceState[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [B]super[/B].[COLOR=#006633]onCreate[/COLOR][COLOR=#009900]([/COLOR]savedInstanceState[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        setContentView[COLOR=#009900]([/COLOR]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]activity_main[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
        getWindow[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]addFlags[/COLOR][COLOR=#009900]([/COLOR]WindowManager.[COLOR=#006633]LayoutParams[/COLOR].[COLOR=#006633]FLAG_KEEP_SCREEN_ON[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
                
        [COLOR=#666666][I]// some codes[/I][/COLOR]
    [COLOR=#009900]}[/COLOR]
        
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
نکته :

هنگام آزمایش کردن کدها، بهتر است که ابتدا تنظیمات گوشی خود برای مدت زمان روشن ماندن صفحه نمایش را به یک مقدار اندک تغییر بدهید (در غیر این صورت، نمی توانید عملکرد صحیح کدها را مشاهده کنید). برای این منظور، به بخش تنظیمات گوشی خود بروید و گزینه Display را یافته و بر روی آن اشاره کنید :

1262.jpg
سپس در صفحه ای که نمایش داده می شود، بر روی گزینه Screen timeout اشاره کنید :

1263.jpg



در صفحه بعدی، مدت زمان اندکی را انتخاب کنید :

1264.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرای یک سری کد، هنگام چرخش صفحه نمایش گوشی، با استفاده از روش onConfigurationChanged ، در برنامه نویسی اندروید

اجرای یک سری کد، هنگام چرخش صفحه نمایش گوشی، با استفاده از روش onConfigurationChanged ، در برنامه نویسی اندروید

فرض کنید که قصد داریم هنگام چرخش صفحه نمایش گوشی، یک سری کد اجرا شود. برای این منظور، ابتدا تگ مربوط به Activity را در فایل AndroidManifest.xml پیدا کرده و مشخصه زیر را به آن اضافه می کنیم (یا اگر قبلا این مشخصه برای آن ذکر شده، چک می کنیم که به صورت زیر باشد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"orientation|keyboardHidden|screenSize"[/COLOR][/FONT]
[/FONT][/COLOR]
اگر ویژگی فوق به صورت دیگری تعریف شده باشد، ممکن است که روش onConfigurationChanged ، هنگام چرخش صفحه نمایش گوشی، اجرا نشود و بنابراین کدهای مورد نظر ما هم اجرا نخواهند شد.

سپس در کدهای Activity ، روش onConfigurationChanged را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onConfigurationChanged[COLOR=#009900]([/COLOR]Configuration newConfig[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
   [B]super[/B].[COLOR=#006633]onConfigurationChanged[/COLOR][COLOR=#009900]([/COLOR]newConfig[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
   
   [COLOR=#666666][I]// your code[/I][/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
به جای عبارت
your code //​
باید کدهایی را بنویسید که قصد دارید هنگام چرخش صفحه نمایش گوشی، اجرا شوند.

[h=4]نکته مهم :[/h]همان طور که می دانید، در اندروید، به صورت پیش فرض، وقتی صفحه نمایش می چرخد، Activity دوباره از اول اجرا می شود (Restart می شود). اما با عبارتی که ما در کدهای قبل، برای مشخصه configChanges از تگ Activity تعیین کردیم، دیگر Restart شدن Activity را نخواهیم داشت، بنابراین هنگام چرخش، اطلاعات Activity نگه داشته می شود. چنانچه قصد دارید که با چرخش صفحه نمایش گوشی، حتما Activity از ابتدا اجرا شود (Restart شود)، باید کدهایی که در Activity می نویسیم، به صورت زیر باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onConfigurationChanged[COLOR=#009900]([/COLOR]Configuration newConfig[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
   [B]super[/B].[COLOR=#006633]onConfigurationChanged[/COLOR][COLOR=#009900]([/COLOR]newConfig[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
   
   [COLOR=#666666][I]// your code[/I][/COLOR]
   
   [COLOR=#666666][I]// Restart Activity[/I][/COLOR]
   Intent intent [COLOR=#339933]=[/COLOR] getIntent[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
   startActivityForResult[COLOR=#009900]([/COLOR]intent, [COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]

@Override
[B]protected[/B] [COLOR=#000066][B]void[/B][/COLOR] onActivityResult[COLOR=#009900]([/COLOR][COLOR=#000066][B]int[/B][/COLOR] requestCode, [COLOR=#000066][B]int[/B][/COLOR] resultCode, Intent data[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]  
    [B]super[/B].[COLOR=#006633]onActivityResult[/COLOR][COLOR=#009900]([/COLOR]requestCode, resultCode, data[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]     

    [B]if[/B][COLOR=#009900]([/COLOR]requestCode [COLOR=#339933]==[/COLOR] [COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// restart the activity[/I][/COLOR]
        finish[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
در واقع با کد بالا، در روش onConfigurationChanged ، کدهایی برای Restart شدن Activity اجرا کرده ایم.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
Restart کردن Activity ، هنگام چرخش صفحه نمایش گوشی، در برنامه نویسی اندروید

Restart کردن Activity ، هنگام چرخش صفحه نمایش گوشی، در برنامه نویسی اندروید

اگرچه حالت پیش فرض اندروید این است که با چرخش صفحه نمایش گوشی، Activity از ابتدا اجرا شود (Restart شود)، اما گاهی به دلیل کدنویسی های مختلف، ممکن است که این حالت را دیگر نداشته باشیم. بنابراین در ادامه، نکات لازم برای Restart کردن Activity ، هنگام چرخش صفحه نمایش گوشی را شرح می دهیم. همچنین روشی را هم ذکر می کنیم که این امکان را می دهد که قبل از Restart شدن Activity ، کدهای دلخواه دیگری را هم اجرا نماییم.

[h=2]1- استفاده از حالت پیش فرض :[/h]همان طور که تذکر دادیم، حالت پیش فرض اندروید این است که با چرخش صفحه نمایش گوشی، Activity از ابتدا اجرا شود (Restart شود). اما موردی که می تواند این حالت را تغییر دهد، استفاده از یک سری ویژگی برای مشخصه configChanges از تگ Activity در فایل AndroidManifest.xml می باشد.

به عنوان یک مثال، فرض کنید که تگ مربوط به Activity را در فایل AndroidManifest.xml پیدا کرده و مشخصه زیر را به آن اضافه می کنیم (یا اگر قبلا این مشخصه برای آن ذکر شده، چک می کنیم که به صورت زیر باشد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"orientation|keyboardHidden|screenSize"[/COLOR][/FONT]
[/FONT][/COLOR]
این مورد باعث می شود که هنگام چرخش گوشی، Activity اطلاعات خود (حالت فعلی خود) را حفظ کند و Restart نشود. بنابراین برای Restart شدن Activity هنگام چرخش گوشی، باید این مشخصه به درستی تعیین شده باشد (یا اینکه کامل آن را حذف کنیم).

[h=2]2- استفاده از روش onConfigurationChanged :[/h]برای Restart شدن Activity در هنگام چرخش صفحه نمایش گوشی، مراحل زیر را اجرا می کنیم (این روش به ما این امکان را می دهد که قبل از Restart شدن Activity ، کدهای دلخواه دیگری را هم اجرا کنیم):

فرض کنید که قصد داریم هنگام چرخش صفحه نمایش گوشی، یک سری کد اجرا شود. برای این منظور، ابتدا تگ مربوط به Activity را در فایل AndroidManifest.xml پیدا کرده و مشخصه زیر را به آن اضافه می کنیم (یا اگر قبلا این مشخصه برای آن ذکر شده، چک می کنیم که به صورت زیر باشد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]android[COLOR=#339933]:[/COLOR]configChanges[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"orientation|keyboardHidden|screenSize"[/COLOR][/FONT]
[/FONT][/COLOR]
در اندروید، به صورت پیش فرض، وقتی صفحه نمایش می چرخد، Activity دوباره از اول اجرا می شود (Restart می شود). اما با عبارتی که ما در کدهای قبل، برای مشخصه configChanges از تگ Activity تعیین کردیم، دیگر Restart شدن Activity را نخواهیم داشت، بنابراین هنگام چرخش، اطلاعات Activity نگه داشته می شود. چون می خواهیم که با چرخش صفحه نمایش گوشی، حتما Activity از ابتدا اجرا شود (Restart شود)، باید کدهایی که در Activity می نویسیم، به صورت زیر باشد:
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onConfigurationChanged[COLOR=#009900]([/COLOR]Configuration newConfig[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
   [B]super[/B].[COLOR=#006633]onConfigurationChanged[/COLOR][COLOR=#009900]([/COLOR]newConfig[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
   
   [COLOR=#666666][I]// your code[/I][/COLOR]
   
   [COLOR=#666666][I]// Restart Activity[/I][/COLOR]
   Intent intent [COLOR=#339933]=[/COLOR] getIntent[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
   startActivityForResult[COLOR=#009900]([/COLOR]intent, [COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR]

@Override
[B]protected[/B] [COLOR=#000066][B]void[/B][/COLOR] onActivityResult[COLOR=#009900]([/COLOR][COLOR=#000066][B]int[/B][/COLOR] requestCode, [COLOR=#000066][B]int[/B][/COLOR] resultCode, Intent data[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]  
    [B]super[/B].[COLOR=#006633]onActivityResult[/COLOR][COLOR=#009900]([/COLOR]requestCode, resultCode, data[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]     

    [B]if[/B][COLOR=#009900]([/COLOR]requestCode [COLOR=#339933]==[/COLOR] [COLOR=#CC66CC]1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// restart the activity[/I][/COLOR]
        finish[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
در واقع با کد بالا، در روش onConfigurationChanged ، کدهایی برای Restart شدن Activity اجرا کرده ایم.

به جای عبارت
your code //​
باید کدهایی را بنویسید که قصد دارید هنگام چرخش صفحه نمایش گوشی، اجرا شوند (قبل از Restart شدن Activity).
 
بالا