در قسمت بیست و سوم آموزش اندروید موضوع مهم و پرکاربرد چرخش صفحه دستگاه اندروید به صورت افقی با عمودی و نحوه تطبیق ابزار ها با حالت افقی و عمودی را آموزش داده ایم.
یکی از ویژگی های گوشی های هوشمند قابلیت چرخش بصورت افقی یا عمودی است .اما از نظر برنامه نویسی باید به این نکته توجه داشت که هنگام چرخش صفحه اکتیویتی نابود شده و دوباره ایجاد میشود پس باید پس از ایجاد دوباره اکتیویتی عناصر درون آن نیز در موقعیت اولیه خود قرار گیرند.
برای مثال به تصویر زیر که از تمرین های آموزش قبل میباشد دقت کنید
معمولا دو راه برای کنترل تغییر جهت وجود دارد:
با استفاده از RelativeLayout مثالی در رابطه با روش مهار کردن و متصل کردن عناصر میزنیم
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.testprj.MainActivity"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Left Top" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="Bottom Right" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="Top Right" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:text="Bottom Left" /> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Middle" /> </RelativeLayout>
نتیجه مثال فوق به صورت زیر خواهد بود
همانگونه که در تصویر فوق مشاهده میکنید در هردو جهت تمامی دکمه ها مکان اصلی خود را با استفاده از خصوصیاتی که در زیر مشخص شده اند حفظ کرده اند
layout_alignParentLeft : ابزار در سمت چپ والد قرار میگیرد.
layout_alignParentTop : ابزار در سمت بالا والد قرار میگرد.
layout_alignParentRight : ابزار در سمت راست والد قرار میگیرد.
layout_alignParentBottom : ابزار را در پایین والد قرار میدهد.
layout_centerVertical : ابزار را به صورت عمودی در وسط والد قرار میدهد.
layout_centerHorizontal : ابزار را به صورت افقی در وسط والد قرار میدهد.
روش قبل با اینکه ساده ترین روش بود اما بهترین روش نبود بنابراین راه دیگری را امتحان میکنیم با استفاده از تغییر چینش و سایز.در این روش میتوان با استفاده از فایل های xml که در فولدرهای مختلف قرار دارد نمای مناسب با جهت فعلی دستگاه را اجرا کرد بدین ترتیب که در صورت عمودی بودن صفحه فایل xml موجود در مسیر res/layout (معمولا این فایل برای حالت عمودی دستگاه استفاده میشود) اجرا شود و در صورت افقی شدن صفحه فایل xml که در فولدر جدید با عنوان land-layout قرار دارد اجرا شود مطابق تصویر زیر
*توجه کنید که نام هر دو فایل باید یکی باشد
حال کدهای زیر را در فایل activity_main.xml که در مسیر res/layout قرار دارد و برای حالت عمودی دستگاه استفاده میشود
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is Vertical View" /> </RelativeLayout>
عبارات فوق یک TextView را که مشخص کننده حالت عمودی دستگاه است را نمایش میدهد حال در فایل activity_main.xml درون مسیر res/land_layout نیز یک TextView دیگر که نشان دهنده حالت افقی دستگاه است قرار میدهیم
</pre> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is LANDSCAPE View" /> </RelativeLayout>
نتیجه نیز به صورت زیر خواهد بود