در دو فصل قبلی درباره View های اندروید مانند TextView و EditText و ImageView و … نوشتم. در این فصل تعداد دیگری از View های اندروید را معرفی می کنم.
Time and Date
در پالت Date and Time ویوهای مرتبط با تاریخ و ساعت قرار گرفته اند. این View ها علیرغم این که به شدت کاربردی و مورد نیاز هستند، به علت تفاوت ساعت و تقویم ایرانی، معمولاً قابل استفاده در برنامه های ایرانی و فارسی نیستند و نیاز به جایگزینی آنها با View های مناسب به شدت احساس می شود.
TimePicker
از این View برای انتخاب زمان استفاده می شود. می توان زمان را به فرمت ۲۴ ساعته یا ۱۲ ساعته به همراه AM/PM نمایش داد:
DatePicker
از این View برای انتخاب تاریخ استفاده می شود. متأسفانه این View قابلیت این که تاریخ را بر مبنای تقویم کشورها و مناطق مختلف نمایش دهد ندارد:
این View در اندرویدهای با API Level بالاتر از ۱۱، به صورت پیش فرض یک CalendareView هم در کنار خود دارد:
برای غیرفعال کردن نمایش این Calendar ویژگی android:calendarViewShown را برابر false قرار دهید:
android:calendarViewShown="false"
همانطور که می بینید، این View قابلیت انتخاب تاریخ هجری شمسی را ندارد. برای کمک به رفع این مشکل، یک کتابخانه کد باز در GitHub قرار داده ام به نام PersianDatePicker.
استفاده از PersianDatePicker بسیار ساده است ولی با این حال در روزهای آتی یک راهنمای تصویری برای آن خواهم نوشت.
CalendarView
مثل DatePicker، از این View هم برای انتخاب یک تاریخ استفاده می شود. تفاوت این دو View در شکل نمایش و انتخاب تاریخ است:
همانطور که در عکس می بینید، این View هم قابلیت نمایش تقویم های غیر انگلیسی را ندارد و بنابراین اگر می خواهید تقویم فارسی را نمایش دهید، باید یک View سفارشی برای این کار بنویسید. شاید در آینده PersianCalendarView را هم نوشتم!
Chronometer
از این View برای نمایش گذر زمان استفاده می شود. مثلاً فرض کنید قرار است در جایی فقط ۵ دقیقه سخنرانی کنید. می توانید با شروع سخنرانی، این View را start کنید و با نگاه کردن به آن زمان گذشته را ببینید:
ویژگی های این View بسیار شبیه TextView است. برای کنترل این View باید در کد جاوا اقدام کنید که در فصل های آتی می آموزید.
AnalogClock
از این View برای نمایش یک ساعت آنالوگ استفاده می شود. این View همواره زمان فعلی سیستم را نمایش می دهد:
DigitalClock
از این View برای نمایش ساعت فعلی سیستم به صورت یک ساعت دیجیتال استفاده می شود:
ویژگی های این View مشابه ویژگی های TextView است.
Transitions
View های معرفی شده در این قسمت، برای انتقال و جابجایی بین View ها استفاده می شوند. برای استفاده از آنها غالباً نیاز است که تنظیمات بسیاری را در کد انجام دهید و عملکرد اصلی آنها در کد جاوا مشخص می شود نه در فایل های Layout. با این حال برای هر کدام از آنها توضیح مختصری می نویسم تا با آنها آشنا شوید و در آینده در صورت ضرورت آنها را معرفی خواهم کرد.
ImageSwitcher
گاهی پیش می آید که با یک ImageView می خواهیم ۲ یا چند عکس را نمایش دهیم. در واقع می خواهیم بین چند عکس با انیمیشن و افکت حرکت کنیم. برای این کار از ImageSwitcher استفاده می کنیم.
اگر عجله دارید و می خواهید زودتر کار کردن با ImageSwitcher را یاد بگیرید، اینجا و اینجا را ببینید!
AdapterViewFlipper و ViewFlipper
از ViewFlipper هم مثل ImageSwitcher برای حرکت کردن بین View ها استفاده می شود. دو یا چند View به ViewFlipper اضافه می کنیم که در هر لحظه فقط یکی از آنها نمایش داده می شود. حالا می توان با استفاده از دکمه هایی مثل «بعدی» و «قبلی» یا با استفاده از ژست های حرکتی (همان جسچرها) بین View ها حرکت کرد.
ViewFlipper قابلیت بازیافت View ها برای استفاده مجدد را ندارد و به همین دلیل در بعضی مواقع ممکن است مشکلاتی را برای سیستم به وجود بیاورد. برای رفع این مشکل در API Level 11 یک View جدید به نام AdapterViewFlipper به اندروید اضافه شده است.
برای مطالعه زودهنگام درباره ViewFlipper و دیدن چند مثال از نحوه استفاده از آن اینجا و اینجا و اینجا را ببینید.
StackView
StackView هم برای نمایش چندین View روی هم شبیه یک دسته کارت است. اگر View بالایی را جابجا کنید، View پایینی نمایش داده می شود و به صورت چرخشی همه View ها نمایش می شوند:
برای مطالعه بیشتر درباره StackView و دیدن مثالی از نحوه استفاده از آن اینجا را ببینید.
TextSwitcher
TextSwitcher همانطور که از اسمش پیدا است، نوع خاصی از TextView است که بین چند متن مختلف با انیمیشن و به زیبایی حرکت می کند.
برای مطالعه بیشتر درباره TextSwitcher و دیدن مثالی از نحوه استفاده از آن اینجا را ببینید.
Advanced
در این پالت تعدادی از View های اندروید معرفی شده اند که چون هیچ سنخیت . مشابهتی با هم ندارند، همگی تحت عنوان Advanced اینجا قرار گرفته اند!
requestFocus
اگر یک EditText ر با requestFocus تعریف کنیم، وقتی صفحه نمایش داده می شود، فوکوس می آید روی آن EditText و صفحه کلید هم باز می شود و کاربر می تواند به سرعت متن خود را بنویسد. کد یک EditText با requestFocus شبیه قطعه کد زیر است:
<EditText android:layout_width="wrap_content" android:layout_height="wrap_content" > <requestFocus /> </EditText>
View
View پایه ای ترین View اندروید است. همه View های اندروید از این کلاس مشتق شده اند. خود View هیچ خاصیت نمایشی ندارد. معمولاً اگر بخواهیم جایی در صفحه توسط یک View اشغال شود که هیچ نمایشی ندارد و فقط جا می گیرد از ای View استفاده می کنیم. یا اگر بخواهیم مثلاً بین دو View متفاوت در صفحه یک خط افقی یا عمودی بکشیم، معمولاً از View استفاده می کنیم و به آن background می دهیم. به عکس زیر دقت کنید:
کدی که View زیر را می سازد شبیه قطعه کد زیر است:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="4dip" > <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Username:" > </EditText> <View android:layout_width="match_parent" android:layout_height="2dip" android:layout_margin="5dip" android:background="#FF0000" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Password:" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Login" /> </LinearLayout>
دقت کنید که برای کشیدن خط قرمز رنگ بین دو EditText مربوط به Username و Password از View استفاده کرده ایم.
view
اگر بخواهیم در صفحه از View های شخصی ساز استفاده کنیم، به دو روش می توانیم آنها را به صفحه اضافه کنیم. یکی این که نام کامل کلاس View را بنویسم. برای مثال PersianDatePicker که یک View شخصی ساز است را با استفاده از کد زیر به صفحه اضافه می کنیم:
<ir.smartlab.persindatepicker.PersianDatePicker android:layout_width="wrap_content" android:layout_height="wrap_content"/>
روش دوم استفاده از view و اعلام نام کلاس به عنوان یکی از ویژگی های آن است. کد زیر همان کار کد بالا را انجام می دهد:
<view class="ir.smartlab.persindatepicker.PersianDatePicker" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
مزیت روش دوم نسبت به روش اول این است که ابزارهای گرافیکی و سیستم های تولید کد و طراحان گرافیستی که اطلاعی از برنامه نویسی ندارند با این روش راحت تر کار می کنند.
TextureView
از TextureView برای نمایش محتوای استریم شده مثل ویدئو یا صحنه های OpenGL استفاده می شود. این View فقط در صفحاتی که از شتابدهنده سخت افزاری استفاده می کنند قابل استفاده است. کار کردن با این View نیاز به اطلاعات زیادی در برنامه نویسی دارد که امیدوارم بتوانم در فصل های بعدی مفصل به این View بپردازم.
SurfaceView
از SurfaceView هم مانند TextureView برای کشیدن گرافیک های اختصاصی که نیاز به رندر بالا دارند مثل نمایش ویدئو، پیش نمایش دوربین، بازیهای OpenGL و … استفاده می شود. کار کردن با این View نیاز به اطلاعات زیادی در برنامه نویسی دارد که امیدوارم بتوانم در فصل های بعدی مفصل به این View بپردازم.
NumberPicker
یک View ساده برای انتخاب یک عدد یا یک متن. این View متن یا اعداد را مثل یک چرخ نمایش می دهد و کاربر می تواند از میان آنها یکی را انتخاب کند:
بعد از افزودن این View به صفحه، کد زیر به صفحه اضافه می شود:
<NumberPicker android:layout_width="wrap_content" android:layout_height="wrap_content" />
محدوده اعدادی که این View نمایش می دهد باید در کد تعریف شود.
ZoomButton
عملکرد این View بسیار شبیه Button است. در اصل همان Button است با یک تصویر!
ZoomControls
برای وقتی که می خواهید دو دکمه zoom-in و zoom-out را در صفحه نمایش بدهیم، از این View استفاده می کنیم. این View عمل zoom-in یا zoom-out را انجام نمی دهد و برنامه نویس باید عملکرد این دو دکمه را پیاده سازی کند:
Custum & Library Views
اگر در پروژه تان یا کتابخانه های وابسته به آن View های شخصی سازی شده ای وجود داشته باشد، فهرستی از آنها را اینجا خواهید دید.
با ما باشید در فصل بعد!
سلام دوستان من یک برنامه ساختم که سن رو محاسبه کنه یعنی از ۹ تا ادیت تکست تشکیل شده که تاریخ را وارد میکنید و تاریخ تولد را هم می زنید و سپس دکمه را میزنید و سال و ماه روز سن شمارا میگه
حالا مشکل من این جاس که می خوام برای ماه و روز حد بگذارم تا ماه بین ۱-۱۲ بماند و روز هم بین ۱-۳۱ الان اگه ۵رو از ۹ مثلا کم کنی جواب منی میده ۴- میزنه ماه رو درصورتی که باید بگه ۸
اگه سریع تر کمکم کنید، بسیار ممنون میشم پروژه ام هست گیر افتادم.
ممنون
سلام
استاد tab host رو آموزش نمیدین؟
سلام
واقعا خسته نباشید.من تنها منبع فارسی معتبر و ساده و اموزنده که پیدا کردم همینجا بود.به معنای واقعی عالی
اگر ممکنه اموزش recyclerview رو هم لطف کنید قرار بدید.
ممنون از لطفتون
سلام
خیلی م.جز و مفید اطلاعات خوبی در اختیارم گذاشتید خیلی ممنون.
اگر بتونید اکثر بخش ها رو همین طور بگید واقعا عالیه.