আমি এই সমস্যাটি তদন্ত করেছি, লেআউটআইনফ্লেটার ডক্সকে উল্লেখ করে এবং একটি ছোট নমুনা প্রদর্শনের প্রকল্প স্থাপন করছি। নিম্নলিখিত টিউটোরিয়ালগুলি দেখায় কীভাবে কীভাবে একটি বিন্যাস ব্যবহার করে গতিশীলভাবে পপুলেট করা যায় LayoutInflater
।
আমরা শুরু করার আগে LayoutInflater.inflate()
প্যারামিটারগুলি দেখতে কেমন তা দেখুন:
- রিসোর্স : লোড করার জন্য এক্সএমএল লেআউট রিসোর্সের আইডি (যেমন,
R.layout.main_page
)
- রুট : উত্পন্ন হায়ারার্কির পিতামাতা হতে parentচ্ছিক দৃষ্টিভঙ্গি (যদি
attachToRoot
হয় true
), অথবা অন্যথায় কেবল এমন একটি বস্তু যা LayoutParams
প্রত্যাবর্তিত শ্রেণিবিন্যাসের মূলের মান সরবরাহ করে (যদি attachToRoot
হয় false
)
AttToRoot : স্ফীতিত স্তরক্রমটি মূল প্যারামিটারের সাথে সংযুক্ত করা উচিত? যদি মিথ্যা LayoutParams
হয় তবে এক্সএমএলটিতে মূল দেখার জন্য মূলটি কেবলমাত্র সাবক্লাস তৈরি করতে ব্যবহৃত হয় ।
রিটার্নস : স্ফীত শ্রেণিবিন্যাসের মূল দৃশ্য। যদি মূল সরবরাহ করা হয় এবং attachToRoot
হয় true
তবে এটি মূল; অন্যথায় এটি স্ফীত এক্সএমএল ফাইলের মূল।
এখন নমুনা বিন্যাস এবং কোড জন্য।
প্রধান বিন্যাস ( main.xml
):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
এই ধারকটিতে যুক্ত করা হয়েছে একটি পৃথক পাঠ্যদর্শন, XML ( red.xml
) থেকে যদি লেআউট প্যারামিটারগুলি সফলভাবে প্রয়োগ করা হয় তবে ছোট লাল স্কোয়ার হিসাবে দৃশ্যমান :
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="25dp"
android:layout_height="25dp"
android:background="#ff0000"
android:text="red" />
LayoutInflater
কল পরামিতিগুলির বিভিন্ন প্রকারের সাথে এখন ব্যবহৃত হয়
public class InflaterTest extends Activity {
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup parent = (ViewGroup) findViewById(R.id.container);
// result: layout_height=wrap_content layout_width=match_parent
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view);
// result: layout_height=100 layout_width=100
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view, 100, 100);
// result: layout_height=25dp layout_width=25dp
// view=textView due to attachRoot=false
view = LayoutInflater.from(this).inflate(R.layout.red, parent, false);
parent.addView(view);
// result: layout_height=25dp layout_width=25dp
// parent.addView not necessary as this is already done by attachRoot=true
// view=root due to parent supplied as hierarchy root and attachRoot=true
view = LayoutInflater.from(this).inflate(R.layout.red, parent, true);
}
}
পরামিতি পরিবর্তনের প্রকৃত ফলাফলগুলি কোডটিতে নথিভুক্ত হয়।
সারমর্ম: কলিং LayoutInflater
ফোলান কলে রুট বিশালাকার উল্লেখ XML থেকে বিন্যাস পরামিতি উপেক্ষা ছাড়া। রুটের সাথে স্ফীত কলিংটি সমান নয় null
এবং attachRoot=true
লেআউট প্যারামিটারগুলি লোড করে না , তবে আবার রুট অবজেক্টটি ফেরত দেয়, যা লোড হওয়া অবজেক্টে পরবর্তী লেআউট পরিবর্তনগুলি প্রতিরোধ করে (যদি না আপনি এটি ব্যবহার না করে findViewById()
) can আপনি সম্ভবত কলিং কনভেনশনটি ব্যবহার করতে চান তাই এটি একটি:
loadedView = LayoutInflater.from(context)
.inflate(R.layout.layout_to_load, parent, false);
বিন্যাস সংক্রান্ত সমস্যাগুলির সাথে সহায়তা করার জন্য, লেআউট ইন্সপেক্টরকে অত্যন্ত প্রস্তাব দেওয়া হয়।