برنامه نویسی موبایل

برنامه نویسی موبایل

برنامه نویسی موبایل

برنامه نویسی موبایل

۲ مطلب با کلمه‌ی کلیدی «سئو قالب» ثبت شده است

  • ۰
  • ۰

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

هرچند پروسه بهینه سازی سایت برای موتورهای جستجو یک فرآیند پیچیده و بلند مدت است اما چه درهنگام طراحی وب سایت و چه پس از آن وب سایت شما به موتورهای جستجو معرفی شده و سئو سازی می گردد بدیهی است که درخواست جهت ادامه فرآیند افزایش رتبه  سایت شما امکان پذیر خواهد بود.در وب سایتهایی که حجم اطلاعات آنها بالا می باشد اصولا استفاده از طراحی استاتیک غیر ممکن است.شرکت وب یونیک اصفهان ، با تیم مجرب خود آماده طراحی وب سایت بر  طبق نظر مشتریان خود میباشد و هرگونه سفارش طراحی سایت  را با بهترین کیفیت و قیمت انجام میدهد.هم چنین آماده انجام پروژه های طراحی سایت در اصفهان میباشد.هم چنین شرکت وب یونیک به ساخت برنامه موبایل و هم  چنین برنامه نویسی اندروید می پردازد.برنامه نویسی جاوا و ساخت بازی اندروید از جمله سفارشات شرکت وب یونیک می باشد.هم چنین وب یونیک اصفهان قالب سایت فروشگاهی و طراحی سایت فروشگاهی  با جدیدترین تکنولوژی های روزدنیا انجام میدهد.نرم افزار حسابداری و حسابداری آنلاین وب یونیک ویژگی همانند حسابداری هلو را دارد اما با این تفاوت که به صورت آنلاین است.

نکات مربوط به چرخش گوشی :


شاید توسعه دهنده همیشه برنامه خود را در حالت افقی (landscape) یا عمودی (portrait) آزمایش کند و فراموش کند که اگر کاربر گوشی خود را بچرخاند، برنامه اندروید نیز تغییر وضعیت می دهد و به طور پیش فرض، دوباره Activity از ابتدا اجرا می شود. نکات زیادی در مورد چرخش گوشی وجود دارد که آنها را به ترتیب بیان می کنیم و شما باید همه آنها را بخوانید و ببینید که کدامیک مد نظرتان است :

1- شاید شما اصلا بخواهید که کل برنامه اندروید و یا یک یا چند Activity از برنامه اندروید، همیشه در حالت افقی (landscape) یا عمودی (portrait) نمایش داده شوند ( کلید شماره 221 ).

2- شاید شما قابلیت چرخش صفحه برنامه را به کاربر بدهید، اما برایتان مهم باشد که با چرخش صفحه، Activity دوباره از اول اجرا نشود، زیرا ممکن است اطلاعاتی از دست برود. مثلا اگر برنامه به صورت بازی باشد، با چرخش صفحه، Activity دوباره از اول اجرا می شود و کاربر دوباره باید بازی را از اول شروع کند، برای رفع این مشکل، باید تعیین کنیم که هنگام چرخش صفحه، اطلاعات Activity حفظ شود و Activity از اول اجرا نشود ( کلید شماره 270 ).

3- شاید اصلا بخواهیم که برای دو حالت افقی (landscape) و عمودی (portrait)، ظاهر گرافیکی Activity فرق داشته باشد و چیدمان عناصر گرافیکی در فایل xml متفاوت باشد. برای این منظور، باید یک فایل xml نیز برای حالت افقی (landscape) طراحی کنیم ( کلید شماره 2619 ).
متناسب بودن توضیحات نوشته شده برای برنامه اندروید با نحوه عملکرد برنامه اندروید :

چنانچه توضیحاتی که شما برای برنامه اندروید در فروشگاه های اندروید می نویسید، با نحوه عملکرد خود برنامه اندروید متفاوت باشد، فروشگاه اندروید مورد نظر از انتشار برنامه خودداری خواهد کرد.
اجازه های دسترسی (permissions) را یکبار دیگر چک کنید :

همان طور که می دانید، ما اجازه های دسترسی (permissions) را در فایل Androidmanifest.xml می نویسیم. کاربر نیز قبل از نصب برنامه اندروید، لیست این اجازه های دسترسی (permissions) را مشاهده می کند و اگر با یکی از آنها موافق نباشد، برنامه اندروید را نصب نخواهد کرد. باید دقت داشته باشید که هم فروشگاه اندروید و هم کاربران (البته آنهایی که باتجربه هستند) به این موضوع حساس هستند. مثلا فرض کنید که فروشگاه اندروید، برنامه ای را در مورد آموزش آشپزی دریافت کند، اما در آن ببیند که اجازه دسترسی برای دوربین (camera) ذکر شده است و در توضیحات برنامه اندروید هم هیچ صحبتی از دوربین نشده باشد. در این حالت، فروشگاه اندروید به شما تذکر خواهد داد که این اجازه دسترسی برای چیست و باید آن را بردارید. دلیلش هم واضح است، زیرا کدهایی وجود دارد که با آنها می توان به صورت مخفیانه از کاربر عکس گرفت و اگر اجازه دسترسی به اینترنت هم به برنامه اندروید داده شده باشد، حتی می تواند آنها را به یک سایت ارسال کند. بنابراین مشاهده می کنید که این موارد، وابسته به حریم شخصی افراد است. بنابراین بهتر است قبل از انتشار برنامه اندروید، یک نگاهی به اجازه های دسترسی (permissions) بیندازید، زیرا معمولا توسعه دهندگان یک سری اجازه های دسترسی (permissions) تعریف می کنند اما بعدا ممکن است که پشیمان شده و کدهایی که نیاز به آن اجازه های دسترسی (permissions) دارند را حذف کنند اما یادشان برود که خود اجازه های دسترسی (permissions) را هم حذف نمایند.
آیا action bar را به همه Activity های مورد نظرتان افزوده اید ؟

قبلا در مورد چگونگی طراحی action bar توضیحاتی دادیم ( کلید شماره 2657 )، در همانجا توضیح دادیم که کدهای مربوط به action bar را باید به کدهای Activity هایی که می خواهیم action bar در آنها نمایش داده شود، اضافه کنیم. بنابراین ممکن است که فراموش کنیم که این کدها را به یک یا چند Activity اضافه نماییم. بنابراین بهتر است که از این نظر، تمام Activity ها را بررسی نمایید.
غیر فعال سازی مشخصه debuggable :

همان طور که می دانید، در مراحل ساخت برنامه اندروید، برای آنکه بتوانیم به خطایابی (debug) برنامه اندروید بپردازیم ( کلید شماره 813 )، مشخصه android:debuggable در فایل AndroidManifest.xml از پروژه اندروید را برابر true قرار می دادیم :

android:debuggable="true"

اما قبل از انتشار برنامه اندروید در فروشگاه های اندروید، باید این مشخصه را برابر false قرار بدهیم :

android:debuggable="false"
غیر فعال سازی مشخصه allowBackup :

چنانچه می خواهید که امکان پشتیبان گیری (backup) از برنامه اندروید شما وجود نداشته باشد، باید مشخصه android:allowBackup در فایل AndroidManifest.xml از پروژه اندروید را برابر false قرار بدهید :

android:allowBackup="false"

یا در صورتی که می خواهید امکان پشتیبان گیری (backup) وجود داشته باشد، این مشخصه را برابر true قرار بدهید :

android:allowBackup="true"
استفاده از ProGuard برای سخت تر شدن مهندسی معکوس (reverse engineering) و استخراج کدهای فایل apk برنامه اندروید :

مهندسی معکوس کدهای فایل apk امکان پذیر می باشد، اما ProGuard ( کلید شماره 323 ) این امکان را فراهم می کند که عملیات به دست آوردن کدها را سخت تر کنیم.

  • nafise poornajjar
  • ۰
  • ۰
شرکت وب یونیک ، با تیم مجرب خود آماده طراحی سایت بر  طبق نظر مشتریان خود میباشد و هرگونه سفارش طراحی سایت  را با بهترین کیفیت و قیمت انجام میدهد.هم چنین آماده انجام پروژه های طراحی سایت در اصفهان میباشد.هم چنین شرکت وب یونیک به برنامه نویسی موبایل و هم  چنین برنامه نویسی اندروید می پردازد.
.مثل آموزش قبل یه پروژه با یک فهرست ساده بسازید در ادامه می‌خوایم برای هر ردیف از فهرستمون یه عکس نشان اون دانشگاه رو هم کنار اسمش بندازیم. پس اول از همه تصاویر مورد نظر رو به پروژه مون در زیرشاخه res و پوشه drawable-hdpi اضافه می‌کنیم، فایل عکس‌هایی که من استفاده کردم رو می‌تونید از اینجا دانلود کنید. وارد کردنش به پروژه هم کار آسونیه، هرجایی که عکسهاتون هست کپی کنید و بعد روی پوشه drawable-hdpi راست کلیک کنید و paste.

۲.اولین کاری که باید بکنیم اینه که یه طرح‌بندی برای هر ردیف از فهرست درست کنیم. تا با توجه به اون اندروید اطلاعتمون رو در هر ردیف بدونه چطور نمایش بده. پس احتیاج داریم تا یه فایل xml برای طرح‌بندی‌مون بسازیم. روی فولدر layout (در res) راست کلیک کنید. گزینه New و other رو انتخاب کنید. (این تصویر) بعد هم از زیرشاخه Android گزینه Android XML Layout File رو انتخاب کنید و براش اسم بذارید من اسمشو می‌ذارم redife_fehrest.

۳. خوب اولین چیزی که هر ردیف می‌خوایم داشته باشه یه تصویره، پس یه نمای‌تصویر (imageView) در فایل تازه ساخته شدمون می‌ذاریم. نمای‌تصویر رو می‌تونید از ستون سمت چپ از بخش Images & Media بکشید و روی صفحه رها کنید. همین که رهاش می‌کنید یه پنجره باز می‌شه که ازتون می‌خواد منبع عکس رو مشخص کنید، و اگه به درستی تصاویرتون رو وارد کرده باشید، می‌بینیدشون.

۴.هر ردیف قراره یه متن داشته باشه که نام دانشگاه درش نوشته بشه، پس یه نمای‌متنی (TextView) هم وارد صفحه می‌کنیم و کنار نمای‌تصویر می‌ذاریم. الان تصویرمون در کنار متن اینطوریه که به نظر خیلی مطلوب نمی‌یاد

می‌تونیم یه کم ویژگی‌های متن رو تغییر بدیم، مثه اندازه، فاصله از بالای صفحه و سمت راستش و ...

۵.به فایل MainActivity.java (در src) می‌ریم. در آموزش قبل یک آرایه‌ی‌وفق‌دهنده درست کرده بودیم:

setListAdapter (new ArrayAdapter <String> (this,
android.R.layout.simple_list_item_1,
getResources ().getStringArray(R.array.daneshgah)));

حالا باید برای این فهرست سفارشی‌مون خودمون کلاس وفق‌دهنده (Adapter) بسازیم. پس کلمه ArrayAdapter رو به AdaptereMan تغییر می‌دیم (می‌دونم که هنوز کلاسشو نساختیم). حالا زیر کلمه AdaptereMan خط قرمز می‌کشه و وقتی ctrl+1 رو بزنید بهتون پیشنهاد می‌ده که اون کلاس رو بسازید، ولی ما خودمون می خوایم اون کلاس رو بسازیم. اما همین کد قبلی رو یه تغییر دیگه هم باید بدیم و اون اینه که یه ورودی دیگه قبل از getResources اضافه کنیم و اون هم شناسه (Id) اون نمای‌متنی هست که قراره نوشته‌های هر ردیف درونش قرار بگیره. پس کد اینطوری می‌شه:

setListAdapter (new AdaptereMan <String> (this,
                android.R.layout.simple_list_item_1, R.id.textView1,
                getResources ().getStringArray(R.array.daneshgah)));

۶.می‌تونیم کلاس AdaptereMan رو توی همون کلاس اصلی‌مون بسازیم، البته اگه پروژه بزرگ باشه بهتره تو یه فایل جداگانه ساخته بشه ولی برای پروژه الان ما مشکلی ایجاد نمی‌کنه. در ضمن می‌خوایم که کلاسمون از ArrayAdapter توسعه پیدا کنه.

private class AdaptereMan extends ArrayAdapter <String> {

۷. وقتی کد بالا رو می‌نویسیم زیر نام کلاس خط قرمز می‌کشه و ازمون می‌خواد که یه سازنده برای کلاسمون ایجاد کنیم، اونی رو انتخاب می‌کنیم که ۴ تا ورودی به این ترتیب داشته باشه : محتوا، عدد صحیح (int)، عدد صحیح و فهرستی از نوع رشته (<list <string)

 وقتی روش می‌زنیم سازنده رو برامون ایجاد می‌کنه و ما تغییرش نمی‌دیم چون داره سازنده ArrayAdapter رو پیاده می‌کنه، کاری که ما می‌خوایم بکنیم اینه که تابع getView رو دوباره‌نویسی (override) کنیم.

@Override
        public View getView (int makan, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            return super.getView(makan, convertView, parent);
        }

۸.تابع getView برای هر ردیف از فهرست صدا زده می‌شه. و زمانی که صدا زده بشه ما این انتخاب رو داریم که برای هر ردیف در فهرستمون چه چیزی رو نشون بدیم. در این مثال ما می‌خوایم این تابع رو تغییر بدیم تا در کنار نام هر دانشگاه، نشان مربوط به همون دانشگاه قرار بگیره. باید به اون نمای‌تصویر و نمای متنی یه طوری دسترسی پیدا کنیم و راهش اینه که از کلاس بازکننده‌صفحه‌بندی (LayoutInflater)‌ یه نمونه بگیریم و به عنوان ورودی بهش اون صفحه‌بندی که برای هر ردیف فهرست درست کردیم رو بدیم تا برامون بازش کنه و بتونیم تغییرش بدیم.  پس اون خط توضیحات (comment) رو از کد بالا پاک می کنیم و به جاش می‌نویسیم LayoutInflater bazkonande = حالا باید از یکی از خدمات سیستمی اندروید استفاده کنیم، به نام Context.LAYOUT_INFLATER_SERVICE.شرکت وب یونیک اصفهان پروژه های سئو سایت در اصفهان و برنامه نویسی موبایل برای سازمان ها و ارگان های مختلف انجام میدهد.

LayoutInflater bazkonande = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

۹.یه نمونه از کلاس نما (View) می‌سازیم تا اطلاعات بازشده از صفحه‌بندی بالا رو بهش بدیم و اون نمای‌تصویر و نمای‌متنی رو ازش بکشیم بیرون و مقداردهی‌اش کنیم. اسمش رو radif می‌ذاریم و مساوی با bazkonande.inflate.

این تابع سه ورودی می‌خواد، شماره منبع چیزی که می‌خوایم بازش کنیم (همون صفحه‌بندیه)، گروه‌نما (همون والد این کلاس) و یه متغیر درستی\نادرستی که الان می‌ذاریمش نادرست.

View radif = bazkonande.inflate(R.layout.radife_fehrest, parent, false);

۱۰.خوب برای اینکه خود فهرستمون رو داشته باشیم یه آرایه‌ی‌رشته‌ای محلی تو همین کلاس درست می کنیم و مقادیر اون فهرست رو می‌ریزیم توش. (برای راحتی کار با فهرست)‌ اینطوری:

String [] radifha = getResources ().getStringArray(R.array.daneshgah);

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

ImageView tasvir = (ImageView) radif.findViewById(R.id.imageView1);
TextView matn = (TextView) radif.findViewById(R.id.textView1);

۱۱.متنی که نمای‌متنی باید نمایش بده رو باید از اون آرایه‌ی رشته‌ها در بیاریم. اینکه الان در مکان کدام عنصر از آرایه هستیم رو اولین ورودی تابع getView مشخص می‌کنه به اسم makan. پس:

matn.setText (radifha[makan]);

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

if (radifha[makan].equals("دانشگاه صنعتی شریف"))
        tasvir.setImageResource(R.drawable.sharif);

به خاطر همین می‌تونیم با توجه به مکانی که اون عنصر آرایه داره تصویرش رو مشخص کنیم:

if (makan == 0)
    tasvir.setImageResource(R.drawable.kntu);
else if (makan == 1)
    tasvir.setImageResource(R.drawable.iust);
else if (makan == 2)
    tasvir.setImageResource(R.drawable.sharif);
else if (makan == 3)
    tasvir.setImageResource(R.drawable.aut);
else if (makan == 4)
    tasvir.setImageResource(R.drawable.ut);

برای خروجی تابع هم فقط هم radif رو برگردونیم کافیه.

زیر AdaptereMan که اول استفاده کردیم یه خط قرمز کشیده، روش موس رو نگه می‌داریم و گزینه remove type argument رو می‌زنیم، بعد زیر کل ورودی‌ها خط قرمز می‌کشه، موس رو روش نگه می‌داریم و گزینه change constructor رو می‌زنیم. پس کلا کلاسمون این‌طوری می‌شه:

private class AdaptereMan extends ArrayAdapter <String> {

    public AdaptereMan(Context context, int resource,
            int textViewResourceId, String[] strings) {
        super(context, resource, textViewResourceId, strings);
        // TODO Auto-generated constructor stub
    }
       
    @Override
    public View getView (int makan, View convertView, ViewGroup parent) {
    LayoutInflater bazkonande = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View radif = bazkonande.inflate(R.layout.radife_fehrest, parent, false);
    String [] radifha = getResources ().getStringArray(R.array.daneshgah);
           
    ImageView tasvir = (ImageView) radif.findViewById(R.id.imageView1);
    TextView matn = (TextView) radif.findViewById(R.id.textView1);
           
    matn.setText (radifha[makan]);
           
    if (makan == 0)
        tasvir.setImageResource(R.drawable.kntu);
    else if (makan == 1)
        tasvir.setImageResource(R.drawable.iust);
    else if (makan == 2)
        tasvir.setImageResource(R.drawable.sharif);
    else if (makan == 3)
        tasvir.setImageResource(R.drawable.aut);
    else if (makan == 4)
        tasvir.setImageResource(R.drawable.ut);
   
    return radif;
    }
}

وقتی برنامه رو تو شبیه‌ساز دیدم این شکلی بود

به نظرم اومد بهتره برای radife_fehrest.xml از صفحه‌بندی نسبی استفاده کنم تا بتونم عکس و متن رو راست‌چین کنم به این صورت:

تغییراتی در ویژگی‌هاشون دادم:

نمای‌متنی:‌ textSize:14sp - margin:top:20dp - margin:right:5dp

  • nafise poornajjar