تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
LogIn App: AppCompat #8
#1
بسم الله الرحمن الرحيم
(رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي)



السلام عليكم ورحمة الله وبركاته


باذن الله سنتحدث في هذا الدرس عن دعم الاصدارات القديمة بالنسبة لـMaterial Theme عن طريق استخدام AppCompat.


AppCompat: مكتبة من Google لدعم الاصدارات الاقدم من اصدارات Android  حيث تقوم شركة Google باضافة ميزات في الاصدرات الحديثة ولذلك عند استخدامك لمكتة AppCompat ستتمكن من استخدام هذه الميزات لتدعم الاصدارات القديمة ايضا ( أقل من API 21 ).


كما ذكرنا في درس سابق (Material Theme) عن كيفية استخدام Material Design في تطبيق الاندرويد و وضحنا بأنه يدعم الاصدارات الاحدث بدءاً من اصدار Android Lollipop API 21 الى الاصدارات الحديثة وآخرها Android Oreo.


الخطوة الاولى:

طيب لدعم الاصدارات الأقدم من Android Lollipop نحتاج الى اضافة مكتبة AppComapt من NuGet Package بالشكل التالي:

Solution Explorer-->TestAndroidApp-->RightClick--> Manage NuGet Packages-->Browse

ثم اكتب في خانة البحث: Xamarin.Android.Support.v7.AppCompat

وقم باضافتها الى المشروع.


الخطوة الثانية:


افتح ملف Styles من مجلد values وقم باستبدال الكود السابق الموجود بالكود أدناه وأكتشف الفرق بنفسك:
PHP كود :
<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <!-- Inherit from the light Material Theme
<!-- Inherit from the light Material Theme -->
  <style name="MyCustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!--If you are using revision 22.1 please use just windowNoTitle. Without android:-->
    <item name="windowNoTitle">true</item>
    <!--We will be using the toolbar so no need to show ActionBar-->
    <item name="windowActionBar">false</item>
    <!-- Customizations go here -->
    <!-- Override the status bar color -->
    <item name="colorPrimaryDark">#FF006885</item>
    <!-- Override the app bar color -->
    <item name="colorPrimary">#FF176F87</item>
    <!-- Override the color of UI controls -->
    <item name="colorAccent">#FF176F87</item>
< item name="android:textColor">#FAFAFA</item>
  </style>
</resources> 

ولا تنسى أن تغير Minimum Android version الى Android 4.2 API Level 17.


الان انتقل الى Main.axml وقم بتطبيق الخطوات التالية:

قم باضافة هذا السطر داخل LinearLayout:

PHP كود :
xmlns:app="http://schemas.android.com/apk/res-auto" 

ثم قم باضافة Toolbar  بعد LinearLayout مباشرة :
PHP كود :
<android.support.v7.widget.Toolbar
        android
:id="@+id/mainToolbar"
 
       android:layout_width="match_parent"
 
       android:layout_height="wrap_content"
 
       android:minHeight="?attr/actionBarSize"
 
       android:background="?attr/colorPrimary"
 
       android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

الخطوة الثالثة: انتقل الى MainActivity.cs وقم بتطبيق الخطوات التالي:

استبدل Activity في هذا السطر :
PHP كود :
public class MainActivity Activity 
بــ AppCompatActivity بهذا الشكل: (استخدم هذه المكتبة using Android.Support.V7.App;

)
PHP كود :
public class MainActivity AppCompatActivity 



قم بتعريف متغير بهذا الشكل:
PHP كود :
V7Toolbar _mainToolbar


ولإظهار الألوان في الـstatus bar والـ navigation bar نستخدم الكود التالي  قبل سطر الـ SetContentView:

PHP كود :
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
 
           {
 
               Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
 
               Window.SetNavigationBarColor(Color.ParseColor("#FF006885"));
 
           

حيث ستكون  الدالة OnCreate في MainActivity.cs كالتالي:
PHP كود :
protected override void OnCreate(Bundle savedInstanceState)
 
       {
 
           base.OnCreate(savedInstanceState);
if (
Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
            {
                Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
                Window.SetNavigationBarColor(Color.ParseColor("#FF006885"));
            }
 
           // Set our view from the "main" layout resource
 
           SetContentView(Resource.Layout.Main);
 
           //

 
           _username FindViewById<EditText>(Resource.Id.userName);
 
           _password FindViewById<EditText>(Resource.Id.password);
 
           _mainToolbar FindViewById<V7Toolbar>(Resource.Id.mainToolbar);

 
           SetSupportActionBar(_mainToolbar);
 
           SupportActionBar.Title "AppCompat";

 
           _ok FindViewById<Button>(Resource.Id.okButton);
 
           _cancel FindViewById<Button>(Resource.Id.cancelButton);

 
           _ok.Click += _ok_Click;

 
           _cancel.Click += delegate
              
{
 
                 Finish();
 
             };
 
       


والمكتبات المستخدمة ستكون كالتالي:
PHP كود :
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Content;
using Android.Views;
using Android.Support.V7.App;
using V7Toolbar Android.Support.V7.Widget.Toolbar;
using Android.Graphics

وعند تنفيذ التطبيق ستكون الواجهة بهذا الشكل:


والحمد لله رب العالمين
الرد }}}
تم الشكر بواسطة: sendbad100 , Amir_Alzubidy , الشاكي لله
#2
مشكور اخوي ،، وجزاك الله خير

اللي فهمته اذا كان النظام قديم سوف يظهر التطبيق بصورة غير إذا كان النظام جديد ؟

وعند استخدام الطريقة هذي سوف يظهر التطبيق بصورة واحدة في جميع الأنظمة والأجهزة ... هل هذا صحيح ؟
الرد }}}
تم الشكر بواسطة: Sajad
#3
حياك الله اخي العزيز


ليس هذا فقط اصلا تطبيقك سوف لن يعمل على الانظمة القديمة اذا لم تستخدم AppCompat بسبب أنه المزايا الجديدة فقط للاصدارات الاحدث

لذا لكي يعمل تطبيقك بشكل سليم اذا كنت تفكر بدعم الاجهزة التي تعمل على اصدرات اقدم لا بد واستخدام مكتبات توفر هذه المزايا للاصدارات الاقدم

فمن خلال المكتبات سوف تتمكن من استخدام مزايا الاصدارات الاحدث بالاصدارات الاقدم.

تحياتي لكم
الرد }}}
تم الشكر بواسطة:
#4
(02-01-18, 08:58 PM)Sajad كتب : حياك الله اخي العزيز


ليس هذا فقط اصلا تطبيقك سوف لن يعمل على الانظمة القديمة اذا لم تستخدم AppCompat بسبب أنه المزايا الجديدة فقط للاصدارات الاحدث

لذا لكي يعمل تطبيقك بشكل سليم اذا كنت تفكر بدعم الاجهزة التي تعمل على اصدرات اقدم لا بد واستخدام  مكتبات توفر هذه المزايا للاصدارات الاقدم

فمن خلال المكتبات سوف تتمكن من استخدام مزايا الاصدارات الاحدث بالاصدارات الاقدم.

تحياتي لكم

مشكور وجزاك الله خير اخوي سجاد ،،

طيب لو عملت المنيميم تارقيت 4.0.2 للأندرويد هل احتاج هذي المكتبة ؟

والسوال الثاني من اي اصدار من الاصدارات الاقدم احتاج لهذي المكتبة ؟
الرد }}}
تم الشكر بواسطة: Sajad
#5
ما فيه أي مشكلة

هذه المكتبة تدعم من API Level 7

تحياتي لكم
الرد }}}
تم الشكر بواسطة:
#6
(03-01-18, 10:51 PM)Sajad كتب : ما فيه أي مشكلة

هذه المكتبة تدعم من API Level 7

تحياتي لكم

تدعم فقط API Level 7

والإصدارات اللي قبل أو بعد 7

وماجاوبتني على سوالي : هل لو اعمل المنيميم تارقيت لإصدار اندرويد 4.0.2 احتاج لهذه المكتبة أو سيعمل تطبيق على جميع الأجهزة التي تحمل اصدار اندرويد 4.0.2 وأعلى كما صممتها بدون مشاكل ؟
الرد }}}
تم الشكر بواسطة: Sajad
#7
كلا اخي العزيز من API 7 فالأحدث.

نعم ستحتاج الى هذه المكتبة لكي تدعم الاصدارات من API 7 الى اخر اصدار API.
الرد }}}
تم الشكر بواسطة:
#8
(04-01-18, 10:01 PM)Sajad كتب : كلا اخي العزيز من API 7 فالأحدث.

نعم ستحتاج الى هذه المكتبة لكي تدعم الاصدارات من API 7 الى اخر اصدار  API.

مره أخرى مشكور اخوي .
الرد }}}
تم الشكر بواسطة: Sajad


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  LogIn App: Archiving#9 Sajad 1 3,366 10-04-21, 03:18 AM
آخر رد: ba2e44ca9a
  LogIn App: zip align & uploding on Goolge Store #10 Sajad 5 4,280 16-01-18, 01:14 PM
آخر رد: حريف برمجة
  LogIn App: Tips #7 Sajad 1 2,435 30-12-17, 08:38 PM
آخر رد: حريف برمجة
  LogIn App: Styling Button #6 Sajad 2 2,596 19-12-17, 07:48 PM
آخر رد: Amir_Alzubidy
  LogIn App: Intents #5 Sajad 2 2,314 16-12-17, 03:23 AM
آخر رد: حريف برمجة
  LogIn App #2 Sajad 3 2,572 13-12-17, 02:54 PM
آخر رد: Amir_Alzubidy
  LogIn App LinearLayout #1 Sajad 2 2,075 11-12-17, 01:45 AM
آخر رد: sendbad100

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم