شفافة على android و adjustResize


ظهرت القدرة على استخدام شفافة في الروبوت في KITKAT . ويبدو رائعا جدا في التصميم الصحيح. ومع ظهور الموضة للأجهزة المزودة بـ "Bangs" ، يبدو الأمر مجرد شيء ضروري في أي عملية بدء تشغيل لمصباح دافئ.


دعونا نتخيل موقفًا: لقد التقطت تصميمًا رائعًا رائعًا يتم تمريره أسفل StatusBar و NavigationBar. وهكذا يمكنك إضافة حقل الإدخال وتفهم أن AdjustResize لا يعمل من أجلك.


يمكنك:


  1. للمطرقة ، - سيغلق المستخدم لوحة المفاتيح بنفسه لرؤية ما تحتها.
  2. رفض من الشفافية ، والأسلوب ليس لك ، كل شيء سيكون قديم وموثوق ، مثل أي شخص آخر.
  3. بمجرد أن يبدأ المستخدم في التمرير ، قم بإخفاء لوحة المفاتيح. لقد أحسنت! لقد فعلوا كل شيء بشكل صحيح ، سكايب يفعل ذلك حتى تحت نظام ios! وليس هناك شفافية هناك أيضا.
  4. انقل جميع حقول الإدخال إلى شاشات منفصلة. كمكافأة - كل انتقال إضافي إلى الشاشة ، ناقص الراحة والتحويل.
  5. مسح ضبط حجمك .

كل صعوبات شفافة


هناك العديد من الصعوبات في تنفيذ شفافة :


  1. من الضروري مراعاة تصميم الأجهزة الأصغر من KITKAT (أعتقد أنه في عام 2019 ، هذا غير مناسب تقريبًا ، خاصةً للمشاريع الجديدة). ربما لأجهزة أصغر من LOLLIPOP ، ربما اللعبة لا تستحق كل هذا العناء؟ لا يمكنك الحصول على شريط تنقل شفاف و "Chulok" على هذه الأجهزة لم يكن موجودًا أيضًا.
  2. إذا كنت تفكر في شفافة ، فأنت على الأرجح تريد شيئًا أكثر تعقيدًا من خلفية ثابتة ، أو شيئًا يتم تمريره تحت StatusBar و NavigationBar ، وهو أمر لا يمكن القيام به باستخدام fitsSystemWindows ، مما يعني أنه يجب عليك استبدال ارتفاع StatusBar و NavigationBar ديناميكيًا.
  3. وأخيرًا ، فإن الشيء الرئيسي: adjustResize يعمل فقط دون شفافية أو لأولئك الذين يعرضون fitsSystemWindows .

ما هو عليه وكيف ينبغي أن تعمل



حل المشكلات


يبدو أنه حل بسيط: adjustResize لا يعمل ، لذلك تحتاج إلى الاستجابة لفتح لوحة المفاتيح من قبل نفسك. لكن المشكلة في android لا توفر فقط ارتفاع لوحة المفاتيح التي تفتح (ويمكن أن تكون مختلفة حتى بالنسبة لحقول EditText المختلفة) ، ولكن حتى حقيقة فتحها أو إغلاقها. لا توجد وسيلة رسمية. كيف ذلك جوجل؟


بالطبع هناك حل! وعندما يكون لديك معلومات حول ارتفاع لوحة المفاتيح الحالي ، يمكنك القيام بكل ما تريده: إضافة الحشو أو الهامش من أسفل لطريقة العرض تلك التي يجب أن تستجيب إلى لوحة المفاتيح والآن أصبح ضبط حجم التحميل المخصص جاهزًا.


كود


لفهم أن لوحة المفاتيح كانت مفتوحة ، يتم استخدام OnGlobalLayoutListener . لصق قطع من التعليمات البرمجية في المشاركة لا أرى هذه النقطة. لماذا تكتب 100 سطر من ما يعبر عنه في 50 رمز؟
يتم تقديم الحل في المستودع .


ألق نظرة على KeyboardHeightProvider و BaseTranslucentActivity .


المشروع بسيط قدر الإمكان ، مفهوم ، لا يوجد شيء لا لزوم له فيه لا ينطبق على المشكلة.
يوجد مثال على TextView بسيط و RecyclerView و ScrollView. تم اختبار هذه التقنية وهي تعمل بشكل رائع مع NestedScrollView و NestedFragments و CoordinatorLayout و ViewPager وما إلى ذلك.


ملاحظة: https://developer.android.com/reference/android/view/WindowInsets لا يحل مشكلة لوحة المفاتيح.

Source: https://habr.com/ru/post/ar436646/


All Articles