1156 نیروی متخصص آماده کـار برای شمـا هستند
حالا پروژه خود را ایجاد کنید
تعداد طراحان اندروید 1027
تعداد نرم افزار های اندروید 0
تعداد طراحان آی او اس 1007
تعداد نرم افزارهای آی او اس 0
آخرین اخبار سایت
اجزای یک صفحه در اندروید

اجزای یک صفحه در اندروید

پایه ای ترین جز از اجزای یک برنامه اندرویدی اکتیویتی است که رابط کاربری برنامه را نشان می دهد و میتواند اجزایی مانند  Buttonها, Lable ها, textBox ها,... را شامل شود.معمولاً رابط کاربری را در یک فایل XML مثل main.xml که در پوشه ی res/layout قرار دارد تعریف می کنند.مانند کدهای زیر:

<?”xml version=”1.0” encoding=”utf-8?>
”LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android>
”android:orientation=”vertical  
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
<
TextView> 
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”@string/hello  
</
<LinearLayout/>

 

رابط کاربری XML را در زمان اجرا در متد رویداد ()onCreate کلاس Activity با استفاده از متد ()setContentView باید بارگذاری کرد:

Override@
} (public void onCreate(Bundle savedInstanceState  
;(super.onCreate(savedInstanceState    
;(setContentView(R.layout.main      
{  

 

 هنگامی که برنامه کامپایل می شود هر کدام از عناصر موجود در فایل XML به یکی از کلاس های GUI اندروید به همراه خصوصیاتی که بوسیله ی متدها تنظیم شده,کامپایل می شود زمانی که اکتیویتی بارگذاری می گردد ، سیستم اندروید رابط کاربری را ایجاد می کند.

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

یک اکتیویتی دارای View ها و گروه های ابزاری نمایش می باشد.یک View ویجتی است که روی صفحه قرار دارد. Button ها, Lable ها, TextBox ها را می توان نمونه هایی از این ویجت نام برد.یک View از کلاس پایه ی android.view.View گرفته شده. یک یا چند View  را می توان با هم در یک گروه ابزار نمایش قرار داد.یک گروه ابزار که خود نوعی از View هاست، فضایی را جهت چینش و مرتب سازی View ها فراهم می کند.به عنوان مثال یک گروه ابزاری شامل LinearLayout و FrameLayout ها هستند.یک گروه ابزار نمایش از کلاس پایه ی android.view.ViewGroup گرفته شده است.اندروید از گروه ابزار نمایش زیر پشتیبانی می کند:

  • LinearLayout
  • AbsoluteLayout
  • TableLayout
  • RelativeLayout
  • FrameLayout
  • ScrollView

 رابط کاربری را میتوان از تلفیق چند گروه ابزاری ایجاد کرد.

LinearLayout

LinearLayout ها وظیفه ی چینش View ها در یک ردیف یا یک ستون را برعهده دارند.ابزار های نمایش به عنوان فرزند در LinearLayout به صورت افقی یا عمودی چیده می شوند.

تغییرات زیر را در فایل main.xml اعمال کنید تا ببینید LinearLayout ها به چه صورتی کار می کنند:

<?”xml version=”1.0” encoding=”utf-8?>
LinearLayout>
”xmlns:android=”http://schemas.android.com/apk/res/android 
”android:orientation=”vertical  
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
<
TextView>
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”@string/hello  
</  
<LinearLayout/>

 

در فایل main.xml می توان مشاهده کرد که عنصر ریشه <LinearLayout> است وعنصر<TextView> درون آن قرار دارد.عنصر <LinearLayout> اولویت نمایش ابزارهای نمایشی درون آن را کنترل می کند.هر ابزار نمایش یا گروه ابزارها یکسری خصوصیات عمومی  دارند که شرح آن ها به قرار زیر است:

layout_width  : مشخص کردن عرض ابزار نمایش یا ViewGroup .

layout_height : مشخص کردن طول ابزار نمایش یا ViewGroup .

layout_marginTop : مشخص کردن فضای اضافه ی لبه ی بالای ابزار نمایش یا ViewGroup.

layout_matginBottom : مشخص کردن فضای اضافه ی لبه ی پایین ابزار نمایش یا ViewGroup.

layout_marginLeft : مشخص کردن فضای اضافه ی لبه ی سمت چپ ابزار نمایش یا ViewGroup .

layout_marginRight : مشخص کردن فضای اضافه ی لبه ی سمت راست ابزار نمایش یا ViewGroup .

 layout_gravity : مشخص کردن چگونگی قرارگیری ابزارهای نمایشی فرزند.

layout_weight : نشان دهنده ی فضای اضافی که می تواند به ابزار نمایش اختصاص یابد.

layout_x : مشخص کردن جهت افقی ابزار نمایش یا گروه ابزار.

layout_y : مشخص کردن جهت عمودی ابزار نمایش یا گروه ابزار.

کاربرد بعضی از این خصوصیات تنها زمانیست که ابزار نمایش در گروه ابزار خاصی قرار گیرد.به عنوان مثال خصوصیات layout_weight و layout_gravity فقط وقتی کاربرد دارند که یک ابزار نمایش در LinearLayout یا TableLayout قرار گرفته باشد.

 برای مثال عرض عنصر <TextView> با استفاده از ثابت fill_parent تمام عرض والد خود یا صفحه نمایش را پر می کند.ارتفاع آن به وسیله ی wrap_content مشخص می شود و به این معنی است که ارتفاع این عنصر به اندازه ی ارتفاع محتویات آن یا ارتفاع متن است.اگر نمی خواهید که <TextView> تمام ردیف را اشغال کند,میتوانید خصوصیت layout_width را برابر wrap_content قرار دهید  با استفاده از کد زیر,عرض View به اندازه ی عرض متن موجود در آن تنظیم می شود:

 TextView>
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”@string/hello  
</

 

به کد زیر توجه کنید:

<?”xml version=”1.0” encoding=”utf-8?>
”LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android>
”android:orientation=”vertical  
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
<
TextView>
”android:layout_width=”105dp  
”android:layout_height=”wrap_content  
”android:text=”@string/hello  
</
Button>
”android:layout_width=”160dp  
”android:layout_height=”wrap_content  
”android:text=”Button  
</
<LinearLayout/>

 

 در اینجا به وسیله ی مقادیر مطلق طول هردو عنصر TextView و Button را تنظیم کردیم.در این مثال عرض TextView معادل 100dp و عرض Button معادل 160dp قرار داده شده است.

واحدهای اندازه گیری

برای مشخص کردن اندازه ی عناصر رابط کاربری باید با واحد های اندازه گیری آشنا باشید.

  • Density-independent pixel -- dp : :یک dp یک پیکسل در صفحه نمایش 160dpi است .این واحد اندازه گیری  برای تنظیم رابط کاربری مناسب است.صفحه نمایش 160dpi حالت پایه و پیشفرض برای اندروید است.برای نشان دادن واحد اندازه گیری می توانید از dp یا dpi استفاده کنید.
  • Scale-independent pixel --sp :مشابه dp است و کارایی آن در تعیین اندازه فونت هاست.
  • Point -- pt :یک واحد پوینت 1.72 اینچ است.که بر مبنای اندازه ی فیزیکی صفحه به دست می آید.
  • Pixel -- px : بستگی دارد به اندازه ی پیکسل در صفحه نمایش.از آن جاییکه  ممکن است در دستگاه های مختلف با رزولوشن های مختلف اجرا نشود، استفاده از این واحد اندازه گیری توصیه نمی شود.

چگالی صفحه نمایش بستگی به اندازه ی صفحه و رزولوشن آن دارد. در اندروید چگالی صفحه نمایش ها به چند دسته زیر تقسیم شده اند:

  • 120dpi --Low density             ldpi
  • 160dpi -- Medium density           mdpi
  • 240dpi -- High density            hdpi
  • 320dpi -- Extra High density           xhdpi

هر دستگاهی در یکی از این دسته بندی ها قرار می گیرد.برای مثال Nexus s در دسته ی hdpi قرار دارد چون چگالی آن نزدیک به 240 است.دستگاه HTC Hero دارای یک صفحه نمایش 3.2 اینچی با رزولوشن 320 در 480 است که حدوداً با چگالی 180dpi کار می کند.این دستگاه در دسته ی mdpi قرار می گیرد چون چگالی آن نزدیک به 160dpi است.

تبدیل کردن DP به PX

فرمول تبدیل dp به px به صورت زیر است:

(Actual Pixel = dp*(dpi/160

 

که در آن dpi برابر است با 120 یا 160 یا 240 یا 320 .برای پیدا کردن مقدار پیکسلی viewها از متد ()getWidth و شئ view استفاده می شود:

(public void onClick(View view
   ;()Toast.makeText(this, String.valueOf(view,getWidth()), Toast.LENGTH_LONG).show

 

AbsoluteLayout

با AbsoluteLayout شما این توانایی را دارید که محل قطعی فرزندش را به صورت دقیق مشخص کنید.فایل main.xml را به صورت زیر تغییر دهید:

<?”xml version=”1.0” encoding=”utf-8?>
AbsoluteLayout>
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android  
< 
Button>
”android:layout_width=”188dp  
”android:layout_height=”wrap_content  
”android:text=”Button  
”android:layout_x=”126px  
”android:layout_y=”361px  
</
Button>
”android:layout_width=”113dp  
”android:layout_height=”wrap_content  
”android:text=”Button  
”android:layout_x=”12px  
”android:layout_y=”361px  
</
<AbsoluteLayout/>

 

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

TableLayout

ابزارهای نمایش را TableLayout در ستون و ردیف دسته بندی می کند.از عنصر <TableRow> برای ایجاد یک ردیف در جدول استفاده می شود.هر ردیف می تواند یک یا چند view داشته باشد.هر view که در یک ردیف قرار می گیرد ، به شکل یک سلول در می آید.اندازه ی عرض هر ستون به اندازه ی بزرگترین سلول موجود در آن ستون است.فرض کنید فایل main.xml به صورت زیر باشد:

<?”xml version=”1.0” encoding=”utf-8?>
TableLayout>
”xmlns:android=”http://schemas.android.com/apk/res/android
”android:layout_height=”fill_parent  
”android:layout_width=”fill_parent  
<
<TableRow>
TextView>
”:android:text=”User Name  
”android:width =”120px  
</
EditText>
”android:id=”@+id/txtUserName 
</ ”android:width=”200px 
<TableRow/>
<TableRow> 
TextView> 
”:android:text=”Password  
</
EditText>
”android:id=”@+id/txtPassword  
”android:password=”true  
</
<TableRow/>
<TableRow>
< /TextView>
”CheckBox android:id=”@+id/chkRememberPassword>
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Remember Password  
</
<TableRow/>
<TableRow>
Button>
android:id=”@+id/buttonSignIn 
</ ”android:text=”Log In 
<TableRow/>
<TableLayout/>

 

در کد بالا ، دو ستون و 4 ردیف در TableLayout قرار دارد.سلولی که در زیر TextView پسوورد است به وسیله ی یک عنصر خالی <TextView/> ایجاد شده است.اگر به این شکل عمل نکنید checkBox در زیر TextView قرار میگیرد.

RelativeLayout

این توانایی را در اختیار شما قرار میدهد که چینش اجزا, وابسته به چینش یکیدیگر باشند.

فرض کنید که فایل main.xml به صورت زیر باشد:

<?”xml version=”1.0” encoding=”utf-8?>
RelativeLayout>
”android:id=”@+id/RLayout  
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android  
<
TextView>
”android:id=”@+id/lblComments  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Comments  
”android:layout_alignParentTop=”true  
”android:layout_alignParentLeft=”true  
</
EditText>
”android:id=”@+id/txtComments  
”android:layout_width=”fill_parent  
”android:layout_height=”170px  
”android:textSize=”18sp  
”android:layout_alignLeft=”@+id/lblComments  
”android:layout_below=”@+id/lblComments  
”android:layout_centerHorizontal=”true  
</
Button>
”android:id=”@+id/btnSave  
”android:layout_width=”125px  
”android:layout_height=”wrap_content  
”android:text=”Save  
”android:layout_below=”@+id/txtComments  
”android:layout_alignRight=”@+id/txtComments  
</
Button>
”android:id=”@+id/btnCancel  
”android:layout_width=”124px  
”android:layout_height=”wrap_content  
”android:text=”Cancel  
”android:layout_below=”@+id/txtComments  
”android:layout_alignLeft=”@+id/txtComments  
</
<RelativeLayout/>

 

view که در RelativeLayout قرار دارد و با خصوصیاتی که دارد به شما اجازه می دهد محل قرارگیری آن را با view دیگری تنظیم کنید.خصوصیات زیر از جکله این خصوصیات است:

  • layout_alignParentTop
  • layout_alignParentLeft
  • layout_alignLeft
  • layout_alignRight
  • layout_below
  • layout_centerHorizontal

مقداری که برای هر کدام از این خصوصیات می توان در نظر گرفت,ID آن view است که می خواهیم به آن اشاره شود.

FrameLayout

محلی برای قرار دادن تنها یک view می باشد.viewهایی که به FrameLayout اضافه می شوند,همیشه به سمت چپ و بالای صفحه شما می چسبند.فرض کنید فایل main.xml به صورت زیر باشد.

<?”xml version=”1.0” encoding=”utf-8?>
RelativeLayout>
”android:id=”@+id/RLayout  
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android  
<
TextView>
”android:id=”@+id/lblComments  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”This is my lovely dog, Ookii  
”android:layout_alignParentTop=”true  
”android:layout_alignParentLeft=”true  
</
FrameLayout>
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:layout_alignLeft=”@+id/lblComments  
”android:layout_below=”@+id/lblComments  
”android:layout_centerHorizontal=”true  
<
ImageView>
”android:src = “@drawable/ookii  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
</
<FrameLayout/>
<RelativeLayout/>

 

در این کدها یک FreamLayout در میان یک RelativeLayout وجود دارد.درون FrameLayout یک ImageView قرار دارد.

اگر یک view دیگر در FrameLayout اضافه کنید(مثل یک Button) ,بر روی view قبلی قرار می گیرد.

<?”xml version=”1.0” encoding=”utf-8?>
RelativeLayout>
”android:id=”@+id/RLayout  
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android  
<
TextView>
”android:id=”@+id/lblComments  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”This is my lovely dog, Ookii  
”android:layout_alignParentTop=”true  
”android:layout_alignParentLeft=”true  
</
FrameLayout>
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:layout_alignLeft=”@+id/lblComments  
”android:layout_below=”@+id/lblComments  
”android:layout_centerHorizontal=”true  
<
ImageView>
”android:src = “@drawable/ookii  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
</
Button>
”android:layout_width=”124dp  
”android:layout_height=”wrap_content  
”android:text=”Print Picture  
</
<FrameLayout/>
<RelativeLayout/>

 

می توانید چندین view به FrameLayout اضافه کنید، اما هر کدام از آنها بر روی قبلی قرار می گیرند.با این روش می توانید یک انیمیشن ایجاد کنید و در هر لحظه یکی از view ها را نمایش دهید.

ScrollView

یک نوعی از FrameLayout است.چون به کاربر اجازه می دهد تا میان لیستی از ابزار های نمایش که تمام فضای فیزیکی صفحه را اشغال کرده اند,پیمایش کند.ScrollView تنها می تواندیک فرزند view یا ViewGroup داشته باشد که معمولاً از LineearLayout استفاده می شود.

در زیر یک ScrollView را در فایل main.xml نشان داده ایم که حاوی یک LinearLayout است کع آن هم شامل Button و EditText می باشد:

<?”xml version=”1.0” encoding=”utf-8?>
ScrollView>
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android  
<
LinearLayout>
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:orientation=”vertical  
<
Button>
”android:id=”@+id/button1  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Button 1  
</
Button>
”android:id=”@+id/button2  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Button 2  
</
Button>
”android:id=”@+id/button3  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Button 3  
</
EditText>
”android:id=”@+id/txt  
”android:layout_width=”fill_parent  
”android:layout_height=”300px  
</
Button>
”android:id=”@+id/button4  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Button 4  
</
Button>
”android:id=”@+id/button5  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Button 5  
</
<LinearLayout/>
<ScrollView/>

 

از آنجا که EditText به صورت خودکار فوکوس دارد,کل اکتیویتی را پر می کند.برای جلوگیری از فوکوس اتوماتیک آن خصوصیات زیر را به <LinearLayout> اضافه کنید:

LinearLayout>
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:orientation=”vertical  
”android:focusable="true    
”android:focusableInTouchMode="true 

<

 در مواقعی نیاز است تا EditText به صورت خودکار انتخاب شود.اما شما نیازی نمی بینید تا صفحه کلید به صورت خودکار نمایش داده شود.برای جلوگیری از نمایش صفحه کلید خصوصیات زیر را به عنصر <activity> در فایل AndroidManifest.xml اضافه کنید:

activity> 
”android:label=”@string/app_name  
”android:name =".LayoutsActivity  
<”android:windowSoftInputMode="stateHidden  
<intent-filter>
< /”action android:name=”android.intent.action.MAIN>
</”category android:name=”android.intent.category.LAUNCHER>
<intent-filter/>
<activity/>

 

تطبیق با جهت صفحه نمایش

یکی از ویژگی های کلیدی گوشی های هوشمند,قابلیت چرخش گوشی در جهات افقی و عمودی است.اندروید هم جهت افقی و هم عمودی را پشتیبانی می کند.در حالت عادی وقتی که جهت گوشی را عوض می کنید,اکتیویتی کنونی سعی می کند با توجه به جهت چرخش رابط کاربری را دوباره ترسیم کند.این عمل به این دلیل اتفاق می افتد که در هنگام تغییر جهت گوشی رویداد ()onCreate دوباره فراخوانی می گردد.

در این حالت تمامی عناصر به جای اصلیشان بر میگردند .دقت کنید که در حالت افقی فضای زیادی در سمت راست بلا استفاده مانده است.علاوه بر آن در حالت افقی ممکن است چند view به دلیل تعدد ابزارهای نمایش و قرار گرفتن در پایین صفحه از نظر پنهان می باشند.معمولاً دو روش برای کنترل تغییر جهت وجود دارد:

  • Anchoring (مهار کردن):بدین معنا که view را به چهار طرف صفحه متصل می کنیم.این راحت ترین راه ممکن است.وقتی که جهت عوض شود,دوباره رابط کاربری شما به چهار طرف متصل می گردد.
  • Resizing and repositioning (تغییر اندازه و چینش دوباره): گرچه روش مهار کردن راحت ترین روش برای اطمینان از نمایش رابط کاربری در جهات مختلف است,اما تکنیک برتر تغییر اندازه تمامی ابزارهای نمایش و چینش دوباره آنها بر اساس جهت کنونی می باشد.

روش مهار کردن ابزارهای نمایش

با استفاده از RelativeLayout به راحتی می توان از این روش بهره گرفت.در زیر یک فایل main.xml در اختیار داریم که حاوی پنج دکمه است که درون عنصر <RelativeLayout> قرار دارند:

<?”xml version=”1.0” encoding=”utf-8?>
RelativeLayout>
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android 
<
Button>
”android:id=”@+id/button1  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Top Left Button  
”android:layout_alignParentLeft=”true  
”android:layout_alignParentTop=”true  
</
Button>
”android:id=”@+id/button2  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Top Right Button  
”android:layout_alignParentTop=”true  
”android:layout_alignParentRight=”true  
</
Button>
”android:id=”@+id/button3  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Bottom Left Button  
”android:layout_alignParentLeft=”true  
”android:layout_alignParentBottom=”true  
</
Button>
”android:id=”@+id/button4  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Bottom Right Button  
”android:layout_alignParentRight=”true  
”android:layout_alignParentBottom=”true  
</
Button>
”android:id=”@+id/button5  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Middle Button  
”android:layout_centerVertical=”true  
”android:layout_centerHorizontal=”true  
</
<RelativeLayout/>

 

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

  • view -- layout_alignParentLeft را در سمت چپ والد می چیند.
  • view -- layout_alignParentRight را در سمت راست والد می چیند.
  • view -- layout_alignParentTop را در بالای والد می چیند.
  • view -- layout_alignParentBottom را در پایین والد می چیند.
  • view -- layout_centerVertical را به صورت عمودی در وسط والد می چیند.
  • view -- layout_centerHorizontal را به صورت افقی در وسط والد می چیند.

روش تغییر اندازه و چینش مجدد

به جز روش قبلی یعنی مهار کردن ابزارهای نمایش,یک راه حل راحتتری برای سفارشی سازی رابط کاربری با توجه به جهت چرخش دستگاه,ایجاد فولدرهای مختلف در res/layout و ایجاد فایل های XML به ازای هر کدام از جهات افقی یا عمودی می باشد.برای پشتیبانی حالت افقی,باید یک فولدر در res به نام layout-land ساخته شود.معمولاً فایل main.xml که درون فولدر layout قرار دارد,حاوی رابط کاربری برای حالت عمودی است.اما فایل main.xml که در فولدر layout-land  قرار گرفته است حاوی رابط کاربری برای حالت افقی می باشد.

کدهای زیر نمایش دهنده ی محتوای فایل main.xml در فولدر layout می باشد:

<?”xml version=”1.0” encoding=”utf-8?>
RelativeLayout>
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android 
<
Button>
”android:id=”@+id/button1  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Top Left Button  
”android:layout_alignParentLeft=”true  
”android:layout_alignParentTop=”true  
</
Button>
”android:id=”@+id/button2  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Top Right Button  
”android:layout_alignParentTop=”true  
”android:layout_alignParentRight=”true  
</
Button>
”android:id=”@+id/button3  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Bottom Left Button  
”android:layout_alignParentLeft=”true  
”android:layout_alignParentBottom=”true  
</
Button>
”android:id=”@+id/button4  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Bottom Right Button  
”android:layout_alignParentRight=”true  
”android:layout_alignParentBottom=”true  
</
Button>
”android:id=”@+id/button5  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Middle Button  
”android:layout_centerVertical=”true  
”android:layout_centerHorizontal=”true  
</
<RelativeLayout/>

 

کدهای زیر نمایش دهنده ی محتوای فایل main.xml در فولدر layout-land است .کدهای زیر که به صورت پر رنگ تر هستند آنهایی هستند که در بخش افقی اضافه شده اند:

<?”xml version=”1.0” encoding=”utf-8?>
RelativeLayout>
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
”xmlns:android=”http://schemas.android.com/apk/res/android  
<
Button>
”android:id=”@+id/button1  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Top Left Button  
”android:layout_alignParentLeft=”true  
”android:layout_alignParentTop=”true  
</
Button>
”android:id=”@+id/button2  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Top Right Button  
”android:layout_alignParentTop=”true  
”android:layout_alignParentRight=”true  
</
Button>
”android:id=”@+id/button3  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Bottom Left Button  
”android:layout_alignParentLeft=”true  
”android:layout_alignParentBottom=”true  
</
Button>
”android:id=”@+id/button4  
”android:layout_width=”wrap_content  
”android:layout_height=”wrap_content  
”android:text=”Bottom Right Button  
”android:layout_alignParentRight=”true  
”android:layout_alignParentBottom=”true  
</
Button>
”android:id=”@+id/button5  
”android:layout_width=”fill_parent  
”android:layout_height=”wrap_content  
”android:text=”Middle Button  
”android:layout_centerVertical=”true  
”android:layout_centerHorizontal=”true  
</
Button>android:id=”@+id/button6  android:layout_width=”180px  android:layout_height=”wrap_content  android:text=”Top Middle Button  android:layout_centerVertical=”true  android:layout_centerHorizontal=”true  android:layout_alignParentTop=”true  
</
Button>
”android:id=”@+id/button7  android:layout_width=”180px  android:layout_height=”wrap_content  android:text=”Bottom Middle Button  android:layout_centerVertical=”true  android:layout_centerHorizontal=”true  android:layout_alignParentBottom=”true  
</
<RelativeLayout/>

با استفاده از این روش هرگاه چرخشی به وقوع بپیوندد,اندروید به صورت اتوماتیک XML مربوطه را بارگذاری می کند.

مدیریت تغییر و چرخش صفحه نمایش

تا اینجا متوجه شده اید که چگونه برنامه خود را با جهت های مختلف سازگار کنید.از این پس وضعیت های مختلفی که برای اکتیویتی در هنگام چرخش رخ خواهد داد را بررسی می کنیم.

در تمرین زیر رفتار یک اکتیویتی را در هنگام چرخش یک دستگاه را بررسی می کنیم.

1.یک پروژه ی جدید  با نام  Orientations ایجاد کنید.

2.فایل main.xml را به صورت زیر تغییر دهید:

<?”xml version=”1.0” encoding=”utf-8?>
”LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android>
”android:orientation=”vertical  
”android:layout_width=”fill_parent  
”android:layout_height=”fill_parent  
<
EditText>
”android:id=”@+id/txtField1  
”android:layout_width=”fill_parent  
< /”android:layout_height=”wrap_content
EditText>
”android:layout_width=”fill_parent  
</”android:layout_height=”wrap_content  
<LinearLayout/>

 

3.فایل MainActivity.java را به صورت زیر تغییر دهید:

;package com.PRG.Orientations
;import android.app.Activity
;import android.os.Bundle
;import android.util.Log
} public class MainActivity extends Activity
  /*.Called when the activity is first created**/
Override@
} (public void onCreate(Bundle savedInstanceState
;(super.onCreate(savedInstanceState  
;(setContentView(R.layout.main   
;(”Log.d(“StateInfo”, “onCreate
{ 
Override@
} ()public void onStart  
;(”Log.d(“StateInfo”, “onStart 
;()super.onStart
{ 
Override@
} ()public void onResume 
;(”Log.d(“StateInfo”, “onResume
;()super.onResume 
{ 
Override@
} ()public void onPause
;(”Log.d(“StateInfo”, “onPause  
;()super.onPause 
{  
Override@
} ()public void onStop  
;(”Log.d(“StateInfo”, “onStop 
;()super.onStop  
{
Override@
} ()public void onDestroy
;(”Log.d(“StateInfo”, “onDestroy  
;()super.onDestroy   
{ 
Override@
} ()public void onRestart  
;(”Log.d(“StateInfo”, “onRestart  
;()super.onRestart   
{  
{

 

4.برنامه را اجرا کنید.

5.با استفاده از کلیدهای Ctrl + F11 جهت شبیه ساز را عوض کنید.

6.خروجی پنجره ی LogCat را مشاهده کنید.برای این کار باید در ایکلیپس به حالت Bebug prespective بروید.که باید چیزی شبیه زیر باشد:

01-05 13:32:30.266: DEBUG/StateInfo(5477): onCreate
01-05 13:32:30.296: DEBUG/StateInfo(5477): onStart
01-05 13:32:30.296: DEBUG/StateInfo(5477): onResume
...
01-05 13:35:20.106: DEBUG/StateInfo(5477): onPause
01-05 13:35:20.106: DEBUG/StateInfo(5477): onStop
01-05 13:35:20.106: DEBUG/StateInfo(5477): onDestroy
01-05 13:35:20.246: DEBUG/StateInfo(5477): onCreate
01-05 13:35:20.256: DEBUG/StateInfo(5477): onStart
01-05 13:35:20.256: DEBUG/StateInfo(5477): onResume

 

روش کار

از نوشته های این پنجره ی LogCat می توان به این نتیجه رسید که در هنگام چرخش دستگاه,اکتیویتی نابود می شود:

01-05 13:35:20.106: DEBUG/StateInfo(5477): onPause
01-05 13:35:20.106: DEBUG/StateInfo(5477): onStop
01-05 13:35:20.106: DEBUG/StateInfo(5477): onDestroyااا

 

و در ایجاد دوباره ی آن به صورت زیر می شود:

01-05 13:35:20.246: DEBUG/StateInfo(5477): onCreate
01-05 13:35:20.256: DEBUG/StateInfo(5477): onStart
01-05 13:35:20.256: DEBUG/StateInfo(5477): onResume

 

درک این رفتار اندروید بسیار مهم است.چون شما باید این موضوع را به خوبی بدانید تا بتوانید وضعیت اکتیویتی را قبل از چرخش دستگاه حفظ کنید.به عنوان مثال فرض کنید که اکتیویتی شما دارای مقادیری است که برای انجام محاسبات به آن احتیاج دارید.برای حفظ وضعیت اکتیویتی باید در هنگام رویداد ()onPause هر کاری را که لازم است انجام دهید.چرا که در هنگام چرخش اولین رویدادی که رخ می دهد این رویداد است.نکته ی قابل توجه دیگر این است که تنها ابزارهای نمایشی که در خصوصیت android:id آنها نام گذاری صورت گرفته است,بعد از چرخش وضعیت قبلی خود را حفظ خواهند کرد.فرض کنید کاربر در حال


  • دسته بندی :
  • تاریخ انتشار : 10 اردیبهشت 1396
  • بازدید : 345

برچسب ها :