ساخت اکشن بار سفارشی در اندروید
ساخت اکشن بار سفارشی در اندروید
اکشن بار در بالای اکیتویتی قرار میگیرد و شامل عنوان، زیر عنوان ، آیکون ، دکمه ها می باشد. همچنین میتواند با توجه به آیتم انتخاب شده برروی صفحه ویوهای مختلفی به خود بگیرد.
اکشن بار برای دیوایس هایی که از 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
*/importandroid.app.ActionBar;importandroid.app.ActionBar.LayoutParams;importandroid.app.Activity;importandroid.graphics.Color;importandroid.graphics.drawable.ColorDrawable;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.ViewGroup;publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//calling CustomActionBar ClasscustomActionBar();setContentView(R.layout.activity_main);
}privatevoidcustomActionBar() {//ActionBar IntroductionActionBar actionBar =getActionBar();
//create ideal color for ActionBaractionBar.setBackgroundDrawable(newColorDrawable(Color.parseColor("#004d40")));
//create icon for action baractionBar.setIcon(getResources().getDrawable(R.drawable.ic_launcher));
//View Custom Action baractionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM|ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_HOME_AS_UP);//create dynamic layoutLayoutParams layout =newLayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
//add xml layoutViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(R.layout.custom, null);//add display mod on the ActionBaractionBar.setCustomView(actionBarLayout, layout);
}@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);returntrue;
}
}
ساخت لایه ی داینامیک یا پویا
در مواقعی نیاز است تا یک لایه ای را به صورت داینامیک بسازید, به شکلی که در خود کلاس جاوا عناصری مانند تکست ویو و باتن را بسازید.
برای شروع کار یک پروژه جدید با نام Dynamic بسازید.قرار نیست بر روی لایه ی برنامه کار خاصی انجام بدهید فقط یک ID به لایه بدهید تا توسط کلاس جاوا شناسایی شود.
وارد کلاس MainActivity.java شوید و کد های زیر یا به آن اضافه کنید.در این کلاس ابتدا لایه ی برنامه را ایجاد و سه تکست ویو با نام های t1,t2,t3 تعریف کنید.سپس تکست ویوها را با استفاده از دستور
new TextView (MainActivity.this ) در کلاس جاوا بسازید.بعد از ساخت تکست ویو ,رنگ متن و اندازه ی متن تکست ویو را وارد کنید.در مرحله ی بعد از LayoutParams استفاده کنید.LayoutParams به شما این امکان را می دهد تا برای هر کدام از عناصر داخل لایه مقادیر و خاصیت هایی را معرفی کنید.و در نهایت LayoutParams را به تکست ویوها اختصاص دهید.
Dynamic
importandroid.os.Bundle;importandroid.app.ActionBar.LayoutParams;importandroid.app.Activity;importandroid.graphics.Color;importandroid.view.Menu;importandroid.widget.RelativeLayout;importandroid.widget.TextView;publicclassMainActivityextendsActivity {//layout Introduction Whit TextViewRelativeLayout rl;TextView t1, t2, t3;@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//layout Addressingrl = (RelativeLayout) findViewById(R.id.rl);//TextViews Addressingtv1 =newTextView (MainActivity.this); tv2 =newTextView (MainActivity.this); tv3 =newTextView (MainActivity.this);//The amount of the TextViewst1.setText("Dynamic TextView"); t2.setText("Android"); t3.setText("java");//Change color TextViewst1.setTextColor(#ff9800); t2.setTextColor(#00bcd4); t3.setTextColor(#795548);//Change size TextViewst1.setTextSize(16); t2.setTextSize(16); t3.setTextSize(16); //create params for the amount of layout elementsRelativeLayout.LayoutParams params1=newRelativeLayout.LayoutParams((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT);
//create margin from leftparams1.leftMargin=115;
//create margin from topparams1.topMargin=120;RelativeLayout.LayoutParams params2=newRelativeLayout.LayoutParams((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT); params2.leftMargin=190; params2.topMargin=190;RelativeLayout.LayoutParams params3=newRelativeLayout.LayoutParams((int)LayoutParams.WRAP_CONTENT,(int)LayoutParams.WRAP_CONTENT); params3.leftMargin=110; params3.topMargin=260;//connetion params from TextViewst1.setLayoutParams(params1); t2.setLayoutParams(params2); t3.setLayoutParams(params3); //Make Viewsrl.addView(t1); rl.addView(t2); rl.addView(t3); }
- نوشته شده توسط سعید نوشادی
- بازدید: 7734