LayoutInflater
অ্যান্ড্রয়েডের ব্যবহার কী ?
LayoutInflater
অ্যান্ড্রয়েডের ব্যবহার কী ?
উত্তর:
আপনি যখন কোনও কাস্টম ভিউ ব্যবহার করেন ListView
আপনাকে অবশ্যই সারি বিন্যাসটি নির্ধারণ করতে পারেন। আপনি একটি এক্সএমএল তৈরি করেন যেখানে আপনি অ্যান্ড্রয়েড উইজেটগুলি রাখেন এবং তারপরে অ্যাডাপ্টারের কোডে আপনাকে এই জাতীয় কিছু করতে হবে:
public MyAdapter(Context context, List<MyObject> objects) extends ArrayAdapter {
super(context, 1, objects);
/* We get the inflator in the constructor */
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
/* We inflate the xml which gives us a view */
view = mInflater.inflate(R.layout.my_list_custom_row, parent, false);
/* Get the item in the adapter */
MyObject myObject = getItem(position);
/* Get the widget with id name which is defined in the xml of the row */
TextView name = (TextView) view.findViewById(R.id.name);
/* Populate the row's xml with info from the item */
name.setText(myObject.getName());
/* Return the generated view */
return view;
}
সরকারী ডকুমেন্টেশন আরও পড়ুন ।
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
তা ব্যাখ্যা করে, যদিও এটি কোথায় ব্যবহার করবে তা ব্যাখ্যা করে। উত্তর 1-ডাউন ভাল।
LayoutInflater বর্গ তাদের সংশ্লিষ্ট দেখুন বস্তুর মধ্যে লেআউট XML ফাইল বিষয়বস্তু instantiate করতে ব্যবহৃত হয়।
অন্য কথায়, এটি ইনপুট হিসাবে একটি এক্সএমএল ফাইল নেয় এবং এটি থেকে দৃশ্য অবজেক্টগুলি তৈরি করে।
single_list_item.xml
একটি এর প্রতিটি লাইনের জন্য একটি ফাইল রয়েছে ListView
। সেই এক্সএমএল ফাইলটির ব্যবহার কি কোনও বাছুর মতো?
LayoutInflator
?আমি যখন প্রথম অ্যান্ড্রয়েড প্রোগ্রামিং শুরু করি তখন আমি সত্যিই বিভ্রান্ত হয়ে পড়েছিলাম LayoutInflater
এবং দ্বারা findViewById
। কখনও আমরা একটি এবং কখনও কখনও অন্য ব্যবহার।
LayoutInflater
আপনার এক্সএমএল লেআউটগুলির একটি থেকে নতুন View
(বা Layout
) অবজেক্ট তৈরি করতে ব্যবহৃত হয় ।findViewById
ইতিমধ্যে তৈরির চেয়ে কেবল আপনাকে একটি দৃশ্যের রেফারেন্স দেয়। আপনার মনে হতে পারে যে আপনি কোনো মতামত এখনো তৈরি করেছেন কিন্তু যখনই আপনি কল setContentView
মধ্যে onCreate
, তার subviews সহ কার্যকলাপ লেআউটের স্ফীত পরার (তৈরি করা) লোকচক্ষুর অন্তরালে।সুতরাং যদি ভিউ ইতিমধ্যে বিদ্যমান থাকে, তবে ব্যবহার করুন findViewById
। যদি তা না হয় তবে এটি দিয়ে তৈরি করুন LayoutInflater
।
এখানে আমি তৈরি করেছি এমন একটি মিনি প্রকল্প যা কার্যকরভাবে LayoutInflater
এবং কার্যকরভাবেই দেখায় findViewById
। কোনও বিশেষ কোড না থাকায় লেআউটটি দেখতে এমন দেখাচ্ছে।
নীল বর্গক্ষেত্রটি একটি কাস্টম বিন্যাস যা প্রধান বিন্যাসে sertedোকানো সহ include
(আরও দেখুন এখানে )। এটি স্বয়ংক্রিয়ভাবে ফুলে উঠেছে কারণ এটি সামগ্রী দেখার অংশ। আপনি দেখতে পাচ্ছেন যে কোড সম্পর্কে বিশেষ কিছু নেই।
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
এখন আসুন আমাদের কাস্টম বিন্যাসের অন্য অনুলিপি তৈরি করুন (তৈরি করুন) এবং এটিকে যুক্ত করুন।
LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);
নতুন ভিউ লেআউটটি স্ফীত করতে, আমি কেবলমাত্র আমার এক্সএমএল ফাইলের নাম স্ফীতকারীকে বলেছিলাম my_layout
, যে প্যারেন্ট লেআউটটি আমি এটি ( mainLayout
) এ যুক্ত করতে চাই এবং এটি এখনও আমি যুক্ত করতে চাই না ( false
) । (আমি পিতামাতাকেও এতে সেট করতে পারি null
, তবে তারপরে আমার কাস্টম বিন্যাসের মূল দৃশ্যের লেআউট প্যারামিটারগুলি এড়ানো হবে would)
এখানে এটি আবার প্রসঙ্গে।
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// inflate the main layout for the activity
setContentView(R.layout.activity_main);
// get a reference to the already created main layout
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.activity_main_layout);
// inflate (create) another copy of our custom layout
LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);
// make changes to our custom layout and its subviews
myLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
TextView textView = (TextView) myLayout.findViewById(R.id.textView);
textView.setText("New Layout");
// add our custom layout to the main layout
mainLayout.addView(myLayout);
}
}
findViewById
ইতিমধ্যে কোনও লেআউট স্ফীত হওয়ার পরে কীভাবে ব্যবহৃত হবে তা লক্ষ্য করুন ।
উপরের উদাহরণের জন্য এখানে এক্সএমএল দেওয়া আছে।
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main_layout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<!-- Here is the inserted layout -->
<include layout="@layout/my_layout"/>
</LinearLayout>
my_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@color/colorPrimary">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:padding="5dp"
android:textColor="@android:color/white"
android:text="My Layout"/>
</RelativeLayout>
RecyclerView
। ( তালিকা বা গ্রিডেরRecyclerView
জন্য এই উদাহরণগুলি দেখুন See ) আপনাকে তালিকা বা গ্রিডে প্রতিটি একক দৃশ্যমান আইটেমের জন্য একটি নতুন লেআউট স্ফীত করতে হবে।myLayout
এটি একটি ভিউ, যদিও আমি এটিকে একটি রিলেটিভ লেআউট হিসাবে স্ফীত করতে পারতাম (my_layout.xML দেখুন)। এটি স্ফীত হওয়ার পরে আমি এটিকে লিনিয়ারালাউট পিতামাতার (অর্থাৎ, mainLayout
) একটি সংক্ষিপ্তসার হিসাবে যুক্ত করি ।
লেআউটইনফ্লেটার.ইনফ্লেট () আপনার অ্যাপ্লিকেশন উত্স কোডে ব্যবহারযোগ্য, একটি আসল ভিউ অবজেক্টে কোনও ভিউকে সংজ্ঞায়িত করে একটি রেজ / লেআউট / *। XML ফাইল রূপান্তর করার একটি উপায় সরবরাহ করে।
বুনিয়াদি দুটি পদক্ষেপ: স্ফীতকটি পান এবং তারপরে সংস্থানটি স্ফীত করুন
আপনি কিভাবে inflater পেতে?
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
এক্সএমএল ফাইলটি "list_item.xML" ধরে ধরে আপনি কীভাবে ভিউ পাবেন?
View view = inflater.inflate(R.layout.list_item, parent, false);
এখানে পূর্বেরটির মতোই অন্য একটি উদাহরণ রয়েছে, তবে এটি সরবরাহ করতে পারে এমন স্ফীত পরামিতি এবং গতিশীল আচরণ আরও প্রদর্শন করতে বর্ধিত।
মনে করুন আপনার তালিকাভিউ সারি বিন্যাসে টেক্সটভিউগুলির পরিবর্তনশীল সংখ্যা থাকতে পারে। সুতরাং প্রথমে আপনি বেস আইটেম ভিউকে স্ফীত করুন (ঠিক আগের উদাহরণের মতো), এবং তারপরে রান-টাইমে গতিশীলভাবে পাঠ্য ভিউগুলি যুক্ত করে লুপ করুন। অ্যান্ড্রয়েড ব্যবহার: লেআউট_ ওয়েট অতিরিক্তভাবে সবকিছুকে পুরোপুরিভাবে সাজায়।
এখানে লেআউটগুলি সংস্থানগুলি রয়েছে:
list_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/field1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"/>
<TextView
android:id="@+id/field2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
</LinearLayout>
schedule_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
বেসএডাপ্টার শ্রেণীর বর্ধনের ক্ষেত্রে গেটভিউ পদ্ধতিটি ওভাররাইড করুন
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
View lst_item_view = inflater.inflate(R.layout.list_layout, null);
TextView t1 = (TextView) lst_item_view.findViewById(R.id.field1);
TextView t2 = (TextView) lst_item_view.findViewById(R.id.field2);
t1.setText("some value");
t2.setText("another value");
// dinamically add TextViews for each item in ArrayList list_schedule
for(int i = 0; i < list_schedule.size(); i++){
View schedule_view = inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false);
((TextView)schedule_view).setText(list_schedule.get(i));
((ViewGroup) lst_item_view).addView(schedule_view);
}
return lst_item_view;
}
বিভিন্ন স্ফীত পদ্ধতি কলগুলি নোট করুন :
inflater.inflate(R.layout.list_layout, null); // no parent
inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false); // with parent preserving LayoutParams
এই শ্রেণীর সাথে সম্পর্কিত View
বস্তুগুলিতে লেআউট এক্সএমএল ফাইল ইনস্ট্যান্ট করতে ব্যবহৃত হয় । এটি কখনই সরাসরি ব্যবহার করা হয় না - ব্যবহার করুন getLayoutInflater()
বা getSystemService(String)
এমন একটি আদর্শ LayoutInflater
উদাহরণ পুনরুদ্ধার করতে যা ইতিমধ্যে বর্তমান প্রসঙ্গে জড়িয়ে রয়েছে এবং আপনি যে ডিভাইসটি চালাচ্ছেন তার জন্য সঠিকভাবে কনফিগার করা হয়েছে। উদাহরণ স্বরূপ:
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
তথ্যসূত্র: http://developer.android.com/references/android/view/LayoutInflater.html
স্ফীতকরণের অর্থ হল XML ফাইলটি পড়া যা কোনও বিন্যাস (বা জিইউআই উপাদান) বর্ণনা করে এবং এর সাথে সম্পর্কিত প্রকৃত অবজেক্ট তৈরি করে এবং এভাবে অ্যান্ড্রয়েড অ্যাপের মধ্যে বস্তুটি দৃশ্যমান করে।
final Dialog mDateTimeDialog = new Dialog(MainActivity.this);
// Inflate the root layout
final RelativeLayout mDateTimeDialogView = (RelativeLayout) getLayoutInflater().inflate(R.layout.date_time_dialog, null);
// Grab widget instance
final DateTimePicker mDateTimePicker = (DateTimePicker) mDateTimeDialogView.findViewById(R.id.DateTimePicker);
এই ফাইলটি তারিখ_টাইম_ডায়ালগ.এক্সএমএল হিসাবে সংরক্ষণ করতে পারে :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/DateTimeDialog" android:layout_width="100px"
android:layout_height="wrap_content">
<com.dt.datetimepicker.DateTimePicker
android:id="@+id/DateTimePicker" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout android:id="@+id/ControlButtons"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_below="@+id/DateTimePicker"
android:padding="5dip">
<Button android:id="@+id/SetDateTime" android:layout_width="0dip"
android:text="@android:string/ok" android:layout_weight="1"
android:layout_height="wrap_content"
/>
<Button android:id="@+id/ResetDateTime" android:layout_width="0dip"
android:text="Reset" android:layout_weight="1"
android:layout_height="wrap_content"
/>
<Button android:id="@+id/CancelDialog" android:layout_width="0dip"
android:text="@android:string/cancel" android:layout_weight="1"
android:layout_height="wrap_content"
/>
</LinearLayout>
এই ফাইলটি তারিখ_কাল_পিকের.এক্সএমএল হিসাবে সংরক্ষণ করা যায় :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="wrap_content" `enter code here`
android:padding="5dip" android:id="@+id/DateTimePicker">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:baselineAligned="true"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/month_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="1dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/month_plus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_up_final"/>
<EditText
android:id="@+id/month_display"
android:layout_width="45dp"
android:layout_height="35dp"
android:background="@drawable/picker_middle"
android:focusable="false"
android:gravity="center"
android:singleLine="true"
android:textColor="#000000">
</EditText>
<Button
android:id="@+id/month_minus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
android:id="@+id/date_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="0.5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/date_plus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_up_final"/>
<EditText
android:id="@+id/date_display"
android:layout_width="45dp"
android:layout_height="35dp"
android:background="@drawable/picker_middle"
android:gravity="center"
android:focusable="false"
android:inputType="number"
android:textColor="#000000"
android:singleLine="true"/>
<Button
android:id="@+id/date_minus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
android:id="@+id/year_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="0.5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/year_plus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_up_final"/>
<EditText
android:id="@+id/year_display"
android:layout_width="45dp"
android:layout_height="35dp"
android:background="@drawable/picker_middle"
android:gravity="center"
android:focusable="false"
android:inputType="number"
android:textColor="#000000"
android:singleLine="true"/>
<Button
android:id="@+id/year_minus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
android:id="@+id/hour_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/hour_plus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_up_final"/>
<EditText
android:id="@+id/hour_display"
android:layout_width="45dp"
android:layout_height="35dp"
android:background="@drawable/picker_middle"
android:gravity="center"
android:focusable="false"
android:inputType="number"
android:textColor="#000000"
android:singleLine="true">
</EditText>
<Button
android:id="@+id/hour_minus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
android:id="@+id/min_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="0.35dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/min_plus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_up_final"/>
<EditText
android:id="@+id/min_display"
android:layout_width="45dp"
android:layout_height="35dp"
android:background="@drawable/picker_middle"
android:gravity="center"
android:focusable="false"
android:inputType="number"
android:textColor="#000000"
android:singleLine="true"/>
<Button
android:id="@+id/min_minus"
android:layout_width="45dp"
android:layout_height="45dp"
android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
android:id="@+id/meridiem_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="0.35dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:orientation="vertical">
<ToggleButton
android:id="@+id/toggle_display"
style="@style/SpecialToggleButton"
android:layout_width="40dp"
android:layout_height="32dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="45dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:padding="5dp"
android:gravity="center"
android:textOn="@string/meridiem_AM"
android:textOff="@string/meridiem_PM"
android:checked="true"/>
<!-- android:checked="true" -->
</LinearLayout>
</LinearLayout>
</RelativeLayout>
MainActivity
শ্রেণী হিসেবে সংরক্ষিত MainActivity.java :
public class MainActivity extends Activity {
EditText editText;
Button button_click;
public static Activity me = null;
String meridiem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.edittext1);
button_click = (Button)findViewById(R.id.button1);
button_click.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view){
final Dialog mDateTimeDialog = new Dialog(MainActivity.this);
final RelativeLayout mDateTimeDialogView = (RelativeLayout) getLayoutInflater().inflate(R.layout.date_time_dialog, null);
final DateTimePicker mDateTimePicker = (DateTimePicker) mDateTimeDialogView.findViewById(R.id.DateTimePicker);
// mDateTimePicker.setDateChangedListener();
((Button) mDateTimeDialogView.findViewById(R.id.SetDateTime)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mDateTimePicker.clearFocus();
int hour = mDateTimePicker.getHour();
String result_string = mDateTimePicker.getMonth() +" "+ String.valueOf(mDateTimePicker.getDay()) + ", " + String.valueOf(mDateTimePicker.getYear())
+ " " +(mDateTimePicker.getHour()<=9? String.valueOf("0"+mDateTimePicker.getHour()) : String.valueOf(mDateTimePicker.getHour())) + ":" + (mDateTimePicker.getMinute()<=9?String.valueOf("0"+mDateTimePicker.getMinute()):String.valueOf(mDateTimePicker.getMinute()))+" "+mDateTimePicker.getMeridiem();
editText.setText(result_string);
mDateTimeDialog.dismiss();
}
});
// Cancel the dialog when the "Cancel" button is clicked
((Button) mDateTimeDialogView.findViewById(R.id.CancelDialog)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
mDateTimeDialog.cancel();
}
});
// Reset Date and Time pickers when the "Reset" button is clicked
((Button) mDateTimeDialogView.findViewById(R.id.ResetDateTime)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
mDateTimePicker.reset();
}
});
// Setup TimePicker
// No title on the dialog window
mDateTimeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
// Set the dialog content view
mDateTimeDialog.setContentView(mDateTimeDialogView);
// Display the dialog
mDateTimeDialog.show();
}
});
}
}
স্ফীত কি করে
এটি ইনপুট (বলুন) হিসাবে একটি এক্সএমএল লেআউট নেয় এবং এটিকে ভিউ অবজেক্টে রূপান্তর করে।
কেন দরকার
আসুন এমন একটি দৃশ্য ভাবুন যেখানে আমাদের কাস্টম তালিকাভিউ তৈরি করতে হবে। এখন প্রতিটি সারিটি কাস্টম হওয়া উচিত। তবে কীভাবে আমরা এটি করতে পারি। তালিকাভিউয়ের সারিতে একটি এক্সএমএল লেআউট বরাদ্দ করা সম্ভব নয়। সুতরাং, আমরা একটি ভিউ অবজেক্ট তৈরি করি। সুতরাং আমরা এতে থাকা উপাদানগুলি (টেক্সটভিউ, চিত্রদর্শন ইত্যাদি) অ্যাক্সেস করতে পারি এবং তালিকাটিকে দেখার সারির হিসাবেও বস্তুটি নির্ধারণ করতে পারি
সুতরাং, যখনই আমাদের ভিউ টাইপ অবজেক্টটি কোথাও নির্ধারিত করতে হবে এবং আমাদের নিজস্ব কাস্টম এক্সএমএল ডিজাইন রয়েছে আমরা কেবল এটি স্ফীত দ্বারা বস্তুতে রূপান্তর করি এবং এটি ব্যবহার করি।
লেআউটইনফ্লেটার একটি শ্রেণিবদ্ধ যা জাভা প্রোগ্রামগুলিতে ব্যবহার করা যেতে পারে এর সাথে সম্পর্কিত ভিউ অবজেক্টগুলিতে লেআউট এক্সএমএল ফাইল ইনস্ট্যান্ট করতে ব্যবহৃত হয়। সহজ কথায়, অ্যান্ড্রয়েডে ইউআই তৈরির দুটি উপায় রয়েছে। একটি স্থিতিশীল উপায় এবং অন্যটি গতিশীল বা প্রোগ্রামগতভাবে। মনে করুন আমাদের কাছে একটি সাধারণ লেআউট রয়েছে মেইন.এক্সএমএল এর সাথে একটি textview
এবং একটি রয়েছে edittext
।
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout1"
>
<TextView
android:id="@+id/namelabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter your name"
android:textAppearance="?android:attr/textAppearanceLarge" >
</TextView>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginTop="14dp"
android:ems="10">
</EditText>
</LinearLayout>
আমরা স্থির উপায়ে এই বিন্যাসটি প্রদর্শন করতে পারি
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
একটি ভিউ তৈরির গতিশীল উপায়ের অর্থ ভিউটি আমাদের মেইন.এমএসএমএল-তে উল্লেখ করা হয়নি তবে আমরা রান টাইমে এটির সাথে দেখাতে চাই। উদাহরণস্বরূপ, ফুটার.এক্সএমএল হিসাবে লেআউট ফোল্ডারে আমাদের আর একটি এক্সএমএল রয়েছে
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="Add your record"
android:textSize="24sp" >
</TextView>
আমরা আমাদের মূল UI এর মধ্যে চলমান সময়ে এই পাঠ্যবক্সটি দেখাতে চাই। সুতরাং এখানে আমরা টেক্সট.এমএমএল স্ফীত করব। দেখ কিভাবে:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TextView t = (TextView)inflater.inflate(R.layout.footer,null);
lLayout = (LinearLayout)findViewById(R.id.layout1);
lLayout.addView(t);
এখানে আমি একটি লেআউটইনফ্লেটার উদাহরণ পুনরুদ্ধার করতে getSystemService (স্ট্রিং) ব্যবহার করেছি। আমি নীচের মত getSystemService (স্ট্রিং) ব্যবহার না করে স্ফীত করতে getLayoutInflator () ব্যবহার করতে পারি:
LayoutInflator inflater = getLayoutInflater();
TextView t = (TextView) inflater.inflate(R.layout.footer, null);
lLayout.addView(t);
এখানে একটি বিন্যাসের মূল দৃশ্যের জন্য একটি রিফ্রান্স পেতে, এটি স্ফীত করে এবং সেটকন্টেন্টভিউ দিয়ে এটি ব্যবহারের জন্য উদাহরণ দেখুন (দেখুন দেখুন)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater li=getLayoutInflater();
View rootView=li.inflate(R.layout.activity_main,null);
setContentView(rootView);
}
লেআউট ইনফ্লেটার এমন একটি শ্রেণি যা এক্সএমএল উপস্থিতির বর্ণনা পড়ে এবং তাদের জাভা ভিত্তিক ভিউ অবজেক্টে রূপান্তর করে।
আমার কাস্টমাইজ তালিকা আশা করি এটি ধারণাটি চিত্রিত করে
public class second extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
// TextView textview=(TextView)findViewById(R.id.textView1);
// textview.setText(getIntent().getExtras().getString("value"));
setListAdapter(new MyAdapter(this,R.layout.list_item,R.id.textView1, getResources().getStringArray(R.array.counteries)));
}
private class MyAdapter extends ArrayAdapter<String>{
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] objects) {
super(context, resource, textViewResourceId, objects);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row=inflater.inflate(R.layout.list_item,parent,false);
String[]items=getResources().getStringArray(R.array.counteries);
ImageView iv=(ImageView) row.findViewById(R.id.imageView1);
TextView tv=(TextView) row.findViewById(R.id.textView1);
tv.setText(items[position]);
if(items[position].equals("unitedstates")){
iv.setImageResource(R.drawable.usa);
}else if(items[position].equals("Russia")){
iv.setImageResource(R.drawable.russia);
}else if(items[position].equals("Japan")){
iv.setImageResource(R.drawable.japan);
}
// TODO Auto-generated method stub
return row;
}
}
}
লেআউটআইনফ্লেটার এক্সএমএলে সংজ্ঞায়িত লেআউটের উপর ভিত্তি করে অবজেক্টগুলি তৈরি করে। কাস্টম ভিউ তৈরি করা, ক্রিয়াকলাপের দর্শনগুলিতে ফ্রেগমেন্ট ভিউগুলি স্ফীত করা, ডায়ালগগুলি তৈরি করা বা কোনও ক্রিয়াকলাপের মধ্যে একটি বিন্যাসের ফাইল ভিউকে স্ফীত করা সহ লেআউটআইনফ্লেটার ব্যবহারের বিভিন্ন উপায় রয়েছে।
মূল্যস্ফীতি প্রক্রিয়া কীভাবে কাজ করে সে সম্পর্কে অনেকগুলি ভুল ধারণা রয়েছে। আমি মনে করি এটি স্ফীত () পদ্ধতির জন্য ডকুমেন্টেশনগুলির থেকে খারাপ নয় from আপনি যদি স্ফীত পদ্ধতি () পদ্ধতি সম্পর্কে বিস্তারিত জানতে চান তবে আমি এটি সম্পর্কে একটি ব্লগ পোস্ট এখানে লিখেছি:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
ইনফ্ল্যাটার আসলে কিছু ধরণের ডেটা, ভিউ, দৃষ্টান্ত, দৃশ্যমান ইউআই উপস্থাপনায় রূপান্তরিত করে .. .. এটি প্রোগ্রামের মাধ্যমে সম্ভবত ডেটা ফিড ব্যবহার করে ad তারপরে আপনার সংজ্ঞায়িত কোনও এক্সএমএল এর সাথে এটি সংহত করে, এটি ইউআইতে কীভাবে ডেটা উপস্থাপন করা উচিত তা তা বলে