قرار دادن تعدادی دکمه (Button)(تعدادی item) در action bar برای رفتن به Activity های مختلف برنامه اندروید، در برنامه نویسی اندروید
در این مبحث قصد داریم که چگونگی قرار دادن چند دکمه در action bar برنامه اندروید را شرح بدهیم. کاربر با اشاره بر روی هر یک از این دکمه ها (تعدادی item)(Button) به یک Activity خاص منتقل خواهد شد.
بنابراین یک پروژه اندروید می سازیم که دارای یک Activity اصلی و سه Activity دیگر باشد. همچنین در action bar آن، سه دکمه قرار می دهیم که با اشاره بر روی هر کدام از آنها، کاربر به یکی از آن سه Activity منتقل شود.

فایل های پروژه اندروید و همچنین فایل apk ساخته شده از آن را می توانید از لینک موجود در انتهای مبحث، دانلود نمایید.
نام پروژه اندروید را برابر ActionBar3Button انتخاب کرده ایم (نام package برابر com.kelidestan.actionbar3button انتخاب شده است. نام activity اصلی را برابر MainActivity.java انتخاب کرده ایم و فایل xml متناظر آن را هم برابر activity_main.xml قرار داده ایم). همچنین سه Activity با نام های Activity_1 و Activity_2 و Activity_3 نیز برای پروژه اندروید ساخته ایم :

برای هر Activity ، یک فایل xml متناظر داریم که ظاهر گرافیکی آن Activity را تعیین می کند (در پوشه layout). اما علاوه بر این، باید یک فایل xml نیز بسازیم که در آن، ساختار گرافیکی action bar را تعیین کنیم و به وسیله آن، سه دکمه (Button) را در action bar قرار بدهیم. برای این منظور، یک فایل با نام menu.xml در پوشه menu می سازیم (یک وقت به اشتباه، آن را در پوشه layout نسازید !) :

مشاهده می کنید که خود برنامه eclipse ، به طور خودکار، برای منوی (menu) هر Activity ، یک فایل در پوشه menu ساخته است. در صورت تمایل، می توانید آنها را حذف کنید.
قبل از اینکه بگوییم که کدهای menu.xml به چه صورت نوشته شوند، بهتر است که ابتدا رشته ها (string) و عکس های لازم برای برنامه اندروید را بیان کنیم. همان طور که گفتیم، قرار است که سه دکمه (Button) در action bar برنامه اندروید قرار بدهیم، بنابراین به 3 عکس نیاز داریم، بنابراین در پوشه drawable-hdpi از برنامه اندروید، سه عکس با نام های image_1 و image_2 و image_3 را قرار می دهیم :

همان طور که مشاهده کردید، بنده عکس مربوط به دکمه ها (Button) را تنها در پوشه drawable-hdpi از پروژه اندروید قرار دادم، در صورتیکه ما برای گوشی های با رزولوشن های مختلف، پوشه های drawable با نام های مختلفی را در پروژه اندروید داریم. بنده در این پروژه، تنها برای سادگی، در یک پوشه عکس ها را قرار می دهم، اما شما برای پروژه اندروید خود، بهتر است که یکسان نمایش داده شدن برنامه اندروید در گوشی های با اندازه صفحه نمایش مختلف و همچنین میزان رزولوشن مختلف را در نظر بگیرید. در غیر این صورت، مثلا ممکن است که اندازه صفحه نمایش یک گوشی (و یا رزولوشن آن)، آن قدر کم باشد که تنها دو دکمه از سه دکمه در action bar نمایش داده شود. این موارد را با آزمایش برنامه اندروید خود بر روی گوشی های مختلف (و یا با شبیه سازها)، آزمایش کنید. نکات بیشتر در این زمینه را می توانید در آموزش شماره 239 بخوانید. البته خود برنامه اندروید این قابلیت را دارد که تعیین کنیم که اگر فضای (Room) کافی برای همه مواردی که در action bar تعیین می کنیم، نبود، آنگاه تعدادی از آنها را نمایش ندهد، این مسئله را در ادامه این مبحث و با شرح مشخصه showAsAction برای هر item در action bar ، بیشتر توضیح خواهیم داد.
در برنامه اندروید، قصد داریم که تعدادی متن در Activity ها نمایش داده شود و همچنین برای دکمه هایی (Button) که در action bar قرار داده می شوند، عنوان هایی (به صورت متن) را باید تعیین کنیم. بنابراین باید تعدادی رشته (متن - string) را در فایل strings.xml از پروژه اندروید تعریف کنیم :

بنابراین تعدادی رشته (string) جدید در آن تعریف می کنیم (کدهای آن به صورت زیر خواهد بود) :
<resources>
<string name="app_name">ActionBar3Button</string>
<string name="action_settings">Settings</string>
<string name="main_text">اکتیویتی اصلی برنامه اندروید</string>
<string name="title_activity_activity_1">سایت کلیدستان</string>
<string name="title_activity_activity_2">جستجو</string>
<string name="title_activity_activity_3">لیست علاقه مندی ها</string>
<string name="kelidestan_1">کلیدستان</string>
<string name="kelidestan_2">آموزش برنامه نویسی اندروید در سایت کلیدستان (www.kelidestan.com)</string>
<string name="favorites_1">علاقه مندی ها</string>
<string name="favorites_2">نمایش لیست علاقه مندی ها</string>
<string name="search_1">جستجو</string>
<string name="search_2">نمایش قسمت جستجو</string>
</resources>
در action bar ، علاوه بر نمایش سه دکمه، به طور پیش فرض، آیکون (icon) برنامه اندروید نیز نمایش داده می شود و در کنار این آیکون، در هر Activity از برنامه اندروید که باشیم، عنوان (title) آن Activity نیز به صورت متن نمایش داده خواهد شد. عنوان (title) هر Activity ، به صورت خودکار، هنگام ساخت خود Activity ، در فایل strings.xml تعریف می شود و معمولا نام رشته (string) متناظر با آن، با کلمه title شروع می شود. بنابراین شما بهتر است که عنوان های مربوط به Activity های برنامه را نیز مطابق میل خودتان تغییر بدهید (من این کار را انجام داده ام و نتیجه آن را در کدهای فایل strings.xml می توانید مشاهده کنید).
خوب اکنون که عکس ها و رشته های (string) مورد نیاز برای برنامه اندروید را شرح دادیم، به سراغ فایل menu.xml می رویم. کدهای فایل menu.xml را به صورت زیر می نویسیم (همان فایلی که برای action bar ، باید چگونگی قرارگیری سه دکمه را در آن تعیین کنیم) :
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/itemKelidestan"
android:icon="@drawable/image_3"
android:showAsAction="ifRoom|withText"
android:title="@string/kelidestan_1">
</item>
<item
android:id="@+id/itemSearch"
android:icon="@drawable/image_2"
android:showAsAction="ifRoom|withText"
android:title="@string/search_1">
</item>
<item
android:id="@+id/itemFavorites"
android:icon="@drawable/image_1"
android:showAsAction="ifRoom|withText"
android:title="@string/favorites_1">
</item>
</menu>
مشاهده می کنید که در آن، با تگهای item ، سه مورد را تعریف کرده ایم که هر کدام برای یکی از دکمه های (Button) مورد نظرمان می باشد. با مشخصه id ، یک id برای آنها تعریف کرده ایم. مشخصه icon ، تصویری را تعیین کرده است که باید برای هر یک از دکمه ها (Button) نمایش داده شود. مشخصه title نیز مربوط به تعیین یک عنوان (title) به صورت رشته (متن - string) برای هر یک از آنها می باشد.
مشخصه showAsAction اهمیت زیادی دارد. اگر دقت کرده باشید، آن را به صورت زیر تعیین کرده ایم :
بنابراین موارد ifRoom و withText برای آن تعیین شده است. این مشخصه، برای این است که تعیین کنیم که item تعریف شده برای action bar ، در چه مواقعی و به چه صورت نمایش داده شود. بد نیست که در زیر، حالت هایی را برای آن شرح بدهیم :
1- ifRoom :
این مورد، یعنی اگر فضای (Room) کافی برای نمایش item بود، آنگاه نمایش داده شود (اگر فضای کافی برای نمایش آن نبود، نمایش داده نشود و در overflow menu در دسترس باشد). در این موارد بهتر است که ابتدا item های مهم را در ابتدا قرار بدهیم تا اگر قرار است که item ای نمایش داده نشود، item های مهم تر را حتما ببینیم.
2- always :
یعنی نیازی به چک کردن وجود داشتن فضای (Room) کافی برای نمایش item نیست و item همیشه نمایش داده شود.
3- withText :
به همراه آیکون (icon) نمایش داده شده برای item ، یک متن (عنوان مربوط به item) نیز در کنار آن نمایش داده می شود (البته شاید برای درست عمل کردن این حالت، نیاز به اجرای یک سری کد دیگر باشد).
بنابراین سه حالت را شرح دادیم (شاید حالت های دیگری نیز وجود داشته باشد، ولی فعلا ما همین سه تا را ذکر کردیم) و در کدها هم، دو تای آنها را به صورت ترکیبی به کار برده ایم، یعنی به صورت زیر :
البته ممکن است که برای حالت withText ، نیاز به نوشتن یک سری کد دیگر باشد تا به درستی عمل کند، ولی فعلا این موارد برایمان اهمیت ندارد و قصدمان تنها معرفی عملکرد آن بود (و همچنین چگونگی به کار بردن ترکیبی دو حالت).
ساختار Activity ها را کاملا ساده در نظر می گیریم که تنها دارای یک TextView باشند که متنی را در آنها نمایش بدهیم تا بتوانیم هر یک را با دیدن متن، تشخیص بدهیم. بنابراین، در ادامه، کدهای مربوط به فایل های xml متناظر با Activity ها را بیان می کنیم (در خود فایل های xml ، رشته لازم برای نمایش در هر TextView را آدرس دهی کرده ایم و بنابراین برای TextView ها، نیازی به نوشتن کدهای java در خود فایل Activity ها نمی باشد).
کدهای فایل activity_main.xml را به صورت زیر می نویسیم :
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/main_text"
android:textSize="20sp" />
</RelativeLayout>
کدهای فایل activity_1.xml را به صورت زیر می نویسیم :
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/kelidestan_2"
android:textSize="20sp" />
</RelativeLayout>
کدهای فایل activity_2.xml را به صورت زیر می نویسیم :
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/search_2"
android:textSize="20sp" />
</RelativeLayout>
کدهای فایل activity_3.xml را به صورت زیر می نویسیم :
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/favorites_2"
android:textSize="20sp" />
</RelativeLayout>
بنابراین با این فایل های xml ، ظاهر گرافیکی Activity ها را مشخص کردیم و حالا باید برویم به سراغ کدهای خود Activity ها (فایل های java).
هر Activity که می خواهیم در action bar آن، item های تعریف شده در فایل menu.xml نمایش داده شوند، باید یک سری کد در آن نوشته شود و به فایل menu.xml ارجاع بدهیم. بنابراین می توانیم که action bar هر Activity را به شکلی دلخواه طراحی کنیم (که البته با این حات کاری نداریم و قصد داریم که تنها عنوان نمایش داده شده در آنها متفاوت باشد که این تفاوت، به صورت خودکار اعمال می شود).
بنابراین در چهار فایل مربوط به چهار Activity ، باید یک سری کد برای ارجاع به فایل menu.xml و همچنین تعریف عملیات هایی برای اجرا در هنگام اشاره بر روی هر یک از item ها، بنویسیم.
بنابراین بهتر است که ابتدا کدهای مورد نظر را بیان کنیم و بعد آنها را در میان کدهای Activity ها قرار بدهیم. کدها عبارتند از :
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemKelidestan:
//do something when this button is pressed
startActivity(new Intent(this, Activity_1.class));
return true;
case R.id.itemSearch:
//do something when this button is pressed
startActivity(new Intent(this, Activity_2.class));
return true;
case R.id.itemFavorites:
//do something when this button is pressed
startActivity(new Intent(this, Activity_3.class));
return true;
default:
return true;
}
}
همان طور که مشاهده می کنید، در کدها، onCreateOptionsMenu و onOptionsItemSelected را به کار برده ایم. کدهای onCreateOptionsMenu به صورت زیر می باشند :
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
که در آن، با عبارت R.menu.menu ، به فایل menu.xml که در پوشه menu ساختیم، اشاره کرده ایم.
و اما کدهای onOptionsItemSelected که مربوط به اجرای یک سری کد، بعد از اشاره کاربر بر روی هر یک از item ها در action bar می باشد :
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemKelidestan:
//do something when this button is pressed
startActivity(new Intent(this, Activity_1.class));
return true;
case R.id.itemSearch:
//do something when this button is pressed
startActivity(new Intent(this, Activity_2.class));
return true;
case R.id.itemFavorites:
//do something when this button is pressed
startActivity(new Intent(this, Activity_3.class));
return true;
default:
return true;
}
}
همان طور که مشاهده می کنید، هر یک از item ها را به صورت یک حالت (مورد case) شناسایی کرده ایم و بعد تعیین کرده ایم که اگر بر روی آن item اشاره شود، چه کدهایی باید اجرا شوند. مثلا برای item با id برابر itemKelidestan ، کدهای زیر را نوشته ایم :
//do something when this button is pressed
startActivity(new Intent(this, Activity_1.class));
return true;
ابتدا این item را با عبارت R.id.itemKelidestan شناسایی کرده (مشخص کرده ایم) و بعد تعیین کرده ایم که در صورت اشاره بر روی آن، کد زیر اجرا شود :
کد بالا باعث می شود که کاربر به Activity با نام Activity_1 منتقل شود.
کدها برای دو item دیگر نیز مشابه می باشد و تنها Activity متفاوتی را برای هر یک از آنها مشخص کرده ایم.
پس قرار شد که این کد را در تک تک Activity ها قرار بدهیم. بنابراین کدهای فایل MainActivity.java به صورت زیر خواهد بود :
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemKelidestan:
//do something when this button is pressed
startActivity(new Intent(this, Activity_1.class));
return true;
case R.id.itemSearch:
//do something when this button is pressed
startActivity(new Intent(this, Activity_2.class));
return true;
case R.id.itemFavorites:
//do something when this button is pressed
startActivity(new Intent(this, Activity_3.class));
return true;
default:
return true;
}
}
}
کدهای فایل Activity_1.java به صورت زیر می باشد :
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class Activity_1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemKelidestan:
//do something when this button is pressed
startActivity(new Intent(this, Activity_1.class));
return true;
case R.id.itemSearch:
//do something when this button is pressed
startActivity(new Intent(this, Activity_2.class));
return true;
case R.id.itemFavorites:
//do something when this button is pressed
startActivity(new Intent(this, Activity_3.class));
return true;
default:
return true;
}
}
}
کدهای فایل Activity_2.java به صورت زیر می باشد :
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class Activity_2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemKelidestan:
//do something when this button is pressed
startActivity(new Intent(this, Activity_1.class));
return true;
case R.id.itemSearch:
//do something when this button is pressed
startActivity(new Intent(this, Activity_2.class));
return true;
case R.id.itemFavorites:
//do something when this button is pressed
startActivity(new Intent(this, Activity_3.class));
return true;
default:
return true;
}
}
}
کدهای فایل Activity_3.java به صورت زیر می باشد :
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class Activity_3 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_3);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.itemKelidestan:
//do something when this button is pressed
startActivity(new Intent(this, Activity_1.class));
return true;
case R.id.itemSearch:
//do something when this button is pressed
startActivity(new Intent(this, Activity_2.class));
return true;
case R.id.itemFavorites:
//do something when this button is pressed
startActivity(new Intent(this, Activity_3.class));
return true;
default:
return true;
}
}
}
اکنون ساخت پروژه اندروید تمام شده است و من آن را بر روی یک گوشی اندروید واقعی آزمایش می کنم. صفحه اصلی (Activity اصلی) برنامه اندروید به صورت زیر می باشد :

مشاهده می کنید که در action bar ، سه دکمه (سه item) داریم که با اشاره بر روی آنها، به Activity های متفاوتی هدایت می شویم و در آن Activity ها هم باز action bar به همین شکل می باشد و تنها در عنوان (title) با هم تفاوت دارند.



فایل های پروژه اندروید را می توانید از لینک های زیر دریافت کنید :


ممنون از توضیحات خوبتون من می خوام یه EditText در menu قرار بدم منتها نمی دونم باید چه جوری قرار بدم ممنون می شم راهنماییم کنید....


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


با عرض سلام.
اول خواستم به خاطر سایت فوق فوق العادتون تشکر کنم.
از بعد از آشنایی با سایت شما دانش برنامه نویسیم حداقل دو برابر قبل شده.
واقعا خیلی ممنونم.
دوم اینکه خواستم بدونم چرا وقتی یه آیتم منو اوورفلو میسازم، زمانی که روی دکمه منو لمس میکنم، برای کسری از ثانیه آیتم با عرض کم نشان داده میشه، و سریع به حالت کامل نمایش داده میشه؟
طوره که یه حس لگ زدن یا به قول خودمون تراک تراک شدن منتقل میکنه.
برای آبتمم از آیکون استفاده نکردم، فقط یه متن فارسی، فقط هم یک آیتم (فعلا).
ممنون میشم راهنمایی کنید.


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


سلام.
باید برای آن Activity ، یک فایل xml دیگر به جای فایل menu.xml که در پوشه menu ساختیم، بسازید و دکمه های مورد نظرتان را در آن تعریف کنید.
سپس باید در Activity مورد نظر، کد زیر که در آموزش به کار بردیم را بر اساس فایل xml جدید و دکمه های تعریف شده در آن، تغییر بدهید :
مثلا در خط زیر از کدها، باید نام فایل xml جدید (عبارت ارجاع به آن - مثلا R.menu.newname) جایگزین R.menu.menu شود :
تعریف دکمه ها در کد مورد نظر، باید بر اساس دکمه های تعریف شده در فایل xml جدید، تغییر داده شود.


سلام خسته نباشید
تو ساخت اکشن بار ی مشکل دارم ممنون میشم کمکم کنید سه روزه لنگ موندم
توی یکی از اکتیویتی هام از کلاس ActionBarActivity ارث بری کردم برای ساخت منوی کشویی. از ی طرف تو آموزش اکشن بار باید اکتیویتی از کلاس Activity مشتق شه ولی من حتما باید از کلاس قبلی که گفتم ارث بری کنم. حالا وقتی از این کلاس استفاده می کنم اکشن بار رو نشون میده
سوالم اینه چطور میتونم هم از منوی کشویی هم از اکشن بار توی ی اکتیویتی استفاده کنم؟
با تشکر از سایت خوبتون


من منتظرم میشه ی کمکی بکنید؟


سلام.
می دانم تغییر Activity به ActionBarActivity را انجام داده اید، ولی بنده برای سایر کاربران، از ابتدا مراحل را شرح می دهم.
چون می خواهیم از کلاس ActionBarActivity استفاده کنیم، باید یکی از کتابخانه های android support appcompat را به عنوان کتابخانه (library) به پروژه اندروید اضافه کنیم ( - در Eclipse). مثلا بنده برای تست، کتابخانه android-support-v7-appcompat را به پروژه اندروید اضافه کردم.
سپس به عنوان مثال، می خواهیم MainActivity.java را از Activity به ActionBarActivity تغییر بدهیم. بنابراین باید در خط زیر از کدهای آن، عبارت Activity به ActionBarActivity تغییر داده شود :
یعنی کد بالا به کد زیر تبدیل می شود :
سپس کلیدهای Ctrl و Shif و O (حرف او انگلیسی، نه صفر) را به صورت همزمان می زنیم تا package های لازم (کلاس های لازم) وارد شوند (import شوند).
بنابراین کدهای نهایی به صورت زیر خواهد بود :
علاوه بر تغییر بالا، برای اینکه برنامه اندروید بدون خطا اجرا شود، باید Theme برنامه اندروید را هم به یک Theme مناسب تغییر دهیم. برای این منظور، در فایل AndroidManifest.xml ، در کدهای تگ application ، مشخصه android:theme را به صورت زیر تعیین می کنیم :
یعنی کد کامل تگ application ، مشابه کد زیر خواهد بود :
تا اینجا، پروژه اندروید بدون خطا اجرا می شود. اما در اجرای MainActivity.java ، سه دکمه را در Action Bar مشاهده نمی کنیم (اما اگر دکمه Menu گوشی را بزنیم، آنها را خواهیم دید). اکنون برای رفع این مشکل، باید بر اساس راهنمایی لینک زیر اقدام نماییم :
یعنی فایل memu.xml که در آن، دکمه هایی که باید در Action Bar نمایش داده شوند را تعریف کرده ایم، را باز کرده و کدهای آن را به صورت زیر تغییر می دهیم :
در کدهای بالا، خط زیر مهم است :
که در آن، نام yourapp انتخاب شده است و سپس برای ویژگی های هر دکمه، بر اساس این نام انتخاب شده، کد زیر را نوشته ایم :
موارد بالا برای حالتی بود که بخواهیم حتما دکمه ها نمایش داده شوند.
توصیه بنده این است که برنامه را برای گوشی های با عرض مختلف تست کنید و سپس بهترین حالت را برای نمایش دکمه های Action Bar انتخاب کنید.


ینی عاشقتم مدیر جون
مرسی


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


خواهشا اگر میشه سریعتر راهنماییم کنید...بدجور لنگم


سلام من همه این کد ها رو جاگذاری کردم ولی دو تا مشکل دارم.
یکی اینکه وقتی برنامه رو باز میکنم دکمه ای(یه دکمه بیشتر نیستا) که داخل اکشن بار قرار داده بودم اصلا نیست ولی تو قسمت سه نقطه هستش به صورت متن.
دوم اینکه وقتی کد های شما رو نوشتم فلشی که کنار title اکتیویتی بود که به اکتیویتی قبلی بر میگشت از کار افتاد.شکل دکمه هست ولی عمل نمیکنه.
فکر میکنم از کد هایی بود که جای on option اصلی اکتیویتی جاگذاری کردم هستش.
خواهش میکنم کمکم کنید.


این کدها رو جایی که تولبار تعریف شده بگزار در مین اکتیویتی


سلام
یه سوال دارم. دکمه های اکشن بار رو چه طور میتونم به سمت چپ اکشن بار ببرم?
مممنون میشم کمکم کنید خیلی لازمش دارم برا زیبایی بیشتر...


سلام.
پاسخ نوشته شده در لینک زیر را ببینید :
البته تاکنون بنده آن را آزمایش نکرده ام، بنابراین پس از اجرا، آن را آزمایش کنید و ببینید که مطابق خواست شما می باشد یا خیر.
همان طور که در لینک بالا ذکر شده است، باید مشخصه زیر را در فایل AndroidManifest.xml از پروژه اندروید بنویسید (البته برای api های 17 و بالاتر) (درون تگ application) :
سپس در Activity های پروژه اندروید، کد زیر را می نویسید (در ابتدای کدهای روش onCreate در Activity) :
و همچنین کد زیر را نیز در کدهای Activity بنویسید :


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