سؤال

لدي تخطيط محدد في XML. يحتوي أيضًا على:

<RelativeLayout
    android:id="@+id/item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

أرغب في تضخيم هذه المقابلة النسبية مع ملف تخطيط XML الآخر. قد أستخدم تخطيطات مختلفة اعتمادًا على الموقف. كيف أفعل ذلك؟ كنت أحاول اختلافات مختلفة من

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

لكن لم يعمل أي منهم بشكل جيد.

هل كانت مفيدة؟

المحلول

لست متأكدًا من أنني تابعت سؤالك- هل تحاول إرفاق وجهة نظر الطفل بـ Relativelayout؟ إذا كان الأمر كذلك ، فأنت تريد أن تفعل شيئًا على غرار:

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);

نصائح أخرى

يمكنك تضخيم مورد XML. انظر Doc Layoutinflater .

إذا كان تخطيطك في mylayout.xml, ، ستفعل شيئًا مثل:

View view; 
LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);

RelativeLayout item = (RelativeLayout) view.findViewById(R.id.item);

على الرغم من الإجابة المتأخرة ، لكنها ترغب في إضافة هذه الطرق للحصول على هذا

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.mylayout, item );

أين item هو تخطيط الوالدين حيث تريد إضافة تخطيط طفل.

من المفيد أن تضيف إلى ذلك ، على الرغم من أنها منشور قديم ، إذا كان من المفترض أن يتم إضافة عرض الطفل الذي يتم تضخيمه من XML إلى مجموعة ViewGroup ، فأنت بحاجة إلى الاتصال بفكرة عن نوع مجموعة ViewGroup لإضافتها إلى. مثل:

View child = getLayoutInflater().inflate(R.layout.child, item, false);

يتم تحميل طريقة التضخيم إلى حد كبير وتصف هذا الجزء من الاستخدام في المستندات. لقد واجهت مشكلة حيث لم يكن هناك طريقة عرض واحدة من XML في الوالد بشكل صحيح حتى قمت بهذا النوع من التغيير.

حتى طريقة أبسط هي الاستخدام

View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item

تخطيط التضخم

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);

إذا لم تكن في نشاط ، فيمكنك استخدام الثابت from() طريقة من LayoutInflater الفصل للحصول على ملف LayoutInflater, أو طلب الخدمة من طريقة السياق getSystemService() جدا :

LayoutInflater i;
Context x;       //Assuming here that x is a valid context, not null

i = (LayoutInflater) x.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//OR
i = LayoutInflater.from(x);

(أعلم أنه منذ ما يقرب من 4 سنوات ولكن لا يزال يستحق الذكر)

إذا كنت ترغب في إضافة عرض واحد عدة وقت ، فعليك استخدامه

   layoutInflaterForButton = getActivity().getLayoutInflater();

 for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
        FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
        btnContainer.addView(btnView);
    }

إذا كنت تحب

   layoutInflaterForButton = getActivity().getLayoutInflater();
    FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);

و

for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
            btnContainer.addView(btnView);
        }

بعد ذلك سوف يلقي استثناء من كل عرض إضافي جاهز.

تم تعيين eachtoroot إلى True

فقط أعتقد أننا حددنا زرًا في ملف تخطيط XML مع عرض التخطيط وارتفاع التخطيط لمطابقته.

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>

في هذا الحدث ، انقر فوق الحدث ، يمكننا تعيين الكود التالي لتضخيم التخطيط على هذا النشاط.

LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);

أتمنى أن يعمل هذا الحل من أجلك.!

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

وضعي: أنا أستخدم طريقة عرض منفصلة (XML) التي تحمل ملف WebView, ، ثم يفتح في AlertDialog عندما أنقر على زر في عرض النشاط الرئيسي. لكن بطريقة أو بأخرى WebView ينتمي إلى عرض النشاط الرئيسي (ربما لأنني أسحب المورد من هنا) ، لذلك قبل تعيينه مباشرة AlertDialog (كمنظر) ، اضطررت إلى الحصول على والد بلدي WebView, ، ضعه في ViewGroup, ، ثم قم بإزالة جميع طرق العرض على ذلك ViewGroup. هذا نجح ، وذهب خطأي بعيدا.

// set up Alert Dialog box
AlertDialog.Builder alert = new AlertDialog.Builder(this);
// inflate other xml where WebView is
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService
                (Context.LAYOUT_INFLATER_SERVICE);
View v = layoutInflater.inflate(R.layout.your_webview_layout, null);
final WebView webView = (WebView) v.findViewById(R.id.your_webview_id);

// more code...

.... في وقت لاحق بعد أن قمت بتحميل بلدي WebView ....

// first, remove the parent of WebView from it's old parent so can be assigned a new one.
ViewGroup vg = (ViewGroup) webView.getParent();
vg.removeAllViews();

// put WebView in Dialog box
alert.setView(webView);
alert.show();

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

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);

جرب هذا الرمز:

  1. إذا كنت تريد فقط تضخيم تخطيطك:

View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);   

  1. إذا كنت ترغب في تضخيم تخطيطك في الحاوية (تخطيط الوالدين):

LinearLayout parent = findViewById(R.id.container);        //parent layout.
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,parent,false); 
RelativeLayout item = view.findViewById(R.id.item);       //initialize layout & By this you can also perform any event.
parent.addView(view);             //adding your inflated layout in parent layout.

مع Kotlin ، يمكنك استخدام:

val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)

[your_main_layout].apply {
    //..
    addView(content)
}

كنت قد استخدمت أدناه مقتطف من التعليمات البرمجية لهذا وكان يعمل بالنسبة لي.

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
linearLayout.addView(child);

لا حاجة إلى أي تعقيد.

 setContentView(R.layout.your_layout);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top