web-dev-qa-db-fra.com

Que fait LayoutInflater dans Android?

Quelle est l'utilisation de LayoutInflater dans Android?

320
user386430

Lorsque vous utilisez une vue personnalisée dans un ListView, vous devez définir la disposition des lignes. Vous créez un xml où vous placez les widgets Android, puis dans le code de l'adaptateur, vous devez procéder de la manière suivante:

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

Plus d'informations dans le documentation officielle .

163
Macarse

LayoutInflater La classe est utilisée pour instancier un fichier XML de présentation dans les objets View correspondants.

En d'autres termes, il prend en entrée un fichier XML et construit les objets View à partir de celui-ci.

271
Pentium10

Que fait LayoutInflator ?

Lorsque j'ai commencé à programmer Android, j'étais vraiment confus par LayoutInflater et findViewById. Parfois, nous utilisions l'un et parfois l'autre.

  • LayoutInflater est utilisé pour créer un nouvel objet View (ou Layout) à partir de l'une de vos présentations XML.
  • findViewById vous donne simplement une référence à une vue déjà créée. Vous pensez peut-être que vous n'avez pas encore créé de vues, mais chaque fois que vous appelez setContentView dans onCreate, la présentation de l'activité, ainsi que ses sous-vues, sont gonflées (créées) en arrière-plan.

Donc, si la vue existe déjà, utilisez findViewById. Sinon, créez-le avec un LayoutInflater.

Exemple

Voici un mini-projet que j'ai réalisé et qui montre à la fois LayoutInflater et findViewById en action. Sans code spécial, la disposition ressemble à ceci.

enter image description here

Le carré bleu est une disposition personnalisée insérée dans la disposition principale avec include (voir ici pour plus d'informations). Il a été gonflé automatiquement car il fait partie de la vue du contenu. Comme vous pouvez le constater, le code n’a rien de spécial.

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

Maintenant, gonflons (créons) une autre copie de notre mise en page personnalisée et ajoutons-la.

enter image description here

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

Pour gonfler la nouvelle présentation, tout ce que j'ai fait est de lui indiquer le nom de mon fichier xml (my_layout), la présentation parente à laquelle je veux ajouter (mainLayout) et que je ne souhaite pas réellement l'ajouter encore (false). (Je pourrais également définir le parent sur null, mais les paramètres de présentation de la vue racine de ma présentation personnalisée seraient ignorés.)

Le voici à nouveau dans le contexte.

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

Notez que findViewById est utilisé uniquement après qu’un modèle ait été gonflé.

Code supplémentaire

Voici le XML pour l'exemple ci-dessus.

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>

Quand avez-vous besoin de LayoutInflater

  • La plupart du temps, les gens l'utilisent le plus souvent dans un RecyclerView. (Voir ces exemples RecyclerView pour un liste ou un grille .) Vous devez gonfler une nouvelle présentation pour chaque élément visible de la liste ou de la grille.
  • Vous pouvez également utiliser un gonfleur de présentation si vous souhaitez ajouter par programmation une présentation complexe (comme nous l'avons fait dans notre exemple). Vous pouvez tout faire en code, mais il est beaucoup plus facile de le définir en XML d'abord, puis de le gonfler.
125
Suragch

LayoutInflater.inflate () fournit un moyen de convertir un fichier res/layout/*. Xml définissant une vue en un objet View utilisable dans le code source de votre application.

deux étapes de base: obtenir le gonfleur puis gonfler la ressource

Comment obtenez-vous l'inflateur?

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

Comment obtenez-vous la vue en supposant que le fichier XML soit "list_item.xml"?

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

Voici un autre exemple similaire au précédent, mais étendu pour démontrer davantage les paramètres de gonflage et le comportement dynamique qu’il peut fournir.

Supposons que votre disposition de ligne ListView puisse avoir un nombre variable de TextViews. Commencez donc par gonfler la vue de l’élément de base (comme dans l’exemple précédent), puis effectuez une boucle en ajoutant dynamiquement TextViews au moment de l’exécution. En utilisant Android: layout_weight aligne en outre tout parfaitement.

Voici les ressources de mise en page:

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

Remplacer la méthode getView dans l'extension de la classe BaseAdapter

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

Note différents appels de méthode de gonflage:

inflater.inflate(R.layout.list_layout, null); // no parent
inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false); // with parent preserving LayoutParams
22
MSquare

Cette classe est utilisée pour instancier un fichier XML de mise en page dans les objets View correspondants. Il n'est jamais utilisé directement - utilisez getLayoutInflater() ou getSystemService(String) pour récupérer une instance standard LayoutInflater déjà connectée au contexte actuel et correctement configurée pour le périphérique utilisé. Par exemple:

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

Référence: http://developer.Android.com/reference/Android/view/LayoutInflater.html

12

Gonfler signifie lire le fichier XML qui décrit une présentation (ou un élément d'interface graphique) et créer les objets qui lui correspondent, et ainsi rendre l'objet visible dans une application Android.

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

Ce fichier pourrait être enregistré sous le format date_time_dialog.xml:

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

Ce fichier pourrait être enregistré sous le format date_time_picker.xml:

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

La classe MainActivity enregistrée sous le nom 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();
            }
        });
    }
}
8
Jijo

Quel gonfleur fait

Il prend une mise en page XML comme entrée (par exemple) et la convertit en objet View.

Pourquoi besoin

Pensons à un scénario dans lequel nous devons créer une liste personnalisée. Maintenant, chaque ligne doit être personnalisée. Mais comment pouvons-nous le faire. Il n'est pas possible d'attribuer une mise en page XML à une ligne de listview. Nous créons donc un objet View. Ainsi, nous pouvons accéder aux éléments qu'il contient (textview, imageview, etc.) et également affecter l'objet en tant que ligne de listview.

Donc, chaque fois que nous devons assigner un objet de type vue quelque part et que nous avons notre conception XML personnalisée, nous le convertissons simplement en objet par inflater et l’utilisons.

6
Zahan Safallwa

LayoutInflater est une classe utilisée pour instancier un fichier XML de présentation dans les objets de vue correspondants, qui peut être utilisée dans les programmes Java. En termes simples, il existe deux façons de créer une interface utilisateur dans Android. L’une est statique et l’autre est dynamique ou programmatique. Supposons que nous ayons une disposition simple main.xml ayant un textview et un edittext comme suit.

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

Nous pouvons afficher cette mise en page de manière statique en

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

Une manière dynamique de créer une vue signifie que la vue n'est pas mentionnée dans notre fichier main.xml, mais nous voulons montrer cela avec le temps d'exécution. Par exemple, nous avons un autre fichier XML dans le dossier de présentation sous le nom footer.xml.

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

Nous voulons afficher cette zone de texte au moment de l'exécution dans notre interface utilisateur principale. Nous allons donc ici gonfler text.xml. Regardez comment:

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

Ici, j'ai utilisé getSystemService (String) pour récupérer une instance LayoutInflater. Je peux aussi utiliser getLayoutInflator () pour gonfler au lieu d'utiliser getSystemService (String) comme ci-dessous:

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

voici un exemple pour obtenir une référence pour la vue racine d'une mise en page, pour la gonfler et l'utiliser avec setContentView (View View)

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


}
5
Gal Rom

Layout inflater est une classe qui lit la description de l'apparence xml et la convertit en objets View basés sur Java.

1
Muhammed Shibin

Inflater en fait une sorte de conversion en données, vues, instances, en représentation visible de l'interface utilisateur .. ..mais elle utilise les données en flux depuis peut-être des adaptateurs, etc. par programme. puis en l'intégrant à un xml que vous avez défini, qui indique comment les données doivent être représentées dans l'interface utilisateur

0
user6684451

LayoutInflater crée des objets View basés sur des dispositions définies en XML. Il existe différentes manières d’utiliser LayoutInflater, notamment la création de vues personnalisées, l’agrandissement des vues fragmentées en vues d’activités, la création de dialogues ou simplement le gonflement d’une vue de fichier de mise en forme dans une activité.

Il y a beaucoup d'idées fausses sur le fonctionnement du processus d'inflation. Je pense que cela vient de la médiocrité de la documentation de la méthode inflate (). Si vous voulez en savoir plus sur la méthode inflate (), j'ai écrit un article à ce sujet dans le blog:

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

0
seanjfarrell

LayoutInflater est un composant fondamental d'Android. Vous devez l’utiliser tout le temps pour transformer les fichiers XML en hiérarchies de vues.

0
vishwas

ma liste de personnalisation espère que cela illustre le concept

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