Android'de LayoutInflater ne yapıyor?


Yanıtlar:


165

Bir özel görünüm kullandığınızda ListViewsatır düzenini tanımlamanız gerekir. Android widget'larını yerleştirdiğiniz bir xml oluşturursunuz ve daha sonra adaptörün kodunda böyle bir şey yapmanız gerekir:

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

Resmi belgelerden daha fazla bilgi edinin .


23
İdeal ilk öyleyse, kaynak geri dönüşüm görmek için convertView test etmelidirView view = convertView; if (view == null) { view = mInflater.... }
Jannie Theunissen

12
Bu cevabın a'nın ne olduğunu gerçekten açıkladığını sanmıyorum LayoutInflater, ancak nerede kullanılacağını açıklıyor. Cevap 1-down daha iyidir.
James Ko

4
Bu bir LayoutInflater'ın ne olduğunu açıklamaz. Nasıl kullanılacağını açıklar.
Donato

1
LayoutInflater'ın açıklamasını arıyorum.
Oyuncu1

Yürütücü1 @ kontrol edebilirsiniz Bu yazı
Bertram Gilfoyle

283

LayoutInflater sınıfı bunlara karşılık gelen Görüntüle nesneleri içine Düzen XML dosyalarının içeriğini oluşturmak için kullanılır.

Başka bir deyişle, bir XML dosyasını girdi olarak alır ve View nesnelerini buradan oluşturur.


74
Ben ne aradığını üst kısmı zaten API belgelerinde olduğundan "başka bir deyişle" bölümü
Nipuna

1
Bu hala benim için oldukça soyut görünüyor. Diyelim ki single_list_item.xmlher bir satırı için bir dosyam var ListView. Bu XML dosyasının kullanımı bir tür şişirici gibi mi?
JohnK

168

Ne yapar LayoutInflator?

Android programlamaya ilk başladığımda LayoutInflaterve ile gerçekten kafam karıştı findViewById. Bazen birini bazen de diğerini kullandık.

  • LayoutInflaterxml düzenlerinizden birinden yeni View(veya Layout) bir nesne oluşturmak için kullanılır .
  • findViewByIdsize daha önce oluşturulmuş olan bir görünüme referans verir. Sen henüz görüntüleme oluşturmadığınızı düşünebilir, ama istediğim zaman setContentViewiçinde onCreate, onun subviews birlikte etkinliğin düzen perde arkasında şişirilmiş (oluşturulan) alır.

Görünüm zaten varsa, o zaman kullanın findViewById. Değilse, a ile oluşturun LayoutInflater.

Misal

İşte yaptığım LayoutInflaterve hem findViewByIdeylem halinde olan küçük bir proje . Özel bir kod olmadan, düzen böyle görünür.

resim açıklamasını buraya girin

Mavi kare, ana düzene eklenmiş özel bir düzendir include( daha fazla bilgi için buraya bakın ). İçerik görünümünün bir parçası olduğu için otomatik olarak şişirildi. Gördüğünüz gibi, kod hakkında özel bir şey yok.

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Şimdi özel düzenimizin başka bir kopyasını şişirelim (oluşturalım) ve ekleyelim.

resim açıklamasını buraya girin

LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);

Yeni görünüm düzenini şişirmek için yaptığım tek şey, şişiriciye xml dosyamın adını ( my_layout), eklemek istediğim üst düzeni ( mainLayout) söylemek ve aslında henüz eklemek istemediğimi söylemekti ( false) . (Ayrıca üst öğeyi de ayarlayabilirim null, ancak daha sonra özel düzenimin kök görünümünün düzen parametreleri yok sayılır.)

İşte yine bağlam içinde.

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

findViewByIdYalnızca bir düzen zaten şişirildikten sonra nasıl kullanıldığına dikkat edin .

Ek Kod

Yukarıdaki örnek için xml.

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>

Ne zaman LayoutInflater'a ihtiyacınız var?

  • Çoğu insanın kullandığı en yaygın zaman a RecyclerView. ( Liste veya ızgaraRecyclerView için bu örneklere bakın .) Listedeki veya ızgaradaki görünür her öğe için yeni bir düzen şişirmeniz gerekir.
  • Programlı olarak eklemek istediğiniz karmaşık bir mizanpajınız varsa (örneğimizde yaptığımız gibi) bir düzen şişirme de kullanabilirsiniz. Hepsini kodda yapabilirsiniz, ancak önce xml'de tanımlamak ve daha sonra şişirmek çok daha kolaydır.

21
Çözüm olarak işaretlenen cevaptan çok, çok daha iyi bir açıklama. Bazen hayat adil olmaz.
Steve Wellens

Merhaba efendim, main_activity.xml içinde birden fazla görünümüm varsa, o zaman main_activity'de external.xml görünümünü center layout_gravity ile nasıl ayarlayabilirim.
Prens

Bu kabul edilen cevap olmalı. Yeni başlayanlar için anlaşılması çok kolay.
Bay Cold

Mylayout bir Görünüm türü veya LinearLayout türü mü?
HS Singh

@HSSingh, myLayoutbir RelativeLayout olarak şişirmiş olsam da bir Görünüm (bkz. My_layout.xml). Şişirildikten sonra LinearLayout üst öğesinin (yani mainLayout) alt görünümü olarak ekliyorum .
Suragch

31

LayoutInflater.inflate (), bir görünümü tanımlayan bir res / layout / *. Xml dosyasını uygulama kaynak kodunuzda kullanılabilen gerçek bir View nesnesine dönüştürmek için bir yol sağlar.

temel iki adım: inflater olsun ve sonra kaynağı şişirmek

Şişirmeyi nasıl elde edersiniz?

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

Xml dosyasının "list_item.xml" olduğunu varsayarak görünümü nasıl elde edersiniz?

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

22

İşte öncekine benzer, ancak şişirme parametrelerini ve sağlayabileceği dinamik davranışı daha fazla göstermek için genişletilen başka bir örnek.

ListView satır düzeninizde değişken sayıda TextView olabileceğini varsayın. Bu yüzden önce temel öğe Görünümü'nü şişirirsiniz (önceki örnekte olduğu gibi) ve ardından çalışma zamanında TextView'leri dinamik olarak ekleyerek döngü yaparsınız. Android: layout_weight kullanarak ek olarak her şeyi mükemmel şekilde hizalar.

Layouts kaynakları şunlardır:

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"/>

BaseAdapter sınıfının uzantısında getView yöntemini geçersiz kılma

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

Not farklı şişirme yöntem çağrıları:

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

Bu sınıf, düzen XML dosyasını karşılık gelen Viewnesnelerine başlatmak için kullanılır . Hiçbir zaman doğrudan kullanılmaz - geçerli bağlama bağlanmış ve üzerinde çalıştığınız aygıt için doğru yapılandırılmış standart bir örneği almak için getLayoutInflater()veya öğesini getSystemService(String)kullanın LayoutInflater. Örneğin:

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

Referans: http://developer.android.com/reference/android/view/LayoutInflater.html


2
Bu doğru olabilir ama soruyu cevaplamıyor.
Sinthia V

8

Şişirme, bir mizanpajı (veya GUI öğesini) açıklayan XML dosyasını okumak ve ona karşılık gelen gerçek nesneleri oluşturmak ve böylece nesneyi bir Android uygulamasında görünür kılmak anlamına gelir.

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

Bu dosya date_time_dialog.xml olarak kaydedilebilir :

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

Bu dosya date_time_picker.xml olarak kaydedilebilir :

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

MainActivityOlarak kaydedilen sınıf 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

Şişirici ne yapar

Bir xml düzenini input (say) olarak alır ve View nesnesine dönüştürür.

Neden gerekli

Özel bir liste görünümü oluşturmamız gereken bir senaryo düşünelim. Şimdi her satır özel olmalıdır. Ama bunu nasıl yapabiliriz. Liste görünümü satırına bir xml düzeni atamak mümkün değildir. Böylece, bir View nesnesi oluşturuyoruz. Böylece içindeki öğelere erişebiliriz (metin görünümü, görüntü görüntüleme vb.) Ve nesneyi liste görünümü satırı olarak atayabiliriz

Bu nedenle, bir yere görünüm türü nesnesini atamamız gerektiğinde ve özel xml tasarımımız olduğunda, onu şişirerek nesneye dönüştürüyoruz ve kullanıyoruz.


Yani, Bay Zahan, Javascript'teki DOM gibi mi? • o •
Jeancarlo Fontalvo

6

LayoutInflater , düzen XML dosyasını Java programlarında kullanılabilen karşılık gelen görünüm nesnelerine somutlaştırmak için kullanılan bir sınıftır. Basit bir ifadeyle, android'de UI oluşturmanın iki yolu vardır. Biri statik, diğeri dinamik veya programlı. Aşağıdaki gibi bir textviewve bir tanesine sahip basit bir main.xml düzenimiz olduğunu varsayalım 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>

Bu düzeni durağan bir şekilde görüntüleyebiliriz.

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

Bir görünüm oluşturmanın dinamik bir yolu, görünümün main.xml dosyamızda belirtilmediği anlamına gelir, ancak bununla çalışma zamanında göstermek istiyoruz. Örneğin, düzen klasöründe footer.xml olarak başka bir XML var

<?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>

Bu metin kutusunu ana kullanıcı arayüzümüzde çalışma zamanında göstermek istiyoruz. Burada text.xml'yi şişireceğiz. Nasıl olduğunu gör:

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

Burada bir LayoutInflater örneği almak için getSystemService (String) kullandım. Aşağıdaki gibi getSystemService (String) kullanmak yerine şişirmek için getLayoutInflator () kullanabilirsiniz:

LayoutInflator inflater = getLayoutInflater();
TextView t = (TextView) inflater.inflate(R.layout.footer, null);
lLayout.addView(t);

5

Aşağıda, bir mizanpajın kök Görünümü için başvuru alma, şişirme ve setContentView (Görünüm görünümü)

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


}

1

Layout inflater, xml görünüm açıklamasını okuyan ve bunları java tabanlı View nesnelerine dönüştüren bir sınıftır.


0

özelleştirme listem umarım konsepti resmediyor

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

LayoutInflater, Android için temel bir bileşendir. Xml dosyalarını görünüm hiyerarşilerine dönüştürmek için her zaman kullanmalısınız.


0

LayoutInflater, XML'de tanımlanan mizanpajlara dayalı olarak Görüntüleme nesneleri oluşturur. Özel Görünümler oluşturma, Parça görünümlerini Etkinlik görünümlerine şişirme, İletişim Kutuları oluşturma veya yalnızca bir düzen dosyası Görünümünü bir Etkinliğe şişirme gibi LayoutInflater'ı kullanmanın birkaç farklı yolu vardır.

Enflasyon sürecinin nasıl işlediğine dair birçok yanlış anlama var. Bu inflate () yöntemi için belgelerin kötü geldiğini düşünüyorum. İnflate () yöntemi hakkında ayrıntılı bilgi edinmek istiyorsanız, buraya bir blog yazısı yazdım:

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


0

Inflater aslında bir çeşit veri, görünüm, örnek, görünür UI temsili dönüştürmek .. ..Bu programlı olarak belki adaptörler, vb içine veri besleme kullanır. daha sonra tanımladığınız bir xml ile tümleştirerek, verilerin kullanıcı arayüzünde nasıl temsil edilmesi gerektiğini söyler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.