Tous les articles

Développer un convertisseur de monnaie

Relève le défi !

Réserve toi 1h aujourd’hui (ou demain si tu lis cet article tard le soir 🙂 ) pour développer un convertisseur de monnaie. Je t’explique tout dans la vidéo juste en dessous !

Ressources :

La solution que je propose

Le layout (main_activity.xml) :

Spoiler

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Spinner
            android:id="@+id/spinner1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Space
            android:layout_width="20dp"
            android:layout_height="wrap_content" />

        <Spinner
            android:id="@+id/spinner2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/edittext1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="Valeur 1"
            android:inputType="numberDecimal" />

        <Space
            android:layout_width="20dp"
            android:layout_height="wrap_content" />

        <EditText
            android:id="@+id/edittext2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="Valeur 2"
            android:inputType="numberDecimal" />
    </LinearLayout>

</LinearLayout>

[collapse]

Le fichier strings.xml :

Spoiler

<resources>
    <string name="app_name">ConversionMonnaie</string>

    <string-array name="monnaies_array">
        <item>Euro</item>
        <item>Dollar</item>
        <item>Livre Sterling</item>
        <item>Peso mexicain</item>
    </string-array>

    <!-- Taux pour convertir 1€ en la monnaie -->
    <string-array name="monnaies_taux_array">
        <item>1</item>
        <item>1.17</item>
        <item>0.89</item>
        <item>21.97</item>
    </string-array>
</resources>

[collapse]

Le fichier Java (MainActivity.java) :

Spoiler

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;

public class MainActivity extends AppCompatActivity {

    Spinner spinner1;
    Spinner spinner2;

    EditText editText1;
    EditText editText2;

    boolean updateEditText = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinner1 = findViewById(R.id.spinner1);
        spinner2 = findViewById(R.id.spinner2);

        editText1 = findViewById(R.id.edittext1);
        editText2 = findViewById(R.id.edittext2);

        //Initialisation des Spinners
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.monnaies_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner1.setAdapter(adapter);
        spinner2.setAdapter(adapter);

        spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                updateConversion(editText1.getText().toString(), editText2, spinner1, spinner2);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

        spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                updateConversion(editText1.getText().toString(), editText2, spinner1, spinner2);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

        //Initialisation des EditText
        editText1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                updateConversion(s.toString(), editText2, spinner1, spinner2);
            }
        });

        editText2.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                updateConversion(s.toString(), editText1, spinner2, spinner1);
            }
        });
    }

    public void updateConversion(String valeurDepart, EditText editTextArrive, Spinner spinnerDepart, Spinner spinnerArrivee){
        if (updateEditText)
            return;
        int monnaieDepartPos = spinnerDepart.getSelectedItemPosition();
        int monnaieArriveePos = spinnerArrivee.getSelectedItemPosition();
        double valeurDepartD = 0;
        try {
            valeurDepartD = Double.parseDouble(valeurDepart);
        } catch (Exception e){
            return;
        }
        double valeurConvertie = conversion(monnaieDepartPos, monnaieArriveePos, valeurDepartD);
        valeurConvertie = Math.round(valeurConvertie * 100) / (double) 100;

        updateEditText = true;
        editTextArrive.setText(valeurConvertie + "");
        updateEditText = false;
    }

    public double conversion(int monnaieDepartPos, int monnaieArriveePos, double valeurDepart){
        String[] tauxArray = getResources().getStringArray(R.array.monnaies_taux_array);
        double taux1 = Double.parseDouble(tauxArray[monnaieDepartPos]);
        double taux2 = Double.parseDouble(tauxArray[monnaieArriveePos]);
        double valeurEuro = valeurDepart * (1/taux1);
        double valeurArrivee = valeurEuro * taux2;
        return valeurArrivee;
    }
}

[collapse]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *