شروع کار با Butterknife
Butterknife را میتوان یکی از بهترین ابزار برای view injection در اندروید تلقی کرد. طراحی ظاهر پروژه های اندروید یکی از مهم ترین و زمانبر ترین قسمت های برنامه نویسی اندروید میباشد. پس از اینکه شما این محله را با قدرت خلاقیت و تجربه خود به پایان رساندید, باید این آنرا درون پروژه خود تعریف کنید تا بتوانید آنها را باهم هماهنگ کنید و یا یکسری تغییرات و یا عملیات هارا با برنامه نویسی و به صورت Programmatically با این المان ها کار کنید. اگر شما یک تازه کار در اندروید هستید پس بهتر است تا از همین ابتدای کار ابزاری که میخواهید برای خود انتخاب کنید را به صورت حرفه ای انتخاب کنید تا راه حرفه ای شدن را برای خود آسان کنید.
در حال رایج روال تعریف یک المان در اندروید به این صورت میباشد :
- ابتدا یک المان به این صورت در xml میسازیم
<EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:text="Zero To Hero" android:ems="10" android:id="@+id/editText" />
- و درون کلاس Activity و یا Fragment به این صورت تعریف میشود
EditText editText = (EditText) findViewById(R.id.editText);
فرض کنید اگر یک Button داشته باشید و بخواهید برای آن OnclickListener تعریف کنید باید به این صورت عمل کنید :
((Button)findViewById(R.id.button)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } });
اما با Butter knife میتوانید بسیار ساده تر و سریع تر اینکار را انجام دهید.
از این پس Butter knife
Butter knife این امکان را به شما میدهد تا بتوانید با استفاده از Annotation ها المان های ظاهری برنامه را درون کد های خود بیاورید.
ابتدا butter knife را به gradle اضافه میکنیم.
compile 'com.jakewharton:butterknife:8.4.0'
چون Butter knife از Annotation استفاده میکند باید یک Annotation Processor نیز به gradle اضافه کنید. از دو Annotation Processor برای این منظور میتوان استفاده کرد
- apt
- annotationProcessor
اگر میخواهید از apt استفاده کنید :
- به فایل build.gradle project و در قسمت dependencies چنین Classpath را اضافه کنید :
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
- و repositories را به این صورت تغییر میدهیم :
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
- به فایل build.gradle module چنین دستوری را برای افزودن Plugin به پروژه تان اضافه کنید
apply plugin: 'com.neenbedankt.android-apt'
یعنی فایل buid.gradle شما باید به این صورت تغییر کند :
apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' android { compileSdkVersion 24 buildToolsVersion '25.0.0' defaultConfig { ....
- و در نهایت چنین کدی را به قسمت dependencies اضافه کنید :
apt 'com.jakewharton:butterknife-compiler:8.4.0' compile 'com.jakewharton:butterknife:8.4.0'
اگر میخواهید از Annotation Processor استفاده کنید مانند روش بالا عمل کنید :
- classpath را به این صورت وارد میکنیم
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
- درrepositories
mavenCentral()
را وارد میکنیم
- plugin آن به این صورت میباشد
apply plugin: 'com.jakewharton.butterknife'
- و در نهایت dependencies را اینگونه قرار میدهیم
compile 'com.jakewharton:butterknife:8.4.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
حالا به چگونگی استفاده از Butterknife میپردازیم
در ابتدا اگر از Activity استفاده میکنید درون متد onCreate چنین کدی را قرار دهید
ButterKnife.bind(this);
و اگر از Fragment استفاده میکنید این کد را در onCreateView قرار دهید
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_blank, container, false); ButterKnife.bind(this, view);
در کد بالا ابتدا View مربوط به Fragment را در یک کلاس View قرار دادیم و سپس آنرا به Butter knife ارجا دادیم .
اگر از هر View دیگری که شامل یکسری Child view می باشد استفاده میکنید, نیز میتوانید باز هم از همین روش استفاده کنید. برای مثال در Recyclerview وقتی شما یک Template مشخص برای آیتم های لیست طراحی میکنید میتوانید همین روش استفاده از Butter knife را در کلاس View holder آن استفاده کنید
class HomeItem extends RecyclerView.ViewHolder { @BindView(R.id.item_title) TextView title; @BindView(R.id.item_cover) ImageView cover; HomeItem(View itemView) { super(itemView); ButterKnife.bind(this, itemView); }
یکی از مهم ترین ویژگی های Butter knife را میتوان در resource injection استفاده کرد. Bind کردن المان ها یکی از آنها میباشد.
میتوان کار با resource هارا از این مدل
String appName = getString(R.string.app_name);
به این صورت تغییر داد
@BindString(R.string.app_name) String appName;
و همینطور برای باقی resource ها
@BindString(R.string.app_name) String appName; @BindColor(R.color.colorPrimary) Color primary; @BindDrawable(R.drawable.logo) Drawable logo; @BindDimen(R.dimen.floating_label_text_size) float floatingSize;
همچنین علاوه بر Bind کردن به صورت تکی, میتوانید چند View را به صورت یک آرایه Bind کنید
@BindViews({R.id.firstName, R.id.lastName, R.id.username, R.id.password}) List<EditText> editTexts;
حتما برایتان این چالش بوجود آمده است که نیاز داشته باشید تا برای المان های پروژه یک فونت مشخص قرار دهید. اینکار میتواند زمان و حجم زیادی از کد را طلب کند. اما با Butter knife میتوان اینکار را راحت تر کرد.
برای اختصاص یک خصوصیت مشخص به دسته ای از المان ها, Butter knife متدی به نام apply را دارد که به این صورت استفاده میشود :
ButterKnife.apply(nameViews, method, value);
برای مثال میخواهیم به تمام Textview ها یک فونت اختصاص دهیم
static final ButterKnife.Setter<TextView, Typeface> setFont = new ButterKnife.Setter<TextView, Typeface>() { @Override public void set(TextView view, Typeface font, int index) { view.setTypeface(font); } };
و در یک متد آنرا به Butter knife ارجا میدهیم
public static void editTextFont(List<MaterialEditText> texts, Typeface font) { ButterKnife.apply(texts, setFont, font); }
و لیستی از TextView هارا که ایجاد کرده ایم به عنوان پارامتر به این متد ارسال کنیم.
یکی از مهم ترین کمک هایی که Butter knife می تواند به ما کند, مدیریت OnClick المان های ماست. در ابتدا نحوه فراخوانی متد Click یک Button در اندروید مورد بررسی قرار گرفت اما به وسیله Butter knife می توان بسیار راحت تر اینکار را انجام داد
@OnClick(R.id.login) public void formLogin() { }
و به همین سادگی توانستیم آن حجم از کد را کاهش دهیم و به مراتب در کد نویسی پروژه های بزرگ اهمیت این موضوع به خوبی نشان داده میشود.
همچین Onclick را میتوان برای آرایه ای از المان ها بکار گرفت
@OnClick({R.id.login,R.id.go}) public void login() { }
همچنین میتوانید برای راحت تر شدن کار در Android Studio یک پلاگین به نام ButterKnife Zelezny را نصب کنید و عمل Injection را به راحتی انجام دهید.
روی آدرس Layout که میخواهید المان های آنرا inject کنید راست کلیک کنید و generate را انتخاب کنید و از لیست باز شده میتوانید generate butter knife injection را انتخاب کنید
و در صفحه نمایش داده شده میتوانید مشخص کنید که چه آیتم هایی را با چه اسم هایی درون پروژه شما inject شوند.
هدف از این مقاله معرفی یک ابزار بسیار قدرتمند برای شما عزیزان بود تا در هر سطحی ( حتی صفر ) بتوانید بسیار سریع و تمیز کد نویسی مرتبط با ظاهر برنامه را انجام دهید.
همچنین میتوانید برای اطلاعات بشتر پیرامون Butter knife به اینجا مراجعه کنید.
موفق باشید
مطالب زیر را حتما مطالعه کنید
آموزش Gradle – اهمیت Project Automation
درک مفهوم کدنویسی تمیز در اندروید
5 هک ساده برای کاهش سایز فایل APK
آشنایی با RecyclerView در اندروید
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
متشکرم.
خیلی عالی بود.
ممنون از آموزشتون