چگونه رابط کاربری اندروید بسازیم ؟ اگر بخواهیم در اندروید یک رابط کاربری بسازیم که چند قسمتی باشد و هر قسمت به صورت داینامیک و پویا عمل کند و اجزای رابط کاربری ما جدا از هم باشند بهتر است که اجزای کامپوننت ها و رفتار های Activityها را از هم جدا کنیم و در قالب یک سری ماژول ها قرار دهیم. شما می توانید این ماژول بندی را با استفاده از کلاس Fragment بسازید. این کلاس ها مانند activity های تو در تو عمل می کند و خودش layout خودش را داشته باشد و چرخه حیات خود را طی کند.
ما ابتدا layout را برای fragment معرفی می کنیم. به همین صورت اگر چند تا fragment داشته باشیم می توانیم چند fragment را داخل یک activity قرار دهید. در نمایشگر های دستگاه ها ما سایز ها و اندازه های مختلفی داریم. یک صفحه کوچک می تواند در یک لحظه فقط یک fragment را نشان می دهد و یک صفحه بزرگتر می تواند چند fragment را نشان دهد. کلاس fragment نشان می دهد که چطوری می توان یک رابط کاربری داینامیک و پویا داشت.
همانطور که گفتیم یک fragment را شبیه به بخش های ماژولی یک activity می باشد که چرخه حیات خود را دارد و رویداد های ورودی خود را دریافت می کند و کارهای خود را می کند. به عبارت دیگر این یک sub-activity است. در این مطلب شروع به ساختن fragment ها می کنیم. برای ساخت یک fragment باید یک کلاس بسازیم که از کلاس Fragment ارث بری کرده باشد.
برای ساخت یک کلاس Fragment باید از کلاس Fragment عمل extends را انجام دهیم و متدهای مهم آن را override کنیم برای مثال متد onCreateView را override کنیم. کار با Fragment بسیار شبیه به acitivity است. در مثال زیر یک Fragment را ساخته ایم.
public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // برای مشخص کردن لی اوت return inflater.inflate(R.layout.my_view, container, false); } }
Fragment هم مانند activity متدهایی مانند onPause, onStop, onResume دارد و شما می توانید از آن استفاده کنید.
خب ما الان یک Fragment را ساخته ایم. حال باید این Fragment ساخته شده را به یک activity اضافه کنیم تا بتوانیم از آن استفاده کنیم. به این نکته دقت داشته باشید که Fragment ها را می توان در چندین جا استفاده کرد. حال برای این که از Fragment ساخته شده در برنامه استفاده کنیم می توانیم آن را در xml مربوط به activity بیاوریم. در مثال زیر یک layout برای activity ساخته ایم و دو عدد fragment به آن اضافه کرده ایم. و همچنین کد جاوای مربوط به activity مورد نظر را آورده ایم.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <fragment android:name="ir.itpro.android.fragments.MyFragment1" android:id="@+id/my_fragment1" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name=" ir.itpro.android.fragments.MyFragment2" android:id="@+id/my_fragment2" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
کد جاوای activity در زیر آمده است به کلاسی که از آن ارث بری کرده ایم دقت کنید.
public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); } }
دقت داشته باشید که اگر از ورژن های پایین تر اندروید مانند API10 و پایین تر از آن استفاده می کنیم باید کتابخانه های مورد نظر را دستی نصبت کنید. ولی در ورژن های بالا تر مشکلی پیش نخواهد آمد. اگر شما در پروژه های خودتان از AppCompatActivity استفاده می کنید و کتابخانه شما
com.android.support:appcompat-v7
استفاده می کنید مشکلی پیش نخواهد آمد. با استفاده از این روش که در این مطلب استفاده شد یعنی fragment را در کد Xml معرفی کردیم برای fragment های ثابت استفاده می شود. و اگر شما بخواهید در زمان اجرا یک فرگمنت را از داخل activity حذف کنید نمی توانید این کار را انجام دهید. در مطالب بعدی خواهیم گفت که چگونه می توان از فرگمنت ها استفاده کرد که بتوانند این کار را انجام دهند.
بنیانگذار توسینسو و برنامه نویس
مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود