API های اندروید 3.0

سطح API: 11

برای توسعه دهندگان، پلت فرم Android 3.0 ( HONEYCOMB ) به عنوان یک مؤلفه قابل دانلود برای Android SDK در دسترس است. پلتفرم قابل دانلود شامل کتابخانه اندروید و تصویر سیستم، و همچنین مجموعه ای از پوسته های شبیه ساز و موارد دیگر است. پلتفرم قابل دانلود شامل هیچ کتابخانه خارجی نیست.

برای توسعه دهندگان، پلتفرم Android 3.0 به عنوان یک جزء قابل دانلود برای Android SDK در دسترس است. پلتفرم قابل دانلود شامل کتابخانه اندروید و تصویر سیستم، و همچنین مجموعه ای از پوسته های شبیه ساز و موارد دیگر است. برای شروع توسعه یا آزمایش با Android 3.0، از Android SDK Manager برای دانلود پلتفرم در SDK خود استفاده کنید.

نمای کلی API

بخش‌های زیر یک نمای کلی فنی از چیزهای جدید برای توسعه‌دهندگان در Android 3.0، از جمله ویژگی‌های جدید و تغییرات در چارچوب API نسبت به نسخه قبلی ارائه می‌دهند.

قطعات

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

همچنین می‌توانید از یک قطعه بدون ارائه رابط کاربری استفاده کنید و در عوض از قطعه به‌عنوان کارگر برای فعالیت استفاده کنید، مثلاً برای مدیریت پیشرفت دانلودی که فقط در حین اجرای فعالیت انجام می‌شود.

علاوه بر این:

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

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

برای انجام یک تراکنش، مانند افزودن یا حذف یک قطعه، باید یک FragmentTransaction ایجاد کنید. سپس می توانید متدهایی مانند add() remove() , یا replace() را فراخوانی کنید. هنگامی که تمام تغییراتی را که می خواهید برای تراکنش انجام دهید اعمال کردید، باید commit() را فراخوانی کنید و سیستم تراکنش قطعه را روی اکتیویتی اعمال می کند.

برای اطلاعات بیشتر در مورد استفاده از قطعات، مستندات Fragments را بخوانید. چندین نمونه نیز در برنامه API Demos موجود است.

نوار اکشن

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

  • آیتم های منو را مستقیماً در نوار اقدام به عنوان "اقلام اقدام" اضافه کنید.

    در اعلان XML برای آیتم منو، ویژگی android:showAsAction با مقدار "ifRoom" وارد کنید. وقتی فضای کافی وجود دارد، آیتم منو مستقیماً در نوار اقدام ظاهر می شود. در غیر این صورت، آیتم در منوی سرریز قرار می گیرد که توسط نماد منو در سمت راست نوار اقدام آشکار می شود.

  • یک آیتم اقدام را با یک ویجت (مانند یک کادر جستجو) جایگزین کنید — ایجاد یک "نمای عمل".

    در اعلان XML برای آیتم منو، ویژگی android:actionViewLayout با یک منبع طرح‌بندی یا ویژگی android:actionViewClass با نام کلاس یک ویجت اضافه کنید. (همچنین باید ویژگی android:showAsAction اعلام کنید تا مورد در Action Bar ظاهر شود.) اگر فضای کافی در Action Bar وجود نداشته باشد و مورد در منوی سرریز ظاهر شود، مانند یک آیتم منو معمولی رفتار می کند و نشان داده نمی شود. ویجت

  • یک عمل به لوگوی برنامه اضافه کنید و آن را با یک لوگوی سفارشی جایگزین کنید

    نشان‌واره برنامه به‌طور خودکار شناسه android.R.id.home اختصاص می‌یابد که سیستم با لمس کردن آن را به پاسخ تماس onOptionsItemSelected() فعالیت شما تحویل می‌دهد. به سادگی به این شناسه در روش پاسخ به تماس خود پاسخ دهید تا عملی مانند رفتن به فعالیت "خانه" برنامه خود را انجام دهید.

    برای جایگزینی نماد با یک لوگو، لوگوی برنامه خود را در فایل مانیفست با ویژگی android:logo مشخص کنید، سپس setDisplayUseLogoEnabled(true) را در فعالیت خود فراخوانی کنید.

  • خرده نان را اضافه کنید تا در پشته قطعات به عقب حرکت کنید
  • برای پیمایش در قطعات، برگه ها یا یک لیست کشویی اضافه کنید
  • نوار اقدام را با تم ها و پس زمینه ها سفارشی کنید

نوار اقدام برای همه برنامه‌هایی که از تم هولوگرافیک جدید استفاده می‌کنند، استاندارد است، که وقتی android:minSdkVersion یا android:targetSdkVersion را روی "11" تنظیم می‌کنید، استاندارد است.

برای اطلاعات بیشتر در مورد Action Bar، مستندات Action Bar را بخوانید. چندین نمونه نیز در برنامه API Demos موجود است.

کلیپ بورد سیستم

اکنون برنامه‌ها می‌توانند داده‌ها (فراتر از متن صرف) را در و از کلیپ‌بورد کل سیستم کپی و جای‌گذاری کنند. داده های بریده شده می توانند متن ساده، URI یا intent باشند.

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

برای شروع استفاده از کلیپ بورد، شیء کلی ClipboardManager را با فراخوانی getSystemService(CLIPBOARD_SERVICE) دریافت کنید.

برای کپی کردن یک آیتم در کلیپ بورد، باید یک شی ClipData جدید ایجاد کنید که یک یا چند شی ClipData.Item را در خود نگه می دارد که هر کدام یک موجودیت واحد را توصیف می کنند. برای ایجاد یک شی ClipData حاوی فقط یک ClipData.Item ، می توانید از یکی از روش های کمکی مانند newPlainText() ، newUri() و newIntent() استفاده کنید که هر کدام یک شی ClipData از پیش بارگذاری شده با ClipData.Item را برمی گرداند. شما فراهم می کنید.

برای افزودن ClipData به کلیپ بورد، آن را به setPrimaryClip() برای نمونه ClipboardManager ارسال کنید.

سپس می توانید با فراخوانی getPrimaryClip() در ClipboardManager یک فایل را از کلیپ بورد بخوانید (به منظور چسباندن آن). کار با ClipData که دریافت می‌کنید می‌تواند پیچیده باشد و باید مطمئن شوید که می‌توانید نوع داده موجود در کلیپ بورد را قبل از تلاش برای جای‌گذاری آن کنترل کنید.

کلیپ بورد فقط یک قطعه از داده های بریده شده (یک شی ClipData ) را در یک زمان نگه می دارد، اما یک ClipData می تواند حاوی چندین ClipData.Item باشد.

برای اطلاعات بیشتر، اسناد کپی و چسباندن را بخوانید. همچنین می توانید اجرای ساده کپی و پیست را در نمونه API Demos و پیاده سازی کامل تر را در نمونه Note Pad مشاهده کنید.

بکشید و رها کنید

API های جدید عملیات کشیدن و رها کردن را در رابط کاربری برنامه شما ساده می کنند. عملیات کشیدن، انتقال نوعی از داده ها است که در یک شیء ClipData از یک مکان به مکان دیگر حمل می شود. نقطه شروع و پایان عملیات کشیدن یک View است، بنابراین APIهایی که مستقیماً عملیات کشیدن و رها کردن را انجام می دهند در کلاس View هستند.

یک عملیات کشیدن و رها کردن یک چرخه حیات دارد که توسط چندین عمل کشیدن تعریف می‌شود - که هر کدام توسط یک شی DragEvent تعریف می‌شوند - مانند ACTION_DRAG_STARTED ، ACTION_DRAG_ENTERED ، و ACTION_DROP . هر نمائی که می خواهد در یک عملیات کشیدن شرکت کند می تواند به این اقدامات گوش دهد.

برای شروع کشیدن محتوا در فعالیت خود، startDrag() را در یک View فراخوانی کنید، یک شی ClipData که داده‌های مورد نظر را برای کشیدن نشان می‌دهد، یک View.DragShadowBuilder برای تسهیل «سایه‌ای» که کاربران در هنگام کشیدن زیر انگشتان خود می‌بینند، و یک Object که می تواند اطلاعات مربوط به شی درگ را با نماهایی که ممکن است شی را دریافت کنند به اشتراک بگذارد.

برای پذیرش یک شیء کشیدن در یک View (دریافت "افت")، با فراخوانی setOnDragListener() نما را با OnDragListener ثبت کنید. هنگامی که یک رویداد کشیدن در نما رخ می دهد، سیستم onDrag() برای OnDragListener فراخوانی می کند، که DragEvent را دریافت می کند که نوع عمل کشیدن رخ داده را توصیف می کند (مانند ACTION_DRAG_STARTED ، ACTION_DRAG_ENTERED ، و ACTION_DROP ). در طول کشیدن، سیستم به طور مکرر onDrag() برای نمای زیر درگ فراخوانی می کند تا جریانی از رویدادهای کشیدن را ارائه دهد. نمای دریافت کننده می تواند نوع رویداد تحویل داده شده به onDragEvent() با فراخوانی getAction() در DragEvent پرس و جو کند.

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

برای اطلاعات بیشتر، اسناد کشیدن و رها کردن را بخوانید. همچنین می توانید اجرای کشیدن و رها کردن را در برنامه API Demos و برنامه Honeycomb Gallery مشاهده کنید.

ویجت های برنامه

Android 3.0 از چندین کلاس ویجت جدید برای ویجت های برنامه تعاملی بیشتر در صفحه اصلی کاربران پشتیبانی می کند، از جمله: GridView ، ListView ، StackView ، ViewFlipper ، و AdapterViewFlipper .

مهمتر از آن، می‌توانید از RemoteViewsService جدید برای ایجاد ویجت‌های برنامه با مجموعه‌ها، با استفاده از ویجت‌هایی مانند GridView ، ListView ، و StackView که توسط داده‌های راه دور پشتیبانی می‌شوند، مانند یک ارائه‌دهنده محتوا، استفاده کنید.

کلاس AppWidgetProviderInfo (در XML با عنصر <appwidget-provider> تعریف شده است) همچنین از دو فیلد جدید پشتیبانی می کند: autoAdvanceViewId و previewImage . فیلد autoAdvanceViewId به شما امکان می دهد شناسه نمای ویجت فرعی برنامه را مشخص کنید که باید توسط میزبان ویجت برنامه به طور خودکار ارتقا یابد. قسمت previewImage پیش نمایشی از ظاهر ویجت برنامه را مشخص می کند و از انتخابگر ویجت به کاربر نشان داده می شود. اگر این فیلد ارائه نشده باشد، از نماد ویجت برنامه برای پیش نمایش استفاده می شود.

برای کمک به ایجاد یک تصویر پیش‌نمایش برای ویجت برنامه شما (برای مشخص کردن در قسمت previewImage )، شبیه‌ساز Android شامل برنامه‌ای به نام «پیش‌نمایش ویجت» است. برای ایجاد یک تصویر پیش‌نمایش، این برنامه را اجرا کنید، ویجت برنامه را برای برنامه خود انتخاب کنید و آن را تنظیم کنید که چگونه می‌خواهید تصویر پیش‌نمایش شما نمایش داده شود، سپس آن را ذخیره کنید و در منابع قابل ترسیم برنامه خود قرار دهید.

می‌توانید پیاده‌سازی ویژگی‌های ویجت برنامه جدید را در برنامه‌های StackView App Widget و Weather List Widget مشاهده کنید.

اعلان های نوار وضعیت

APIهای Notification برای پشتیبانی از اعلان‌های نوار وضعیت غنی از محتوای بیشتر توسعه یافته‌اند، به علاوه یک کلاس Notification.Builder جدید به شما امکان می‌دهد به راحتی اشیاء Notification ایجاد کنید.

ویژگی های جدید عبارتند از:

  • پشتیبانی از یک نماد بزرگ در اعلان، با استفاده از setLargeIcon() . این معمولاً برای برنامه‌های اجتماعی برای نشان دادن عکس تماس شخصی که منبع اعلان است یا برای برنامه‌های رسانه برای نمایش تصویر کوچک آلبوم است.
  • پشتیبانی از طرح‌بندی‌های سفارشی در نوار وضعیت، با استفاده از setTicker() .
  • پشتیبانی از طرح‌بندی اعلان‌های سفارشی برای شامل دکمه‌هایی با PendingIntent s، برای ابزارک‌های اعلان تعاملی بیشتر. به عنوان مثال، یک اعلان می تواند پخش موسیقی را بدون شروع فعالیت کنترل کند.

لودرهای محتوا

APIهای چارچوب جدید بارگذاری ناهمزمان داده ها را با استفاده از کلاس Loader تسهیل می کنند. می توانید از آن در ترکیب با اجزای رابط کاربری مانند نماها و قطعات برای بارگذاری پویا داده ها از موضوعات کارگر استفاده کنید. زیر کلاس CursorLoader به طور ویژه طراحی شده است تا به شما کمک کند این کار را برای داده هایی که توسط یک ContentProvider پشتیبانی می شوند انجام دهید.

تنها کاری که باید انجام دهید این است که رابط LoaderCallbacks را پیاده سازی کنید تا زمانی که بارگیری جدید درخواست می شود یا داده ها تغییر کرده است، تماس ها را دریافت کنید، سپس initLoader() را فراخوانی کنید تا بارگذار را برای فعالیت یا قطعه خود مقداردهی کنید.

برای اطلاعات بیشتر، مستندات Loaders را بخوانید. همچنین می‌توانید کد نمونه با استفاده از لودرها را در نمونه‌های LoaderCursor و LoaderThrottle مشاهده کنید.

بلوتوث A2DP و API های هدست

اندروید اکنون شامل APIهایی برای برنامه‌هایی است که وضعیت دستگاه‌های بلوتوث A2DP و پروفایل هدست متصل را تأیید می‌کنند. به عنوان مثال، برنامه ها می توانند تشخیص دهند که یک هدست بلوتوث برای گوش دادن به موسیقی چه زمانی متصل است و در صورت لزوم به کاربر اطلاع دهند. برنامه‌ها همچنین می‌توانند پخش‌هایی را برای دستورات AT خاص فروشنده دریافت کنند و کاربر را در مورد وضعیت دستگاه متصل، مانند زمانی که باتری دستگاه متصل کم است، آگاه کنند.

می‌توانید با فراخوانی getProfileProxy() با مشخصات A2DP یا HEADSET و یک BluetoothProfile.ServiceListener بلوتوث پروفایل مربوطه BluetoothProfile مقداردهی اولیه کنید تا زمانی که کلاینت بلوتوث متصل است یا قطع شود، تماس‌های برگشتی دریافت کنید.

چارچوب انیمیشن

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

  • مدت زمان
  • مقدار و رفتار را تکرار کنید
  • نوع درونیابی زمانی
  • انیماتور تنظیم می کند تا انیمیشن ها را با هم، متوالی یا پس از تاخیرهای مشخص پخش کند
  • تاخیر بازخوانی قاب

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

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

علاوه بر این، کلاس LayoutTransition انیمیشن های انتقال خودکار را برای تغییراتی که در طرح بندی فعالیت خود ایجاد می کنید، فعال می کند. برای فعال کردن انتقال برای بخشی از طرح، یک شی LayoutTransition ایجاد کنید و با فراخوانی setLayoutTransition() آن را در هر ViewGroup تنظیم کنید. این باعث می شود که انیمیشن های پیش فرض هر زمان که مواردی به گروه اضافه یا از آن حذف می شوند اجرا شوند. برای تعیین انیمیشن های سفارشی، setAnimator() در LayoutTransition فراخوانی کنید و یک Animator سفارشی مانند ValueAnimator یا ObjectAnimator که در بالا توضیح داده شد، ارائه دهید.

برای اطلاعات بیشتر به مستندات Property Animation مراجعه کنید. همچنین می توانید چندین نمونه با استفاده از API های انیمیشن در برنامه API Demos مشاهده کنید.

چارچوب رابط کاربری توسعه یافته

  • انتخاب چند گزینه ای برای ListView و GridView

    حالت جدید CHOICE_MODE_MULTIPLE_MODAL برای setChoiceMode() به کاربران اجازه می‌دهد چندین مورد را از ListView یا GridView انتخاب کنند. در صورت استفاده همراه با Action Bar، کاربران می توانند چندین مورد را انتخاب کنند و سپس از لیست گزینه های موجود در Action Bar (که به حالت عمل چند گزینه ای تبدیل شده است) اقدام را برای انجام انتخاب کنند.

    برای فعال کردن انتخاب چند گزینه ای، setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) را فراخوانی کنید و یک MultiChoiceModeListener را با setMultiChoiceModeListener() ثبت کنید.

    هنگامی که کاربر یک مورد را به مدت طولانی فشار می دهد، نوار اقدام به حالت عمل چند گزینه ای تغییر می کند. سیستم هنگام انتخاب موارد با فراخوانی onItemCheckedStateChanged() به MultiChoiceModeListener اطلاع می دهد.

    برای مثالی از انتخاب چند گزینه ای، لیست 15 را ببینید. کلاس جاوا در برنامه نمونه API Demos.

  • API های جدید برای تبدیل نماها

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

    متدهای جدید برای تنظیم خصوصیات view عبارتند از: setAlpha() , setBottom() , setLeft() , setRight() , setBottom() , setPivotX() , setPivotY() , setRotationX() , setRotationY() , setScaleX() , setScaleY() ، setAlpha() و دیگران.

    برخی از روش ها همچنین دارای یک ویژگی XML متناظر هستند که می توانید آن را در فایل طرح بندی خود برای اعمال یک تبدیل پیش فرض مشخص کنید. ویژگی های موجود عبارتند از: translationX ، translationY ، rotation ، rotationX ، rotationY ، scaleX ، scaleY ، transformPivotX ، transformPivotY ، و alpha .

    با استفاده از برخی از این ویژگی های view جدید در ترکیب با چارچوب جدید انیمیشن (که در بالا مورد بحث قرار گرفت)، می توانید به راحتی برخی از انیمیشن های فانتزی را در نماهای خود اعمال کنید. به عنوان مثال، برای چرخاندن یک View در محور y، ObjectAnimator با View ، ویژگی "rotationY" و مقادیر شروع و پایان ارائه دهید:

    کاتلین

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }

    جاوا

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
  • تم های هولوگرافیک جدید

    ویجت های استاندارد سیستم و ظاهر کلی دوباره طراحی شده اند و یک موضوع رابط کاربری جدید "هولوگرافیک" را در خود جای داده اند. سیستم موضوع جدید را با استفاده از سبک استاندارد و سیستم تم اعمال می کند.

    هر برنامه‌ای که پلتفرم Android 3.0 را هدف قرار می‌دهد - با تنظیم مقدار android:minSdkVersion یا android:targetSdkVersion روی "11" - به طور پیش‌فرض تم هولوگرافیک را به ارث می‌برد. با این حال، اگر برنامه شما تم خاص خود را نیز اعمال می‌کند، آنگاه طرح زمینه شما از طرح زمینه هولوگرافیک خارج می‌شود، مگر اینکه سبک‌های خود را به‌روزرسانی کنید تا تم هولوگرافیک را به ارث ببرید.

    برای اعمال تم هولوگرافیک برای فعالیت های فردی یا به ارث بردن آنها در تعاریف موضوع خود، از یکی از چندین تم جدید Theme.Holo استفاده کنید. اگر برنامه شما با نسخه اندروید پایین‌تر از 3.0 سازگار است و از تم‌های سفارشی استفاده می‌کند، باید طرح زمینه را بر اساس نسخه پلتفرم انتخاب کنید .

  • ویجت های جدید
    • AdapterViewAnimator

      کلاس پایه برای یک AdapterView که هنگام جابجایی بین نماهایش انیمیشن‌ها را اجرا می‌کند.

    • AdapterViewFlipper

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

    • CalendarView

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

    • ListPopupWindow

      خود را به نمای میزبان متصل می‌کند و فهرستی از انتخاب‌ها را نمایش می‌دهد، مانند فهرستی از پیشنهادات هنگام تایپ کردن در نمای EditText .

    • NumberPicker

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

    • PopupMenu

      یک Menu در یک پنجره بازشوی معین که به یک نما متصل است، نمایش می دهد. در صورت وجود فضا، پنجره بازشو در زیر نمای لنگر یا در صورت نبودن در بالای آن ظاهر می شود. اگر IME (صفحه‌کلید نرم) قابل مشاهده باشد، تا زمانی که کاربر منو را لمس نکند، پنجره بازشو روی IME آن همپوشانی ندارد.

    • SearchView

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

    • StackView

      نمایی که فرزندان خود را در یک پشته سه بعدی نشان می‌دهد و به کاربران اجازه می‌دهد مانند رولودکس از میان نماها بکشند.

گرافیک

  • گرافیک دوبعدی تسریع شده سخت افزاری

    اکنون می توانید با تنظیم android:hardwareAccelerated="true" در عنصر <application> عنصر مانیفست خود یا برای عناصر <activity> فردی، رندر OpenGL را برای برنامه خود فعال کنید.

    این پرچم با ترسیم سریعتر برنامه ها به آنها کمک می کند. این امر منجر به انیمیشن‌های روان‌تر، اسکرول نرم‌تر و عملکرد و پاسخ بهتر به تعامل کاربر می‌شود.

  • مشاهده پشتیبانی از لایه های سخت افزاری و نرم افزاری

    به طور پیش فرض، یک View هیچ لایه مشخصی ندارد. می‌توانید تعیین کنید که نمای توسط یک لایه سخت‌افزار یا نرم‌افزار پشتیبانی شود که با مقادیر LAYER_TYPE_HARDWARE و LAYER_TYPE_SOFTWARE مشخص شده است، با استفاده از setLayerType() یا ویژگی layerType .

    یک لایه سخت‌افزاری توسط یک بافت خاص سخت‌افزاری پشتیبانی می‌شود (به طور کلی Frame Buffer Objects یا FBO در سخت‌افزار OpenGL) و باعث می‌شود نما با استفاده از خط لوله رندر سخت‌افزار Android ارائه شود، اما تنها در صورتی که شتاب سخت‌افزار برای سلسله‌مراتب view فعال باشد. وقتی شتاب سخت‌افزاری خاموش است، لایه‌های سخت‌افزار دقیقاً مانند لایه‌های نرم‌افزار عمل می‌کنند.

    یک لایه نرم افزاری توسط یک بیت مپ پشتیبانی می شود و باعث می شود که نما با استفاده از خط لوله رندر نرم افزار اندروید ارائه شود، حتی اگر شتاب سخت افزاری فعال باشد. هنگامی که درخت نمای آسیب دیده اغلب به روز می شود، باید از لایه های نرم افزار اجتناب شود. هر به‌روزرسانی نیاز به رندر مجدد لایه نرم‌افزار دارد، که احتمالاً می‌تواند کند باشد.

    برای اطلاعات بیشتر، به اسناد LAYER_TYPE_HARDWARE و LAYER_TYPE_SOFTWARE مراجعه کنید.

  • موتور گرافیکی سه بعدی Renderscript

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

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

رسانه ها

  • ویدیوی تایم لپس

    API های دوربین فیلمبرداری اکنون از قابلیت ضبط ویدیوی تایم لپس پشتیبانی می کنند. setCaptureRate() نرخی را تعیین می کند که فریم ها باید با آن گرفته شوند.

  • پشتیبانی از بافت برای جریان تصویر

    SurfaceTexture جدید به شما امکان می دهد یک جریان تصویر را به عنوان یک بافت OpenGL ES ثبت کنید. با فراخوانی setPreviewTexture() برای نمونه Camera خود، می توانید SurfaceTexture مشخص کنید که بر اساس آن پخش ویدیو یا فریم های پیش نمایش از دوربین کشیده شود.

  • پخش زنده HTTP

    اکنون برنامه‌ها می‌توانند URL فهرست پخش M3U را به چارچوب رسانه ارسال کنند تا جلسه پخش زنده HTTP را شروع کنند. چارچوب رسانه از بیشتر مشخصات پخش زنده HTTP، از جمله نرخ بیت تطبیقی ​​پشتیبانی می کند. برای اطلاعات بیشتر به سند فرمت های رسانه پشتیبانی شده مراجعه کنید.

  • داده های EXIF

    ExifInterface شامل زمینه های جدیدی برای دیافراگم عکس، ISO و زمان نوردهی است.

  • پروفایل دوربین فیلمبرداری

    روش جدید hasProfile() و چندین نمایه کیفیت ویدیو (مانند QUALITY_1080P ، QUALITY_720P ، QUALITY_CIF و موارد دیگر) به شما امکان می دهد گزینه های کیفیت دوربین فیلمبرداری را تعیین کنید.

  • انتقال فایل رسانه دیجیتال

    این پلتفرم شامل پشتیبانی داخلی از پروتکل انتقال رسانه/تصویر (MTP/PTP) از طریق USB است که به کاربران اجازه می‌دهد به راحتی هر نوع فایل رسانه‌ای را بین دستگاه‌ها و به رایانه میزبان انتقال دهند. توسعه‌دهندگان می‌توانند بر اساس این پشتیبانی، برنامه‌هایی ایجاد کنند که به کاربران اجازه می‌دهد فایل‌های رسانه‌ای غنی را ایجاد یا مدیریت کنند که ممکن است بخواهند در دستگاه‌ها انتقال یا به اشتراک بگذارند.

  • مدیریت حقوق دیجیتال (DRM)

    چارچوب جدید مدیریت حقوق دیجیتال قابل توسعه (DRM) برای بررسی و اجرای حقوق دیجیتال. در دو لایه معماری اجرا شده است:

    • یک API چارچوب DRM، که در معرض برنامه‌ها قرار می‌گیرد و از طریق Dalvik VM برای برنامه‌های استاندارد اجرا می‌شود.
    • یک مدیر DRM کد بومی که API چارچوب را پیاده‌سازی می‌کند و یک رابط برای پلاگین‌های DRM برای مدیریت حقوق و رمزگشایی برای طرح‌های مختلف DRM در معرض دید قرار می‌دهد.

    برای توسعه دهندگان برنامه، این چارچوب یک API انتزاعی و یکپارچه ارائه می دهد که مدیریت محتوای محافظت شده را ساده می کند. API پیچیدگی عملیات DRM را پنهان می کند و یک حالت عملیاتی سازگار را برای محتوای محافظت شده و محافظت نشده و در انواع طرح های DRM امکان پذیر می کند.

    برای سازندگان دستگاه، صاحبان محتوا، و ارائه دهندگان رسانه دیجیتال اینترنتی، API افزونه چارچوب DRM ابزاری برای افزودن پشتیبانی از طرح DRM انتخابی به سیستم Android، برای اجرای ایمن حفاظت از محتوا، فراهم می‌کند.

    نسخه پیش‌نمایش هیچ افزونه DRM بومی برای بررسی و اجرای حقوق دیجیتال ارائه نمی‌کند. با این حال، سازندگان دستگاه ممکن است پلاگین های DRM را با دستگاه های خود ارسال کنند.

    می‌توانید همه APIهای DRM را در بسته android.drm پیدا کنید.

پشتیبانی از صفحه کلید

  • پشتیبانی از ویرایشگرهای Control، Meta، Caps Lock، Num Lock و Scroll Lock. برای اطلاعات بیشتر، META_CTRL_ON و فیلدهای مرتبط را ببینید.
  • پشتیبانی از صفحه کلیدهای کامل به سبک دسکتاپ، از جمله پشتیبانی از کلیدهایی مانند Escape، Home، End، Delete و غیره. با پرس و جوی getKeyboardType() و بررسی KeyCharacterMap.FULL می توانید تعیین کنید که آیا رویدادهای کلیدی از یک صفحه کلید کامل می آیند یا خیر.
  • TextView اکنون با استفاده از کلیدهای ترکیبی Control+X، Control+C، Control+V و Control+A، برش، کپی، چسباندن و انتخاب همه را بر اساس صفحه‌کلید پشتیبانی می‌کند. همچنین از PageUp/PageDown، Home/End و انتخاب متن مبتنی بر صفحه کلید پشتیبانی می کند.
  • KeyEvent چندین روش جدید اضافه می کند تا بررسی وضعیت اصلاح کننده کلید را به طور صحیح و مداوم آسان تر کند. به hasModifiers(int) , hasNoModifiers() , metaStateHasModifiers() , metaStateHasNoModifiers() مراجعه کنید.
  • برنامه‌ها می‌توانند میان‌برهای صفحه‌کلید سفارشی را با زیر کلاس‌بندی Activity ، Dialog یا View و پیاده‌سازی onKeyShortcut() پیاده‌سازی کنند. هر زمان که یک کلید با کلید کنترل ترکیب شود، چارچوب این روش را فراخوانی می کند. هنگام ایجاد منوی گزینه ها ، می توانید میانبرهای صفحه کلید را با تنظیم ویژگی android:alphabeticShortcut یا android:numericShortcut برای هر عنصر <item> (یا با setShortcut() ) ثبت کنید.
  • Android 3.0 شامل یک دستگاه "صفحه کلید مجازی" جدید با شناسه KeyCharacterMap.VIRTUAL_KEYBOARD است. صفحه کلید مجازی دارای نقشه کلید ایالات متحده به سبک دسکتاپ است که برای ترکیب رویدادهای کلیدی برای آزمایش ورودی مفید است.

رویدادهای لمسی را تقسیم کنید

قبلاً فقط یک نمای واحد می‌توانست رویدادهای لمسی را در یک زمان بپذیرد. Android 3.0 از تقسیم رویدادهای لمسی در نماها و حتی پنجره ها پشتیبانی می کند، بنابراین نماهای مختلف می توانند رویدادهای لمسی همزمان را بپذیرند.

هنگامی که یک برنامه Android 3.0 را هدف قرار می دهد، رویدادهای لمسی تقسیم به طور پیش فرض فعال می شود. یعنی زمانی که برنامه مقدار ویژگی android:minSdkVersion یا android:targetSdkVersion روی "11" تنظیم کرده باشد.

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

  • ویژگی android:splitMotionEvents برای گروه‌های مشاهده به شما امکان می‌دهد رویدادهای لمسی تقسیم‌شده را که بین نماهای کودک در یک طرح‌بندی رخ می‌دهند، غیرفعال کنید. به عنوان مثال:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>

    به این ترتیب، نماهای کودک در طرح‌بندی خطی نمی‌توانند رویدادهای لمسی را تقسیم کنند—فقط یک نما می‌تواند رویدادهای لمسی را در یک زمان دریافت کند.

  • ویژگی سبک android:windowEnableSplitTouch به شما این امکان را می‌دهد تا رویدادهای لمسی تقسیم‌شده را در پنجره‌ها با اعمال آن بر روی یک تم برای فعالیت یا کل برنامه غیرفعال کنید. به عنوان مثال:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>

    هنگامی که این طرح زمینه برای یک <activity> یا <application> اعمال می شود، فقط رویدادهای لمسی در پنجره فعالیت فعلی پذیرفته می شوند. برای مثال، با غیرفعال کردن رویدادهای لمسی تقسیم شده در پنجره ها، نوار سیستم نمی تواند رویدادهای لمسی را همزمان با فعالیت دریافت کند. این بر اینکه آیا نماهای داخل فعالیت می‌توانند رویدادهای لمسی را تقسیم کنند، تأثیری نمی‌گذارد —به‌طور پیش‌فرض، فعالیت همچنان می‌تواند رویدادهای لمسی را در بین نماها تقسیم کند.

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

وب کیت

  • کلاس WebViewFragment جدید برای ایجاد یک قطعه متشکل از WebView .
  • روش های جدید WebSettings :
    • setDisplayZoomControls() به شما امکان می دهد کنترل های بزرگنمایی روی صفحه را مخفی کنید در حالی که همچنان به کاربر اجازه می دهد با حرکات انگشت بزرگنمایی کند ( setBuiltInZoomControls() باید true تنظیم شود).
    • متد جدید WebSettings ، setEnableSmoothTransition() به شما امکان می‌دهد تا هنگام حرکت و بزرگنمایی، انتقال صاف را فعال کنید. وقتی فعال باشد، WebView راه حلی را برای به حداکثر رساندن عملکرد انتخاب می کند (به عنوان مثال، محتوای WebView ممکن است در طول انتقال به روز نشود).
  • روش های جدید WebView :
    • پاسخ به تماس onPause() برای توقف هرگونه پردازش مرتبط با WebView در صورت مخفی شدن. این برای کاهش ترافیک غیر ضروری CPU یا شبکه زمانی که WebView در پیش زمینه نیست مفید است.
    • پاسخ به تماس onResume() ، برای از سرگیری پردازش مرتبط با WebView، که در طول onPause() متوقف شد.
    • saveWebArchive() به شما امکان می دهد نمای فعلی را به عنوان یک آرشیو وب در دستگاه ذخیره کنید.
    • showFindDialog() یک جستجوی متنی را در نمای فعلی آغاز می کند.

مرورگر

برنامه مرورگر ویژگی های زیر را برای پشتیبانی از برنامه های وب اضافه می کند:

  • ضبط رسانه ای

    همانطور که در مشخصات HTML Media Capture تعریف شده است، مرورگر به برنامه های کاربردی وب اجازه می دهد تا به قابلیت های ضبط صدا، تصویر و ویدئو دستگاه دسترسی داشته باشند. به عنوان مثال، HTML زیر یک ورودی برای کاربر فراهم می کند تا عکسی را برای آپلود بگیرد:

    <input type="file" accept="image/*;capture=camera" />

    یا با حذف پارامتر capture=camera ، کاربر می تواند انتخاب کند که یک تصویر جدید با دوربین بگیرد یا یکی از دستگاه (مانند برنامه گالری) را انتخاب کند.

  • جهت گیری دستگاه

    همانطور که توسط Device Orientation Event تعریف شده است، مرورگر به برنامه های کاربردی وب اجازه می دهد تا به رویدادهای DOM که اطلاعاتی در مورد جهت گیری فیزیکی و حرکت دستگاه ارائه می دهند گوش دهند.

    جهت گیری دستگاه با محورهای x، y و z، در درجه و حرکت با داده های شتاب و سرعت چرخش بیان می شود. یک صفحه وب می‌تواند با فراخوانی window.addEventListener با نوع رویداد "deviceorientation" برای رویدادهای جهت‌یابی ثبت نام کند و با ثبت نوع رویداد "devicemotion" برای رویدادهای حرکتی ثبت‌نام کند.

  • CSS 3D Transforms

    همانطور که توسط CSS 3D Transform Module تعریف شده است، مرورگر به عناصر ارائه شده توسط CSS اجازه می دهد تا در سه بعدی تبدیل شوند.

ابزارهای JSON

کلاس های جدید، JsonReader و JsonWriter ، به شما کمک می کنند تا جریان های JSON را بخوانید و بنویسید. API های جدید مکمل کلاس های org.json هستند که یک سند را در حافظه دستکاری می کنند.

شما می توانید با فراخوانی متد سازنده آن و عبور از InputStreamReader که رشته JSON را تغذیه می کند، نمونه ای از JsonReader ایجاد کنید. سپس شروع به خواندن یک شی با فراخوانی beginObject() کنید، یک نام کلید را با nextName() بخوانید، مقدار را با استفاده از متدهای مربوط به نوع، مانند nextString() و nextInt() بخوانید و تا زمانی که hasNext() درست است به انجام آن ادامه دهید. .

می توانید با فراخوانی سازنده آن و ارسال OutputStreamWriter مناسب، نمونه ای از JsonWriter ایجاد کنید. سپس داده‌های JSON را به روشی شبیه به خواننده بنویسید، با استفاده از name() برای اضافه کردن نام ویژگی و متد value() مناسب برای افزودن مقدار مربوطه.

این کلاس ها به طور پیش فرض سخت هستند. متد setLenient() در هر کلاس آنها را به گونه ای پیکربندی می کند که در آنچه می پذیرند آزادتر باشند. این حالت تجزیه ملایم با تجزیه کننده پیش فرض org.json نیز سازگار است.

ثابت های ویژگی جدید

عنصر <uses-feature> manfest باید برای اطلاع دادن به نهادهای خارجی (مانند Google Play) از مجموعه ویژگی‌های سخت‌افزاری و نرم‌افزاری که برنامه شما به آن‌ها وابسته است، استفاده شود. در این نسخه، اندروید ثابت های جدید زیر را اضافه می کند که برنامه ها می توانند با این عنصر اعلام کنند:

  • "android.hardware.faketouch"

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

    اگر برنامه شما به حرکات پیچیده نیاز ندارد و نمی خواهید برنامه شما از دستگاه های دارای صفحه لمسی شبیه سازی شده فیلتر شود، باید "android.hardware.faketouch" با عنصر <uses-feature> اعلام کنید. به این ترتیب، برنامه شما برای بیشترین تعداد از انواع دستگاه، از جمله دستگاه هایی که فقط ورودی صفحه لمسی شبیه سازی شده را ارائه می دهند، در دسترس خواهد بود.

    کلیه دستگاه هایی که شامل یک صفحه لمسی هستند همچنین "android.hardware.faketouch" پشتیبانی می کنند ، زیرا قابلیت های صفحه لمسی یک سوپراست از قابلیت های Faketouch است. بنابراین ، مگر اینکه در واقع به صفحه لمسی احتیاج داشته باشید ، باید یک عنصر <uses-feature> را برای Faketouch اضافه کنید.

مجوزهای جدید

  • "android.permission.BIND_REMOTEVIEWS"

    این باید به عنوان یک مجوز مورد نیاز در عنصر <service> مانیفست برای اجرای RemoteViewsService اعلام شود. به عنوان مثال ، هنگام ایجاد ویجت برنامه ای که از RemoteViewsService برای جمع آوری نمای مجموعه استفاده می کند ، ممکن است ورود مانیفست به این شکل باشد:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />

فن آوری های جدید پلتفرم

  • ذخیره سازی
    • پشتیبانی سیستم فایل EXT4 برای فعال کردن ذخیره سازی EMMC.
    • سیستم پرونده فیوز برای پشتیبانی از دستگاه های MTP.
    • پشتیبانی از حالت میزبان USB برای پشتیبانی از صفحه کلید و قطب های USB.
    • پشتیبانی از MTP/PTP
  • هسته لینوکس
    • به ارتقا به 2.6.36
  • Dalvik VM
    • کد جدید برای پشتیبانی و بهینه سازی SMP
    • پیشرفت های مختلف در زیرساخت های JIT
    • بهبود جمع کننده زباله:
      • تنظیم شده برای SMP
      • پشتیبانی از اندازه های پشته بزرگتر
      • هندلینگ یکپارچه برای مپ های بیت و بافر بایت
  • کتابخانه های اصلی Dalvik
    • اجرای جدید و بسیار سریعتر NIO (کتابخانه مدرن I/O)
    • پیام های استثنا بهبود یافته
    • صحت و رفع عملکرد در سراسر

گزارش اختلافات API

برای مشاهده دقیق از کلیه تغییرات API در Android 3.0 (API سطح 11) ، به گزارش API تفاوت مراجعه کنید.

سطح API

پلت فرم Android 3.0 نسخه به روز شده API Framework را ارائه می دهد. Android 3.0 API یک شناسه عدد صحیح - 11 - اختصاص داده شده است که در خود سیستم ذخیره می شود. این شناسه با نام "سطح API" به سیستم اجازه می دهد تا قبل از نصب برنامه ، به درستی تعیین کند که آیا یک برنامه با سیستم سازگار است.

برای استفاده از API های معرفی شده در Android 3.0 در برنامه خود ، باید برنامه را در برابر کتابخانه Android که در پلت فرم Android 3.0 SDK ارائه شده است ، کامپایل کنید. بسته به نیاز خود ، ممکن است نیاز به اضافه کردن یک ویژگی android:minSdkVersion="11" به عنصر <uses-sdk> در مانیفست برنامه داشته باشید. اگر برنامه شما برای اجرای فقط در Android 2.3 و بالاتر طراحی شده است ، اعلام این ویژگی مانع از نصب برنامه در نسخه های قبلی سیستم عامل می شود.

برای اطلاعات بیشتر ، بخوانید سطح API چیست؟