سبد (0)

ساخت لانچر در اندروید

ساخت لانچر در اندروید

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

یک پروژه جدید بسازید و API 8 رو به عنوان کمترین نسخه برای پشتیبانی انتخاب کنید. من اسم برنامه را Luncher گذاشتم، شما هم می توانید نام دلخواه خود را برای لانچرتان انتخاب کنید.

در زمان ساخت پروژه چون در ابتدا ما نمی خوایم یک اکتیویتی ایجاد کنیم تیک Create Activity رو بر می داریم.

قدم بعد اصلاح فایل AndroidManifest.xml است که دو اکتیویتی را برای آن تعریف می کنیم. اکتیویتی اول برای نمایش صفحه خانگی می باشد. آن را HomeActivity می نامیم:

 

        <activity
            android:name="com.PRG.Luncher.HomeActivity"
            android:label="@string/title_activity_home"
            android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen"
            android:launchMode="singleTask"
            android:stateNotNeeded="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

با افزودن کدهای

 

android.intent.category.HOME

و

 

android.intent.category.DEFAULT

در قسمت intent-filter ,  رفتار اکتیویتی شبیه یک لانچر می شود و هنگای که دکمه home را فشار دهید یک option نمایش داده می شود.

همچنین باید کد زیر را به این صورت اصلاح کرد تا مطمئن شویدکه فقط یکی از این اکتیویتی ها در یک لحظه نمایش داده می شود.

 

android:launchMode="singleTask"

برای نمایش تصویر پس زمینه کاربر، تم برنامه را به صورت زیر تنظیم کنید:

 

Theme.Wallpaper.NoTitleBar.FullScreen

دومین اکتیویتی باید برنامه های نصب شده برروی دستگاه کاربر را نمایش بدهد. این اکتیویتی عهده دار اجرای برنامه هاست. ما به هیچ پیکربندی (کانفیگ) خاصی برای این اکتیویتی نیاز نداریم. نام آن را ListActivity قرار دهید.

 

 <activity
            android:name="com.PRG.Luncher.AppsListActivity"
            android:label="@string/title_activity_apps_list" >
        </activity>

ساخت لیوت های اکتیویتی

یک لایه xml برای کلاس HomeActivity در پوشه res/layout و بانام activity_home.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"
    tools:context=".HomeActivity" >
 
    <Button
        android:id="@+id/apps_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:text="Apps"
        android:onClick="showApps"
        />
 
</RelativeLayout>

با استفاده از آیتم OnClick  میتوانید چندین ویو رو که در یک صفحه است رو به یه متد متصل کنید و کار کد زدنتون رو بسیار کاراتر و راحتتر کنید.

یک لایه xml برای کلاس ListActivity در res/layout با نام activity_list.xml ایجاد کنید. این لایه شامل یک لیست ویو تمام صفحه می باشد.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
     
    <ListView
        android:id="@+id/apps_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >       
    </ListView>   
 
</LinearLayout>

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

ایجاد  کلاس های اکتیویتی

حالا نوبت ساخت دو کلاس اکتیویتی هست. مطمئن باشید که نام انتخابی برای اکتیویتی ها دقیقا شبیه نامهای معرفی شده در فایل منیفست باشد. کلاسی با نام HomeActivity بسازید و سوپرکلاس آن را android.app.Activity قرار دهید.

 

package com.PRG.Luncher;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class HomeActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
    }

    public void showApps(View v){
        Intent i = new Intent(this, AppsListActivity.class);
        startActivity(i);
    }
}

در متد OnCreate ما SetContentView را قرار دادیم که متد ShowApps را فراخوانی میکند.متد showApps خیلی ساده بوده و فقط اکتیویتی دوم را که ListActivity است صدا می زند.

یک اکتیویتی دیگر با نام ListActivity بسازید و سوپر کلاس آن را android.app.Activity قرار دهید و SetContentView را برابر activity_list قرار دهید.

 

package com.PRG.launcher;

import android.app.Activity;
import android.os.Bundle;

public class AppsListActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
    }

}

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

وقتی که دکمه home (خانه) را فشاردهید دستگاه از شما می خواهد تا لانچر دلخواهتان برای استفاده را انتخاب کنید.

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

در متد LoadApps از کلاس ListActivity,ما از متد queryIntentActivities از PackageManager برای fetch کردن همه ی اینتنت هایی که در فایل منیفست خود Intent.CATEGORY_LAUNCHER دارند استفاده می کنیم.

 

package com.PRG.Launcher;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;

import java.util.ArrayList;
import java.util.List;

public class AppsListActivity extends Activity {
    private PackageManager manager;
    private List<AppDetail> apps;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
    }

    private void loadApps(){
        manager = getPackageManager();
        apps = new ArrayList<AppDetail>();

        Intent i = new Intent(Intent.ACTION_MAIN, null);
        i.addCategory(Intent.CATEGORY_LAUNCHER);

        List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0);
        for(ResolveInfo ri:availableActivities){
            AppDetail app = new AppDetail();
            app.label = ri.loadLabel(manager);
            app.name = ri.activityInfo.packageName;
            app.icon = ri.activityInfo.loadIcon(manager);
            apps.add(app);
        }
    }
}

نمایش لیست برنامه ها

با داشتن متغیر apps که تمام جزئیات مورد نیاز ما را شامل می شود، ما می توانیم لیستی از برنامه ها را با استفاده از کلاس ListView به نمایس بگذاریم.

ما یک ArrayAdapter ساخته و برای نمایش آیتم ها متد getView را override کرده ایم. بعد هم آداپتر را به لیست ویو نسبت داده ایم.(این کد را هم داخل ListActivity اضافه کنید)

 

private ListView list;   
private void loadListView(){
    list = (ListView)findViewById(R.id.apps_list);
     
    ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(this,
            R.layout.list_item,
            apps) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if(convertView == null){
                convertView = getLayoutInflater().inflate(R.layout.list_item, null);
            }
             
            ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon);
            appIcon.setImageDrawable(apps.get(position).icon);
             
            TextView appLabel = (TextView)convertView.findViewById(R.id.item_app_label);
            appLabel.setText(apps.get(position).label);
             
            TextView appName = (TextView)convertView.findViewById(R.id.item_app_name);
            appName.setText(apps.get(position).name);
             
            return convertView;
        }
    };
     
    list.setAdapter(adapter);          
}

آماده بودن برای کلیک ها

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

 

private void addClickListener(){       
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> av, View v, int pos,
                long id) {
            Intent i = manager.getLaunchIntentForPackage(apps.get(pos).name.toString());
            AppsListActivity.this.startActivity(i);
        }
    });
}

کنار هم گذاشتن قسمت ها

برای اینکه همه چیز با یکدیگر کار کنند باید متد LoadApps, LoadListView و addClickListener را در کلاس ListActivity فراخوانی کنیم.

 

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_apps_list);
loadApps();
loadListView();
addClickListener();
}
تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehiمجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامیپرداخت آنلاین -  بانک ملتمعرفی بیاموز در شبکه سهپرداخت آنلاین - بانک اقتصاد نوینپرداخت آنلاین - بانک سامان