آشنایی با نحوه ساخت اپلیکیشن های اندروید با استفاده از اندروید استودیو – بخش چهارم

آشنایی با نحوه ساخت اپلیکیشن های اندروید با استفاده از اندروید استودیو – بخش چهارم

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

آموزش اندروید استودیو


سایر اجزای مهم اندروید

- ویجت های صفحه خانه و قفل گوشی

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

- تصاویر پس زمینه زنده

پس زمینه های زنده به شما امکان ساخت پس زمینه های انیمیشن مانند برای صفحه خانه اندروید را می دهند.

منیفست اندروید

-پیکربندی اپلیکیشن اندروید

کامپوننت ها و تنظیمات اپلیکیشن اندروید در فایلی به نام AndroidManifest.xml  قرار داده می شوند که با نام manifest file  یا manifest  نیز شناخته شده است.

منیفست متادیتاهای افزونه برای اپلیکیشن مانند آیکون ها و شماره نسخه اپلیکیشن را نیز مشخص می سازد.

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

- تعریف کامپوننت ها در فایل منیفست

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

- مجوزها

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

- مثالی از منیفست اندروید

لیست زیر نمایش دهنده مثالی از یک فایل ساده منیفست اندروید می باشد.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.android.rssreader"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="16"

android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.INTERNET" />

<application

android:name="RssApplication"

android:allowBackup="false"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="RssfeedActivity"

android:label="@string/title_activity_main" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity

android:name=".DetailActivity"

android:label="Details" >

</activity>

<activity android:name="MyPreferenceActivity" >

</activity>

<service android:name="RssDownloadService" >

</service>

</application>

</manifest>

 جزئیات بیشتری از منیفست اندروید

- نسخه و پکیج

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

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

android:versionName و android:versionCode نسخه اپلیکیشن اندرویدی شما را مشخص می سازند. versionName چیزی است که کاربر می بیند و می تواند هر گونه رشته ای باشد، اما VersionCode باید از نوع عددی باشد، مارکت اندروید با مقایسه VersionCode آپدیت های اپلیکیشن را ترتیب می دهد. این اعداد به طور معمول با 1 شروع می شوند و با انتشار نسخه جدید از اپلیکیشن این عدد نیز افزایش پیدا می کند.

- اپلیکیشن و کامپوننت ها

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

تگ <activity> یک کامپوننت اکتیویتی را تعریف می کند. ویژگی name به کلاس اشاره دارد که در ارتباط با پکیج تعریف شده در ویژگی package است. بخش intent filer در فایل منیفست اندروید به ران تایم اندروید می گوید که این اکتیویتی باید به عنوان یک نقطه ورود ممکن به اپلیکیشن رجیستر شود و در لانچر سیستم اندروید در دسترس قرار گیرد. اکشن (android:name="android.intent.action.MAIN")  شروع را مشخص می سازد در حالی که پارامتر category android:name="android.intent.category.LAUNCHER افزودن اکتیویتی جدید به لانچر را به سیستم اندروید می گوید.

مقدار string/app_name@ به فایل های منبعی که در برگیرنده مقدار واقعی نام اپلیکیشن هستند، ارجاع پیدا می کنند. استفاده از فایل منبع باعث سهولت در تامین منابع مختلف شامل رشته ها، رنگ ها و آیکون ها برای گوشی های مختلف می شود و فرآیند ترجمه اپلیکیشن را نیز ساده تر می کند.

مشابه تگ <activity> شما قادر به استفاده از سرویس، گیرنده و تامین کننده جهت تعریف سایر کامپوننت های اندروید می باشید.

- مینیموم و تارگت SDK

بخش uses-sdk در فایل منیفست به شما امکان مشخص کردن نسخه targetSdkVersion و targetSdkVersion از اپلیکیشن را می دهد.

[table id=4 /]

- مجوزها

تعریف مجوزهای اپلیکیشن توسط تگ <permission> صورت می پذیرد، از طرفی تگ <uses-premission> ضرورت یک مجوز را تعیین می کند.

- پیکربندی ضروری گوشی

بخش uses-configuration در منیفست به شما امکان مشخص کردن متدهای ورودی خاصی را برای گوشی خود می دهد. به طور مثال اسنیپت زیر وجود کیبورد سخت افزاری برای گوشی را ضروری می داند.

<uses-configuration android:reqHardKeyboard="true"/> 

بخش uses-feature شمار را قادر به تعیین پیکربندی سخت افزاری خاصی در گوشی می سازد، مثلا اسنیپت زیر که وجود دوربین برای گوشی را ضروری نشان داده است.

<uses-feature android:name="android.hardware.camera" />

- محل نصب

با استفاده از ویژگی installLocation از اپلیکیشن شما می توانید مشخص کنید آیا امکان نصب اپیکیشن بر روی حافظه خارجی گوشی وجود دارد یا خیر. برای این کار می توانید از auto یا preferExternal استفاده کنید.

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

- اطلاعات بیشتر

شما از طریق لینک Android Manifest documentation قادر به یافتن اطلاعات بیشتر در زمینه ویژگی ها و بخش های فایل منیفست می باشید.

منابع

- فایل های منبع

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

فایل های منبع باید در دایرکتوری res/ از اپلیکیشن و در زیر-فولدری تعریف شده قرار داده شوند. زیر-فولدر به نوع منبعی که ذخیره شده بستگی دارد. جدول زیر نمایی کلی از منابع پشتیبانی شده و پیشوندهای استاندارد پوشه های آنها را به نمایش گذاشته است.

[table id=6 /]

- مثال: تعریف رشته ها، آرایه های رشته ای، رنگ ها و ابعاد

فهرست زیر مثالی از فایلی به نام values.xml در /res/values را نمایش می دهد که در آن تعداد ثابت رشته ای، یک آرایه رشته ای، رنگ و ابعاد تعریف شده است.

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">Test</string>

<string name="action_settings">Settings</string>

<string name="hello_world">Hello world!</string>

<string-array name="operationsystems">

<item>Ubuntu</item>

<item>Android</item>

<item>Microsoft Windows</item>

</string-array>

<color name="red">#ffff0000</color>

<dimen name="mymargin">10dp</dimen>

</resources>

- توصیفات منابع

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

- آی دی های منابع و R.java

به هر منبعی یک آی دی اختصاص داده می شود، دایرکتوری gen در پروژه اندروید شامل فایل های مرجع R.java که در بر گیرنده این مقدارهای تولید شده است، می باشد. این مراجع دارای مقادیر عددی استاتیک هستند.

چنانچه شما اقدام به افزودن یک فایل منبع جدید کنید، مرجع مرتبط با آن منبع جدید به طور خودکار در فایل R.java ساخته می شود. تغییرات دستی در این فایل مورد نیاز نیستند و در صورت نیاز توسط ابزارها اوررایت می شوند.

سیستم اندروید با استفاده از این آی دی ها، متدهایی را برای دسترسی به فایل های منبع مورد نظر در اختیار قرار می دهد.

برای مثال جهت دسترسی به یک رشته با آی دی R.string.yourString در کد منبع، شما قادر به استفاده از متد (getString(R.yourString که در کلاس Contect تعریف شده، می باشید.

- شیوه های خوب برای آی دی های منابع

SDK اندروید از شیوه camelCase برای آی دی های خود استفاده می کند، مثلا buttonRefresh. استفاده از این رویکرد پیشنهاد می شود.

- منابع سیستمی

اندروید نیز منابعی را در اختیار قرار می دهد که system resources نام دارد، این منابع با پیشوند android از بقیه منابع متمایز می شوند. برای نمونه android.R.string.cancel یک رشته پلتفرم را تعریف می کند که وظیفه آن متوقف کردن عملیات است.

فایل های منبع لی اوت

-  اکتیویتی ها و لی اوت ها

اکتیویتی های اندروید با استفاده از ویوها(ویجت ها) و فرگمنت های خود رابط کاربری را تعریف می کنند. این رابط کاربری را می توان با استفاده از فایل های منبع لی اوت XML که در پوشه res/layout/ قرار دارد و یا با استفاده از کد جاوا تعریف کرد، علاوه بر این می توانید این دو رویکرد را با هم ادغام کرده و مورد استفاده قرار دهید.

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

- فایل های لی اوت XML

یک فایل منبع لی اوت به عنوان لی اوت محسوب می شود، این لی اوت مشخص کننده ViewGroups، Views، ارتباط و ویژگی های آنها توسط یک فایل XML است.

کد زیر مثالی از یک فایل لی اوت ساده می باشد.

<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"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

<TextView

android:id="@+id/mytext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world" />

</RelativeLayout>

یک لی اوت توسط  فراخوانی متد ()setContentView به یک اکتیویتی اختصاص داده می شود، در مثال زیر کدهای مربوطه نشان داده شده اند.

package com.vogella.android.first;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

}

- تعریف آی دی ها

چنانجه یک ویو نیاز به دسترسی از طریق کد جاوا داشته باشد، شما باید به ویو یک آی دی منحصر به فرد اختصاص دهید، این کار با ویژگی android: id صورت می پذیرد. به منظور اختصاص یک آی دی جدید به یک ویو می توان از ویژگی android:id از جز مربوطه در فایل لی اوت استفاده کرد. در زیر مثالی را مشاهده می کنید که در آن یک دکمه آی دی button1 را با پارامتر android:id="@+id/button1"  می گیرد.

<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Show Preferences" >

</Button>

این کار در صورت نیاز یک آی دی جدید را در فایل R.java بوجود می آورد و آی دی تعریف شده را به ویوی موردنظر اختصاص می دهد.

- شیوه مناسب: آی دی های تعریف شده از قبل یا استفاده از یک فایل جدا

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

به منظور کنترل آی دی های خود، شما می توایند فایلی که معمولا ids.xml نام دارد را در پوشه res/values/ بسازید و آی دی های موردنظر خود را در این فایل تعریف کنید. فهرست زیر نمونه ای از این گونه فایل را به شما نمایش می دهد.

<?xml version="1.0" encoding="utf-8"?>

<resources>

<item name="button1" type="id"/>

</resources>

این کار به شما امکان استفاده از آی دی در فایل لی اوت را می دهد.

<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=".MainActivity" >

<Button

android:id="@id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

android:layout_marginRight="27dp"

android:text="Button" />

</RelativeLayout>

هشدار

چنانچه قصد تعریف آی دی در یک فایل مجزا را دارید، اول از همه قسمت id+@ در فایل های لی اوت خود را حذف کنید، در غیر این صورت پیام های خطایی مبنی بر ساخت این فایل ها از قبل را دریافت خواهید کرد.

نکته

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

- ملاحظات عمکلردی با لی اوت ها

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

در بخش های بعدی ادامه کار با IDE اندروید استودیو به شما ارائه خواهد شد، منتظر مطالب جدید ما باشید.


 

اینها را هم بخوانید