ساخت اکشن بار سفارشی در اندروید
ساخت اکشن بار سفارشی در اندروید
اکشن بار در بالای اکیتویتی قرار میگیرد و شامل عنوان، زیر عنوان ، آیکون ، دکمه ها می باشد. همچنین میتواند با توجه به آیتم انتخاب شده برروی صفحه ویوهای مختلفی به خود بگیرد.
اکشن بار برای دیوایس هایی که از api نسخه ۱۱ یا بالاتر استفاده میکنند به صورت پیشفرض نمایش داده می شود. البته می توان اکشن بار را حذف کرد.
برنامه هایی که target SDK آنها کمتر از ورژن ۱۱ قرار میدهند وقتی بر روی دیوایس های پایین تر از api 11 نصب میشوند به جای نمایش نوار اکشن, وقتی دکمه تنظیمات ( که روی دستگاه هست) رو فشار می دهند به صورت options menu نمایش داده می شود.
اکشن بار در هنگام اجرای برنامه توسط کاربر قابل مشاهده است اما options menu وقتی کاربر بر روی دکمه کلیک می کند نمایش داده می شود و ممکن است کاربر متوجه نشود که برنامه شما تنظیمات و دکمه هایی هم در options menu دارد، پس باید کاری کنید که اکشن بار در تمامی نسخه های اندروید ( البته از api 7 به بعد ) نمایش داده شود.
برای اینکار قبلا کتابخانه های مختلفی توسط توسعه دهندگان ارائه شده بود ، اما در حال حاضر برای اینکار گوگل یک سری کتابخانه معرفی کرده است با نام ( Android support library v7).
برای شروع یک پروژه ی جدید بسازید و نام آن را ActionBar قرار دهید.بعد از ساخت پروژه جدید یک لایه ی جدید هم به آن اختصاص دهید.برای ساخت لایه ی جدید به پوشه ی res بروید و روی layout کلیک راست کرده و به قسمت New بروید و روی Android XML File کلیک کنید و آن را Custom بنامید.در این لایه دو TextView تعریف می کنیم:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/textViewTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Saeed"
android:textColor="#388e3c"
android:textSize="24dp" />
<TextView
android:id="@+id/textViewTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="online"
android:textColor="#ff5722"
android:textSize="19dp" />
</LinearLayout>
بعد از اینکه لایه ی خود را تنظیم کردید وارد MainActivity.java شوید و یک کلاس جدید با نام CustomActionBar ایجاد کنید.در این کلاس اکشن بار را با دستور ()getActionBar فعال کنید.در ادامه با استفاده از دستور setBackgrandDrawable رنگ مورد نظرتان را به اکشن بار بدهید و در ادامه یک آیکن با استفاده از دستور setIcon به اکشن بار اختصاص دهید.سپس با استفاده از LayoutParams یک لایه ی داینامیک بسازید.(در ادامه ی همین جلسه ساخت لایه ی داینامیک را هم توضیح خواهیم داد. ) و لایه ی XML را به آن اضافه کنید و در نهایت کلاس ایجاد شده را فراخوانی کنید.
MainActivity.java
/*
* ساخت اکشن با سفارشی
* Beyamooz.com
*/
import android.app.ActionBar;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.ViewGroup;
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//calling CustomActionBar Class
customActionBar();
setContentView(R.layout.activity_main);
}
private void customActionBar() {
//ActionBar Introduction
ActionBar actionBar = getActionBar();
//create ideal color for ActionBar
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#004d40")));
//create icon for action bar
actionBar.setIcon(getResources().getDrawable(R.drawable.ic_launcher));
//View Custom Action bar
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
//create dynamic layout
LayoutParams layout = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
//add xml layout
ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(R.layout.custom, null);
//add display mod on the ActionBar
actionBar.setCustomView(actionBarLayout, layout);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
ساخت لایه ی داینامیک یا پویا
در مواقعی نیاز است تا یک لایه ای را به صورت داینامیک بسازید, به شکلی که در خود کلاس جاوا عناصری مانند تکست ویو و باتن را بسازید.
برای شروع کار یک پروژه جدید با نام Dynamic بسازید.قرار نیست بر روی لایه ی برنامه کار خاصی انجام بدهید فقط یک ID به لایه بدهید تا توسط کلاس جاوا شناسایی شود.
وارد کلاس MainActivity.java شوید و کد های زیر یا به آن اضافه کنید.در این کلاس ابتدا لایه ی برنامه را ایجاد و سه تکست ویو با نام های t1,t2,t3 تعریف کنید.سپس تکست ویوها را با استفاده از دستور
new TextView (MainActivity.this ) در کلاس جاوا بسازید.بعد از ساخت تکست ویو ,رنگ متن و اندازه ی متن تکست ویو را وارد کنید.در مرحله ی بعد از LayoutParams استفاده کنید.LayoutParams به شما این امکان را می دهد تا برای هر کدام از عناصر داخل لایه مقادیر و خاصیت هایی را معرفی کنید.و در نهایت LayoutParams را به تکست ویوها اختصاص دهید.
Dynamic
import android.os.Bundle; import android.app.ActionBar.LayoutParams; import android.app.Activity; import android.graphics.Color; import android.view.Menu; import android.widget.RelativeLayout; import android.widget.TextView; public class MainActivity extends Activity { //layout Introduction Whit TextView RelativeLayout rl; TextView t1, t2, t3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //layout Addressing rl = (RelativeLayout) findViewById(R.id.rl); //TextViews Addressing tv1 = new TextView (MainActivity.this); tv2 = new TextView (MainActivity.this); tv3 = new TextView (MainActivity.this); //The amount of the TextViews t1.setText("Dynamic TextView"); t2.setText("Android"); t3.setText("java"); //Change color TextViews t1.setTextColor(#ff9800); t2.setTextColor(#00bcd4); t3.setTextColor(#795548); //Change size TextViews t1.setTextSize(16); t2.setTextSize(16); t3.setTextSize(16); //create params for the amount of layout elements RelativeLayout.LayoutParams params1=new RelativeLayout.LayoutParams ((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT);
//create margin from left params1.leftMargin=115;
//create margin from top params1.topMargin=120; RelativeLayout.LayoutParams params2=new RelativeLayout.LayoutParams ((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT); params2.leftMargin=190; params2.topMargin=190; RelativeLayout.LayoutParams params3=new RelativeLayout.LayoutParams ((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT); params3.leftMargin=110; params3.topMargin=260; //connetion params from TextViews t1.setLayoutParams(params1); t2.setLayoutParams(params2); t3.setLayoutParams(params3); //Make Views rl.addView(t1); rl.addView(t2); rl.addView(t3); }
- نوشته شده توسط سعید نوشادی
- بازدید: 8071