অ্যান্ড্রয়েডের লেআউটআইনফ্লেটার কী করে?


উত্তর:


165

আপনি যখন কোনও কাস্টম ভিউ ব্যবহার করেন 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;
}

সরকারী ডকুমেন্টেশন আরও পড়ুন ।


23
আদর্শভাবে আপনার প্রথমে কনভার্টভিউ পরীক্ষা করা উচিত যদি আপনি কোনও রিসোর্সটি পুনর্ব্যবহার করতে পারেন কিনা তা দেখার জন্য,View view = convertView; if (view == null) { view = mInflater.... }
জ্যানি থিউনসিসন

12
আমি মনে করি না যে এই উত্তরটি আসলে কী LayoutInflaterতা ব্যাখ্যা করে, যদিও এটি কোথায় ব্যবহার করবে তা ব্যাখ্যা করে। উত্তর 1-ডাউন ভাল।
জেমস কো

4
এটি একটি লেআউটআইনফ্লেটার কী তা ব্যাখ্যা করে না। এটি কীভাবে এটি ব্যবহার করবেন তা ব্যাখ্যা করে।
ডোনাটো

1
আমি লেআউটইনফ্লেটারের ব্যাখ্যা খুঁজছি।
প্লেয়ার

@ প্লেয়ার 1 আপনি এই পোস্টটি চেক করতে পারেন
বার্ট্রাম গিলফয়েলে

282

LayoutInflater বর্গ তাদের সংশ্লিষ্ট দেখুন বস্তুর মধ্যে লেআউট XML ফাইল বিষয়বস্তু instantiate করতে ব্যবহৃত হয়।

অন্য কথায়, এটি ইনপুট হিসাবে একটি এক্সএমএল ফাইল নেয় এবং এটি থেকে দৃশ্য অবজেক্টগুলি তৈরি করে।


74
শীর্ষস্থানটি ইতিমধ্যে এপিআই
ডক্সে

1
এটি এখনও আমার কাছে বেশ বিমূর্ত বলে মনে হচ্ছে। সুতরাং, আসুন আমি বলি যে আমার কাছে single_list_item.xmlএকটি এর প্রতিটি লাইনের জন্য একটি ফাইল রয়েছে ListView। সেই এক্সএমএল ফাইলটির ব্যবহার কি কোনও বাছুর মতো?
JohnK

167

কি করে 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 ) আপনাকে তালিকা বা গ্রিডে প্রতিটি একক দৃশ্যমান আইটেমের জন্য একটি নতুন লেআউট স্ফীত করতে হবে।
  • আপনি যদি কোনও জটিল লেআউট থাকে যা আপনি প্রোগ্রামগতভাবে যুক্ত করতে চান তবে আপনি যেমন একটি লেআউট ইনফ্লেটারও ব্যবহার করতে পারেন (যেমন আমরা আমাদের উদাহরণে করেছি)। আপনি কোডে এটি সব করতে পারেন, তবে এটি প্রথমে xML এ সংজ্ঞায়িত করা এবং তারপরে এটি স্ফীত করে দেওয়া আরও সহজ।

20
উত্তর হিসাবে সমাধান হিসাবে চিহ্নিত চেয়ে অনেক বেশি ভাল ব্যাখ্যা। কখনও কখনও জীবন ঠিক হয় না।
স্টিভ ওয়েলেন্স 4

হ্যালো স্যার, আমার যদি আরও বেশি থাকে তবে main_activity.xml এর মধ্যে একটি ভিউ থাকি, তবে আমি কীভাবে কেন্দ্রের বিন্যাস_গ্রাভিটি সহ প্রধান_অ্যাক্টিভিটিতে বহিরাগত.এক্সএমএল ভিউ সেট করতে পারি।
যুবরাজ

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। যে কোনও প্রাথমিকের জন্য বুঝতে এত সহজ।
মিঃ কোল্ড

মাইলেআউটটি কি কোনও ভিউ টাইপ বা লিনিয়ারলআউট টাইপ?
এইচএস সিং

@ এইচএসএসিংহ, myLayoutএটি একটি ভিউ, যদিও আমি এটিকে একটি রিলেটিভ লেআউট হিসাবে স্ফীত করতে পারতাম (my_layout.xML দেখুন)। এটি স্ফীত হওয়ার পরে আমি এটিকে লিনিয়ারালাউট পিতামাতার (অর্থাৎ, mainLayout) একটি সংক্ষিপ্তসার হিসাবে যুক্ত করি ।
সুরগাচ

31

লেআউটইনফ্লেটার.ইনফ্লেট () আপনার অ্যাপ্লিকেশন উত্স কোডে ব্যবহারযোগ্য, একটি আসল ভিউ অবজেক্টে কোনও ভিউকে সংজ্ঞায়িত করে একটি রেজ / লেআউট / *। XML ফাইল রূপান্তর করার একটি উপায় সরবরাহ করে।

বুনিয়াদি দুটি পদক্ষেপ: স্ফীতকটি পান এবং তারপরে সংস্থানটি স্ফীত করুন

আপনি কিভাবে inflater পেতে?

LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

এক্সএমএল ফাইলটি "list_item.xML" ধরে ধরে আপনি কীভাবে ভিউ পাবেন?

View view = inflater.inflate(R.layout.list_item, parent, false);

22

এখানে পূর্বেরটির মতোই অন্য একটি উদাহরণ রয়েছে, তবে এটি সরবরাহ করতে পারে এমন স্ফীত পরামিতি এবং গতিশীল আচরণ আরও প্রদর্শন করতে বর্ধিত।

মনে করুন আপনার তালিকাভিউ সারি বিন্যাসে টেক্সটভিউগুলির পরিবর্তনশীল সংখ্যা থাকতে পারে। সুতরাং প্রথমে আপনি বেস আইটেম ভিউকে স্ফীত করুন (ঠিক আগের উদাহরণের মতো), এবং তারপরে রান-টাইমে গতিশীলভাবে পাঠ্য ভিউগুলি যুক্ত করে লুপ করুন। অ্যান্ড্রয়েড ব্যবহার: লেআউট_ ওয়েট অতিরিক্তভাবে সবকিছুকে পুরোপুরিভাবে সাজায়।

এখানে লেআউটগুলি সংস্থানগুলি রয়েছে:

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

12

এই শ্রেণীর সাথে সম্পর্কিত Viewবস্তুগুলিতে লেআউট এক্সএমএল ফাইল ইনস্ট্যান্ট করতে ব্যবহৃত হয় । এটি কখনই সরাসরি ব্যবহার করা হয় না - ব্যবহার করুন getLayoutInflater()বা getSystemService(String)এমন একটি আদর্শ LayoutInflaterউদাহরণ পুনরুদ্ধার করতে যা ইতিমধ্যে বর্তমান প্রসঙ্গে জড়িয়ে রয়েছে এবং আপনি যে ডিভাইসটি চালাচ্ছেন তার জন্য সঠিকভাবে কনফিগার করা হয়েছে। উদাহরণ স্বরূপ:

LayoutInflater inflater = (LayoutInflater)context.getSystemService
      (Context.LAYOUT_INFLATER_SERVICE);

তথ্যসূত্র: http://developer.android.com/references/android/view/LayoutInflater.html


2
এটি সত্য হতে পারে তবে প্রশ্নের উত্তর দেয় না।
সিনথিয়া ভি

8

স্ফীতকরণের অর্থ হল 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();
            }
        });
    }
}

6

স্ফীত কি করে

এটি ইনপুট (বলুন) হিসাবে একটি এক্সএমএল লেআউট নেয় এবং এটিকে ভিউ অবজেক্টে রূপান্তর করে।

কেন দরকার

আসুন এমন একটি দৃশ্য ভাবুন যেখানে আমাদের কাস্টম তালিকাভিউ তৈরি করতে হবে। এখন প্রতিটি সারিটি কাস্টম হওয়া উচিত। তবে কীভাবে আমরা এটি করতে পারি। তালিকাভিউয়ের সারিতে একটি এক্সএমএল লেআউট বরাদ্দ করা সম্ভব নয়। সুতরাং, আমরা একটি ভিউ অবজেক্ট তৈরি করি। সুতরাং আমরা এতে থাকা উপাদানগুলি (টেক্সটভিউ, চিত্রদর্শন ইত্যাদি) অ্যাক্সেস করতে পারি এবং তালিকাটিকে দেখার সারির হিসাবেও বস্তুটি নির্ধারণ করতে পারি

সুতরাং, যখনই আমাদের ভিউ টাইপ অবজেক্টটি কোথাও নির্ধারিত করতে হবে এবং আমাদের নিজস্ব কাস্টম এক্সএমএল ডিজাইন রয়েছে আমরা কেবল এটি স্ফীত দ্বারা বস্তুতে রূপান্তর করি এবং এটি ব্যবহার করি।


তো, মিস্টার জাহান, এটি কি জাভাস্ক্রিপ্টে ডোমের মতো? • ও •
জিনাকার্লো ফন্টোলেভো

6

লেআউটইনফ্লেটার একটি শ্রেণিবদ্ধ যা জাভা প্রোগ্রামগুলিতে ব্যবহার করা যেতে পারে এর সাথে সম্পর্কিত ভিউ অবজেক্টগুলিতে লেআউট এক্সএমএল ফাইল ইনস্ট্যান্ট করতে ব্যবহৃত হয়। সহজ কথায়, অ্যান্ড্রয়েডে ইউআই তৈরির দুটি উপায় রয়েছে। একটি স্থিতিশীল উপায় এবং অন্যটি গতিশীল বা প্রোগ্রামগতভাবে। মনে করুন আমাদের কাছে একটি সাধারণ লেআউট রয়েছে মেইন.এক্সএমএল এর সাথে একটি 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);

5

এখানে একটি বিন্যাসের মূল দৃশ্যের জন্য একটি রিফ্রান্স পেতে, এটি স্ফীত করে এবং সেটকন্টেন্টভিউ দিয়ে এটি ব্যবহারের জন্য উদাহরণ দেখুন (দেখুন দেখুন)

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LayoutInflater li=getLayoutInflater();
    View rootView=li.inflate(R.layout.activity_main,null);
    setContentView(rootView);


}

1

লেআউট ইনফ্লেটার এমন একটি শ্রেণি যা এক্সএমএল উপস্থিতির বর্ণনা পড়ে এবং তাদের জাভা ভিত্তিক ভিউ অবজেক্টে রূপান্তর করে।


0

আমার কাস্টমাইজ তালিকা আশা করি এটি ধারণাটি চিত্রিত করে

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;
    }

}

}

0

লেআউটইনফ্লেটার অ্যান্ড্রয়েডের একটি মৌলিক উপাদান। এক্সএলএমএল ফাইলগুলিকে চিত্রের শ্রেণিবিন্যাসে পরিণত করার জন্য আপনাকে অবশ্যই এটি সর্বদা ব্যবহার করতে হবে।


0

লেআউটআইনফ্লেটার এক্সএমএলে সংজ্ঞায়িত লেআউটের উপর ভিত্তি করে অবজেক্টগুলি তৈরি করে। কাস্টম ভিউ তৈরি করা, ক্রিয়াকলাপের দর্শনগুলিতে ফ্রেগমেন্ট ভিউগুলি স্ফীত করা, ডায়ালগগুলি তৈরি করা বা কোনও ক্রিয়াকলাপের মধ্যে একটি বিন্যাসের ফাইল ভিউকে স্ফীত করা সহ লেআউটআইনফ্লেটার ব্যবহারের বিভিন্ন উপায় রয়েছে।

মূল্যস্ফীতি প্রক্রিয়া কীভাবে কাজ করে সে সম্পর্কে অনেকগুলি ভুল ধারণা রয়েছে। আমি মনে করি এটি স্ফীত () পদ্ধতির জন্য ডকুমেন্টেশনগুলির থেকে খারাপ নয় from আপনি যদি স্ফীত পদ্ধতি () পদ্ধতি সম্পর্কে বিস্তারিত জানতে চান তবে আমি এটি সম্পর্কে একটি ব্লগ পোস্ট এখানে লিখেছি:

https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/


0

ইনফ্ল্যাটার আসলে কিছু ধরণের ডেটা, ভিউ, দৃষ্টান্ত, দৃশ্যমান ইউআই উপস্থাপনায় রূপান্তরিত করে .. .. এটি প্রোগ্রামের মাধ্যমে সম্ভবত ডেটা ফিড ব্যবহার করে ad তারপরে আপনার সংজ্ঞায়িত কোনও এক্সএমএল এর সাথে এটি সংহত করে, এটি ইউআইতে কীভাবে ডেটা উপস্থাপন করা উচিত তা তা বলে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.