یادداشت های یک توسعه دهنده از جهان برنامه نویسی

۷ مطلب با کلمه‌ی کلیدی «اندروید» ثبت شده است

ایده هاتو بگو : آرایش

حتما شما هم اپلیکیشن های تغییر چهره رو یادتونه . اپ هایی که شما رو پیر میکردن یا براتون سبیل میزاشتن و یا حتی کچلتون میکردن . الانم یه اپ به نام FaceApp ترند شده که میتونید انواع فیلتر روی تصویر صورت اجرا کنید و با توجه به هوش مصنوعی استفاده شده در این اپ تصاویر جالبی بدست بیارید . ایده اصلی اپلیکیشن " آرایش " هم از همین اپ ها الهام میگیره .

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

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

نمونه های زیادی از اپ هایی هست که میتونه رنگ صورت رو بهتون نشون بده یا آرایشی روی صورتتون اجرا کنه ولی مجموعی از اینها با استفاده از تبلیغات مرتبط وجود نداره یا حداقل من ندیدم

امید وارم یه روزی بتونم اجرایش کنم ولی فعلا که وقتش رو ندارم

۱ نظر موافقین ۰ مخالفین ۰
مرتضی درزی

خودخوان منتشر شد

خودخوان
خودخوان

نرم افزار خودخوان ، همراه شما در کتاب خوانی ، منتشر شد

اگر میخواهید شب امتحانی نباشید و در طول ترم مثل یک معلم بر روی درس خواندنتان کنترل داشته باشید ، خودخوان را به شما پیشنهاد می کنیم . 

عملکرد درس خوانی
عملکرد درس خوانی

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

کتاب های ترم
کتاب های ترم

خودخوان به نحوه درس خواندن شما توجه کرده و با هوشمندی مخصوص به خود ، طوری به شما پیشنهاد میدهد که بتونید تا پایان ترم تمام کتاب ها رو تمام کنید. 

تعریف ترم تحصیلی یا آزاد
تعریف ترم تحصیلی یا آزاد

 

نکته : 

حواستون باشه بازه ترم را طوری انتخاب کنید که فرصت دوره و تست زنی هم داشته باشید 

پی نوشت :

ورژن 1 این نرم افزار رایگان منتشر کردم با حدود 850 نصب فعال ، ولی بدلایلی بازار برای انتشارش اشکال گرفت و مجبور شدم حذفش کنم . در ورژن جدید امکانات بیشتری قرار دادم و پولی هم شده .

۰ نظر موافقین ۰ مخالفین ۰
مرتضی درزی

تغییر فونت فارسی در پروژه های اندروید

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

انتخاب فونت 

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

افزودن فایل به پروژه 

روی پوشه res راست کلیک کرده و New و مثل شکل زیر یه پوشه با نام font ایجاد کنید . 

حالا فایل فونت مورد نظر رو در این پوشه قرار بدید . حواستون باشه اسم فایل فونت با حروف بزرگ شروع نشه که اندروید استودیو اشکال میگیره

فونت ها اصولا از اندروید 26 به بالا میتونن استفاده بشه و برای اینکه بشه تا اندروید 16 هم از فونت استفاده کرد باید این روش رو بکار بگیرید و گرنه فونت اعمال نمیشه 

یه فایل xml با نام مثلا shabnam_font ایجاد کنید و کد زیر رو توش بنویسید :

<?xml version="1.0" encoding="utf-8"?>

<font-family

    xmlns:app="http://schemas.android.com/apk/res-auto">

    <font

        app:fontStyle="normal"

        app:fontWeight="400"

        app:font="@font/shabnam" />

</font-family>

app:font="@font/shabnam" همون آدرس فایل فونت ( ttf ) هست که قبلا اضافه کردیم . حالا فایل style در پوشه Values رو باز کنید و کد زیر رو بهش اضافه کنید :

<style name="textViewFont">
    <item name="android:fontFamily">@font/shabnam_font</item>
</style>
دیگه کار تمومه و میتونید از فونت جدید در جایی که خواستید استفاده کنید :
<TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     style="@style/textViewFont" />
اگر هم بخواهید از این فونت مثلا در تمام TextView های برنامه استفاه کنید کافیه کد زیر رو به theme برنامتون اضافه کنید تا هر جا TextView داریم با این فونت تغییر کنه :
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <!-- Customize your theme here. -->
     <item name="colorPrimary">@color/colorPrimary</item>
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
     <item name="colorAccent">@color/colorAccent</item>
     <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
     <item name="android:textViewStyle">@style/creditCardText</item>
</style>
موفق باشید 
۰ نظر موافقین ۰ مخالفین ۰
مرتضی درزی

تغییر نام package اپلیکیشن اندروید

شاید برای شما هم پیش اومده باشه که بخواهید نام package اپ اندروید رو تغییر بدید ولی نمی دونید از کجا باید شروع کنید و چی رو باید تغییر بدید که پروژه تون از دست نره . با هم روش درستش رو می بینیم :

فرض کنید میخواهیم com.example.app به com.my.application  تغییر بدیم :


  • در Project pane ایکون تنظیمات رو کلیک کرده و تیک کنار Compact Empty Middle Packages رو بردارید . با اینکار فایل پروژه بصورت درختی نمایش داده میشه و می تونید ببینید com , example , app بصورت پوشه در میان

  • حالا رو پوشه example راست کلیک کرده و Refactor - > Rename رو انتخاب کنید 
  • در پنجره باز شده Rename Package رو انتخاب کنید و نام my رو وارد کرده و Refactor رو بزنید 
  • در پنل باز شده که لیست تغییرات مورد نیاز را نمایش میدهد نیز Do Refactor رو بزنید . اندروید استدیو باقی کار ها رو انجام میدهد 
  • همین کار رو برای پوشه app و تغییر نام به application  انجام بدید 
  • فایل manifest رو بازکنید و   "package="com.example.app رو به  "package="com.my.application تغییر بدید
  • فایل (build:gradle (app رو باز کنید و "applicationId "com.example.app را نیز مثل بالا تغییر دهید 
  • حالا پروژه را sync کنید و لذت ببرید

پی نوشت : احتمالا پوشه اصلی پروژه به نام قبلی app باقی مانده که فقط کافیه اون رو تغییر نام بدید هر چند در پروژه تاثیری نداره



۱ نظر موافقین ۱ مخالفین ۰
مرتضی درزی

دیباگ مستقیم اپ روی گوشی

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

Android Global Exception Handler

اینکار به سادگی با java.lang.Thread.UncaughtExceptionHandler قابل انجامه ولی باید یکی از دو روش زیر رو انتخاب کنید :

1.خطایابی در سطح Application که در این صورت نمی توانید dialog باز کنید و یا اکتیویتی جدیدی اجرا کنید با این حال هر نوع خطایابی قابل اجرا خواهد شد 

2.خطایابی در سطح Activity که به راحتی میتوان dialog یا اکتیویتی دیگری باز کرد ولی باید در یک کلاس ارث بری شده توسط اکتیویتی ها نوشته شود ( مثلا BaseActivity )

خطایابی در سطح Application

در این روش log ایرور بصورت فایل روی دستگاه ذخیره خواهد شد تا در اجرای دوباره اپ بتوان از آن استفاده کرده و متن خطا را نمایش داد 


public class LoggingExceptionHandler implements Thread.UncaughtExceptionHandler {
    private final static String TAG = LoggingExceptionHandler.class.getSimpleName();
    private final static String ERROR_FILE = MyAuthException.class.getSimpleName() + ".error";
    private final Context context;
    private final Thread.UncaughtExceptionHandler rootHandler;
    public LoggingExceptionHandler(Context context) {
        this.context = context;
        // we should store the current exception handler -- to invoke it for all not handled exceptions ...
        rootHandler = Thread.getDefaultUncaughtExceptionHandler();
        // we replace the exception handler now with us -- we will properly dispatch the exceptions ...
        Thread.setDefaultUncaughtExceptionHandler(this);
    }
    @Override
    public void uncaughtException(final Thread thread, final Throwable ex) {
        try {
            Log.d(TAG, "called for " + ex.getClass());
            // assume we would write each error in one file ...
            File f = new File(context.getFilesDir(), ERROR_FILE);
            // log this exception ...
            FileUtils.writeStringToFile(f, ex.getClass().getSimpleName() + " " + System.currentTimeMillis() + "\n", true);
        } catch (Exception e) {
            Log.e(TAG, "Exception Logger failed!", e);
        }
    public static final List<String> readExceptions(Context context) {
        List<String> exceptions = new ArrayList<>();
        File f = new File(context.getFilesDir(), ERROR_FILE);
        if (f.exists()) {
            try {
                exceptions = FileUtils.readLines(f);
            } catch (IOException e) {
                Log.e(TAG, "readExceptions failed!", e);
            }
        }
        return exceptions;
    }
}

حالا باید ان را به سطح Application ضمیمه کنیم


public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        new LoggingExceptionHandler(this);
    }
}

یادتان نرود که در فایل AndroidManifest  نیز تغییرات زیر را انجام دهید 

<application
    android:name=".MyApp"

خطایابی در سطح Activity

در این روش با استفاده از ApplicationContext می توان log ایرور را بصورت مستقیم نشان داد و یا حتی اکتویتی جدیدی را اجرا کرد 

public class MyExceptionHandler implements Thread.UncaughtExceptionHandler {

    public static final String EXTRA_MY_EXCEPTION_HANDLER = "EXTRA_MY_EXCEPTION_HANDLER";
    private final Activity context;
    private final Thread.UncaughtExceptionHandler rootHandler;

    public MyExceptionHandler(Activity context) {
        this.context = context;
        // we should store the current exception handler -- to invoke it for all not handled exceptions ...
        rootHandler = Thread.getDefaultUncaughtExceptionHandler();
        // we replace the exception handler now with us -- we will properly dispatch the exceptions ...
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(final Thread thread, final Throwable ex) {
        if (ex instanceof MyAuthException) {
            // note we can't just open in Android an dialog etc. we have to use Intents here
            // http://stackoverflow.com/questions/13416879/show-a-dialog-in-thread-setdefaultuncaughtexceptionhandler

            Intent registerActivity = new Intent(context, AuthActivity.class);
            registerActivity.putExtra(EXTRA_MY_EXCEPTION_HANDLER, MyExceptionHandler.class.getName());
            registerActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            registerActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);

            context.startActivity(registerActivity);
            // make sure we die, otherwise the app will hang ...
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(0);
        } else {
            rootHandler.uncaughtException(thread, ex);
        }
    }
}

برای ضمیمه کردن این Handler باید یک کلاس ایجاد کرد تا اکتیویتی های دیگر از آن ارث بری کنند 


public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new MyExceptionHandler(BaseActivity.this);
    }
}
خودم از این روش در پروژه هام استفاده میکنم و معمولا وقتی ایرور جدید غیر قابل پیش بینی اتفاق می افته خیلی بدردم خورده ... البته چون از روش دوم استفاده میکنم بعضی از ایرور های که قبل از activity اتفاق می افتن رو نمیشه catch کرد که زیاد چنین اتفاقی نمی افته . من برای نمایش متن ایرور از اکتویتی جدید و یک TextView استفاده میکنم . البته نمی دونم بدلیل محدودیت String و یا TextView کل متن ایرور نمایش داده نمیشه که زیاد فرقی نمیکنه و معمولا از همون خطوط اول مشخص میشه خطا برای چیه 
۰ نظر موافقین ۰ مخالفین ۰
مرتضی درزی

یه کتابخانه کاتلین پرکاربرد

یه کتابخانه کاتلین ( Kotlin lib ) میخوام امروز بهتون معرفی کنم . با نام KdroidExt که میتونید از github توضیحاتش رو ببینید.
کتابخانه همه کاره ای که میتونید باهاش از کد زدن های اضافه ( boilerplate code ) جلوگیری کنید . توضیحاتش تو صفحه اش هست و میشه گفت تقریبا تو هر پروژه ای به یکی از این متدها احتیاج پیدا خواهید کرد . 

شاد باشید
۰ نظر موافقین ۱ مخالفین ۰
مرتضی درزی

طراحی رابط کاربری موبایل

یکی از مراحل دشوار ساخت اپلیکیشن موبایل ، طراحی رابط کاربریه ، اونم بصورت درست و اصولی . برای ما برنامه نویس ها ( developer ) که بیشتر با کد نویسی سروکار داریم ، طراحی رابط کاربری کاربر پسند یک مشکل بزرگه . چون از ظرافت و اصول طراحی زیاد اطلاع نداریم و فقط میدونیم چطور میشه کدش رو نوشت 

اما اگه آستین ها رو بالا زدید و میخواید طراحی رو شروع کنید ولی مسلما مثل هر برنامه نویس دیگه نرم افزار های طراحی مثل Photoshop , Sketch , Invision ندارید بهتره از بعضی از اپلیکیشن های انلاین استفاده کنید که اتفاقا خود طراحان هم تو کارهاشون ازش استفاده میکنن . 

یکی از این اپ های آنلاین که جالب و زیبا ساخته شده Fluid UI . اپی که برای طراحی رابط کاربری موبایل ، تبلت و وب ساخته شده و شما میتونید از تمام المان های استفاده شده در موبایل در طراحی اولیه تون استفاده کنید .

از جمله امکانات این اپ آنلاین 

نمونه سازی سریع 

به راحتی و با سرعت میتونید از المان های متریال دیزاین در اندروید و ios استفاده کنید .

اشتراک گذاری 

میتونید بصورت گروهی در ساخت طراحی شرکت کنید و هر کدام بصورت جدا یکی از کارها رو انجام داده و به اشتراک بگذارید 

دسترسی آسان 

بدلیل انلاین بودن اپ میتونید از هر کجا که اینترنت دارید کار طراحیتون رو ادامه بدید 

پیش نمایش روی موبایل 

میتونید با نصب اپلیکیشن اندروید این سایت و اسکن QR پروژه روی موبایلتون بصورت واقعی نتیجه رو ببینید 


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


شما هم اگه اپ یا سایت دیگه ای میشناسید معرفی کنید ...

۰ نظر موافقین ۱ مخالفین ۰
مرتضی درزی