آموزس ساخت صفحه اسپلش با زبان کاتلین
سلام،
این اولین محتوای آموزشی است که من تولید میکنم، از اینرو امیدوارم از ایرادات احتمالی چشمپوشی بفرمایید. 🙂
صفحهی اسپلش (Splash Screen) چیست؟ - به نقل از ویکیپدیا-
تصویری است که هنگام بارگذاری یک برنامه یا بازی ظاهر میشود. صفحههای اسپلش تمام نمایشگر یا بطور ساده یک مستطیل نزدیک وسط صفحه نمایش را پوشش میدهد.
در حقیقت صفحهی اسپلش صفحهای است که به هنگام اجرای یک اپ، قبل از صفحهی اصلی اون اپ به کاربر نمایش داده میشه.
من سعی کردم تو این آموزش راحتترین شیوهی ساخت صفحهی اسپلش رو به شما آموزش بدم. در این آموزش از محیط Android Studio استفاده شده و زبان برنامهنویسی مورد استفاده قرار گرفته هم Kotlin هستش. بریم سراغ آموزش...
اولین قدم برای ساخت یک صفحهی اسپلش ایجاد یک Activity جدید از نوع Empty Activity تو پروژهمون هستش، برای این منظور مطابق تصویر زیر عمل میکنیم:
پس از ایجاد Activity مربوط به صفحهی اسپلش، به طراحی رابط کاربری این صفحه در فایل xml مربوطه میپردازیم.
که این بخش کاملا سلیقهای هستش و از حوصلهی این مطلب خارجه و من ازش عبور میکنم.
بعد از طراحی ظاهر صفحهی اسپلشمون نوبت میرسه به قسمت شیرین کدنویسی 😀 ...
برای این منظور به کلاس مربوطه در پوشه java که در آغاز آموزش ساختیم مراجعه میکنیم و این فایل رو باز میکنیم.
من ابتدا کدهایی که باید در این قسمت بنویسید رو اینجا میارم بعد بررسی میکنیم که هر کد چه کار انجام میده.
package ir.masihreyhani.estelamimport android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundleclass SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)val splashTime = object : Thread() {
override fun run() {
super.run()
try {
Thread.sleep(3000)
} catch (e:Exception) {} finally {
startActivity(Intent(this@SplashActivity,MainActivity::class.java))
}
}
}
splashTime.start()
}
}
کار ما از سطر ۹ شروع میشه...
- اولین کاری که انجام دادیم اینه که یک ظرف ثابت از نوع val به نام splashTime ایجاد کردیم و اومدیم یک شئ از نوع Thread() ایجاد کردیم که در واقع این Thread کار مدیریت صفحهی اسپلش ما رو بر عهده خواهد داشت.
- بعد از اون تابع run() رو نوشتیم که شامل یک بلوک try-catch-finally هستش.
- در سطر ۱۳، با دستور Thread.sleep(3000) مشخص کردیم که Thread ما ۳۰۰۰ میلیثانیه (معادل ۳ ثانیه) در حالت Sleep قرار بگیره. در واقع مشخص کردیم که صفحهی اسپلش ما ۳ ثانیه به کاربر نمایش داده بشه!
- در سطر ۱۵ از کدهامون، اومدیم از startActivity() استفاده کردیم که کار این دستور انتقال کاربر از یک Activity به Activity دیگر هستش و همونطور که در دستور مشخصه؛
startActivity(Intent(this@SplashActivity,MainActivity::class.java))
گفتیم که از this@SplashActivity (Activity جاری) به MainActivity::class.java منتقل بشه.
- و در نهایت در سطر ۲۰ برنامه متد start()، splashTimeمون رو فراخوانی کردیم.
حالا تقریبا کار ساخت صفحهی اسپلش ما به اتمام رسیده، منتهی تنها نکتهای که باقی میمونه ویرایش فایل AndroidManifest مون هستش.
همونطور که احتمالا مستحضر هستید هر Activity که در یک برنامه ایجاد میشه اون Activity به صورت اتوماتیک به فایل AndroidManifest اضافه میشه.
تنها کاری که لازمه انجام بدیم اینه که در فایل AndroidManifest مشخص کنیم که Activity مربوط به صفحهی اسپلش ما باید بعنوان اولین Activity در زمان اجرای برنامه به کاربر نمایش داده بشه
برای این منظور کافیه که به مطابق تصویر زیر عمل کنید و کدهای؛
<intent-filter>
<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
رو از MainActivity پاک کنید و به Activity صفحهی اسپلش یا هر Activity دیگهای که میخواید در ابتدای اجرای برنامه به کاربر نمایش داده بشه، اضافه کنید!
به این ترتیب شما میتونید یک صفحه اسپلش به برنامههای اندرویدیتون اضافه کنید!
رفع یک ایراد...
تنها مشکلی که صفحهی اسپلش ما داره اینه که وقتی کاربر بعد از نمایش صفحهی اسپلش به صفحهی اصلی برنامه منتقل میشه با زدن دکمهی Back صفحهی اسپلش مجددا به کاربر نمایش داده میشه که این صحیح نیست و برای این منظور باید از دستور finish() در متد onPause() استفاده کنیم...
override fun onPause() {
super.onPause()
finish()
}
من برای اینکه مشخص باشه این کد دقیقا در کجا قرار میگیره، یک بار دیگه کد نهایی این بخش رو اینجا میذارم.
package ir.masihreyhani.estelamimport android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundleclass SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)val splashTime = object : Thread() {
override fun run() {
super.run()
try {
Thread.sleep(3000)
} catch (e:Exception) {} finally {
startActivity(Intent(this@SplashActivity,MainActivity::class.java))
}
}
}
splashTime.start()
}override fun onPause() {
super.onPause()
finish()
}
}
خب...
امیدوارم که این آموزش بتونه مفید واقع بشه و نقطهی شروعی باشه برای پستهای بعدی... 🙂
عالی بود جناب مهندس ریحانی
منتظر آموزش های بعدی شما هستیم
ممنون و ارادتمندم،
درس پس میدم قربان!