android-layout src - تخطيط Android بدلاً من عرض مع عرض آخر في وقت التشغيل




studio android:padding (4)

انها تعمل في حالتي ، oldSensor و newSnsor - oldView و newView:

private void replaceSensors(View oldSensor, View newSensor) {
            ViewGroup parent = (ViewGroup) oldSensor.getParent();

            if (parent == null) {
                return;
            }

            int indexOldSensor = parent.indexOfChild(oldSensor);
            int indexNewSensor = parent.indexOfChild(newSensor);
            parent.removeView(oldSensor);
            parent.addView(oldSensor, indexNewSensor);
            parent.removeView(newSensor);
            parent.addView(newSensor, indexOldSensor);
        }

لدي ملف تنسيق xml الرئيسي مع اثنين من نصوص A / B و طريقة عرض C. من أن لدي خيارين آخرين option2 ملفات xml option1 و option2 . هل من الممكن تحميل option1 أو option2 في وقت التشغيل عبر Java إلى C؟ إذا كان الأمر كذلك ، ما هي الوظيفة التي يجب أن أستخدمها؟


يمكنك استبدال أي عرض في أي وقت.

int optionId = someExpression ? R.layout.option1 : R.layout.option2;

View C = findViewById(R.id.C);
ViewGroup parent = (ViewGroup) C.getParent();
int index = parent.indexOfChild(C);
parent.removeView(C);
C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);

إذا كنت لا تريد استبدال العرض الموجود بالفعل ، ولكن اختر بين option1 / option2 في وقت التهيئة ، فيمكنك القيام بذلك بسهولة: تعيين android:id للتخطيط الرئيسي ثم:

ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
View C = getLayoutInflater().inflate(optionId, parent, false);
parent.addView(C, index);

سيكون عليك تعيين "الفهرس" إلى القيمة المناسبة بناءً على بنية المشاهدات. يمكنك أيضًا استخدام ViewStub : إضافة عرض C الخاص بك على أنه ViewStub ثم:

ViewStub C = (ViewStub) findViewById(R.id.C);
C.setLayoutResource(optionId);
C.inflate();

بهذه الطريقة لا داعي للقلق بشأن قيمة "index" المذكورة أعلاه إذا كنت ترغب في إعادة هيكلة تنسيق XML الخاص بك.


وإذا قمت بذلك في كثير من الأحيان ، يمكنك استخدام ViewFlipper أو ViewFlipper لتسهيل استبدال العرض.


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

أقوم بإضافة android: fillViewport = "true" على تنسيق xml لـ scrollView. وبشكل عام ، سيكون ScrollView الخاص بي مثل هذا.

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scrollView6" 
    android:fillViewport="true">

ويعمل مثل السحر لي. توسيع ListView الموجود داخل ScrollView الخاص بي إلى حجمه مرة أخرى.

هنا هو رمز المثال الكامل لـ ScrollView و ListView.

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scrollView6" android:fillViewport="true">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ....
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/lv_transList" android:layout_gravity="top"
            android:layout_marginTop="5dp"/>
        ....
    </LinearLayout>
</ScrollView>






android android-layout