سؤال

انا املك 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"

تم إهماله الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top