LinearLayout لا تتوسع داخل Scrollview
-
25-09-2019 - |
سؤال
انا املك LinearLayout
داخل ScrollView
التي لديها android:layout_height="fill_parent"
, ، لكنه لا يتوسع إلى ارتفاع كامل ScrollView
. يبدو تخطيطي شيئًا مثل:
level layout layout_width layout_height
1 LinearLayout fill_parent fill_parent
2 LinearLayout fill_parent wrap_content
3 (some irrelevant stuff)
2 ScrollView fill_parent fill_parent <-- this expands full height
3 LinearLayout fill_parent fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4 TextView fill_parent fill_parent
4 LinearLayout fill_parent wrap_content
أستطيع أن أرى أن LinearLayout
لا يوسع الارتفاع الكامل لـ ScrollView
لأنه في الكسوف في Android Layout Editor
, ، إذا قمت بتحديد ملف ScrollView
(في لوحة المخطط التفصيلي) يتم تمييزه بحدود حمراء تملأ الشاشة إلى الأسفل ولكن عندما أقوم بتحديد LinearLayout
تسليط الضوء عليه لا يتوسع إلى أسفل الشاشة. كيف يمكنني الحصول عليها للقيام بذلك؟
التأثير الذي أحاول تحقيقه هو الحصول على بعض النص وزر أسفله (داخل LinearLayout
في المستوى 4 ، هناك زر فقط). يمكن أن يكون النص كبيرًا بما يكفي للحاجة إلى شريط التمرير ، وفي هذه الحالة أريد أن يضطر المستخدم إلى التمرير لأسفل من أجل رؤية الزر. في حال لم يكن النص كبيرًا بما يكفي لشريط التمرير ، أريد LinearLayout
يحتوي على الزر للالتزام بأسفل الشاشة.
في البداية اعتقدت أنه لا ينبغي عليّ نشر XML الكامل لأنه عادة ما يكون الانخفاض لرؤية جزء كبير من التعليمات البرمجية في سؤال. ومع ذلك ، يبدو أنه قد يكون من الضروري ، لذلك هذا هو التصميم الكامل.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/video_layout"
android:focusable="true"
style="@style/VideoLayout">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@android:drawable/ic_media_play"
android:foregroundGravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/video_thumb"
android:padding="5dip"
android:background="#454545"/>
</FrameLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
style="@style/VideoTitle"
android:id="@+id/video_title"
android:layout_gravity="center"
android:layout_weight="1"/>
</LinearLayout>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<!-- this ScrollView expands the full height of the screen.
However, the next LinearLayout does not expand the full height of the ScrollView -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:layout_gravity="fill"
android:orientation="vertical"
android:id="@+id/info_layout">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/info_body"
style="@style/InfoText"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
style="@android:style/ButtonBar">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/button_readmore"
android:id="@+id/btn_read_more"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
في اللحظة التي لجأت إليها android:layout_gravity="bottom"
على مشكلة LinearLayout
, ، مما يجعل الزر متمسكًا بأسفل الشاشة بغض النظر عن ما. لكن هذا يجعل النص متمسكًا بأسفل الشاشة ، وهو ما لم أكن بعده بالضبط.
تحديث: خدش ذلك ، android:layout_gravity="bottom"
يجعل ScrollView
غير قادر على ، حسنا ، التمرير. أفكار أخرى؟
المحلول
وجدت الحل بنفسي في النهاية. لم تكن المشكلة مع LinearLayout
, ، ولكن مع ScrollView
(يبدو غريبًا ، بالنظر إلى حقيقة أن ScrollView
كان التوسع ، بينما LinearLayout
لم يكن).
كان الحل للاستخدام android:fillViewport="true"
على ال ScrollView
.
نصائح أخرى
أعلم أن هذا المنشور قديم جدًا ، لأولئك الذين لا يريدون استخدامه android:fillViewport="true"
لأنه في بعض الأحيان لا يظهر edittext فوق لوحة المفاتيح. استخدم التصميم النسبي بدلاً من LinearLayout يحل الغرض.
هل يمكنك توفير تخطيطك XML؟ من شأن القيام بذلك أن يسمح للناس بإعادة إنشاء القضية بأقل جهد.
قد تضطر إلى ضبط
android:layout_weight="1"
بالنسبة للعنصر الذي تريد توسيعه
لقد استخدمت ديناميكيًا للحصول على هذا. لدي خط خطي وداخل هذا التمرير المستخدم كطفل. ثم آخذ مرة أخرى LineArlayout وأضيف ما تريده من أي وقت مضى تريد إلى هذا linearlayout ، ثم يضيف هذا الخطية إلى ScrollView وأخيراً إضافة هذا scrollview إلى LineArlayout. ثم يمكنك التمرير في Scrollview الخاص بك ولن يترك أي شيء مرئيًا.
LinearLayout (Parent)-Scrollview (Child of LinerLayout)-LinearLayout (طفل ScrollView)-إضافة هنا TextView ، الأزرار ، Spinner وما إلى ذلك مهما تريد. ثم أضف هذا خطيًا إلى ScrollView. BCOZ طفل واحد فقط لـ ScrollView قابلة للتطبيق وإضافة عرض Scrollview إلى LinearlyOut. إذا تجاوزت المنطقة المحددة من حجم الشاشة ، فسيحصل U على تمرير داخل Scrollview.
في حالتي لم أعطي
اتجاه LinearLayout (طفل Scrollview)
لذلك ، يتطلب الأمر بشكل افتراضي ، ولكن Scrollview يسير رأسياً ، لذا يرجى التحقق مما إذا تم تعيين "Android: Tirection =" عمودي "على طفل Scrollview الخاص بك (في حالة LinearLayout).
كانت هذه حالتي تأمل أن يساعد شخص ما
.
الحل هو الاستخدام
android:fillViewport="true"
تشغيل عرض التمرير علاوة على ذلك ، حاول الاستخدام
"wrap_content"
بدلاً من "fill_parent"
مثل "fill_parent"
تم إهماله الآن.