Понедельник, 19.11.2018, 00:09
Поиск
Никнэйм
Сертификат на никнейм Olelucoye, зарегистрирован на Тимофеев Константин Михайлович
Зарегистрируй свой никнейм
Обратная связь
olelucoye.tk@yandex.ru
Реклама AdSense
Реклама
Друзья сайта
  • Лига медицинского права
  • Гостиница "Зай"
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Андроид разработка

    Программируем калькулятор на андроид. Урок 3.

    Урок сделан специально для группы http://vk.com/amdroid.developer

    Урок 3. Создаем меню.

    В этом уроке создадим меню, состоящее из двух пунктов - "Настройки" и "О программе"

    Для работы с меню в нашем активити есть два метода onCreateOptionsMenu - в нем создается само меню, и onOptionsItemSelected - в нем обрабатываются нажатия на пункты меню.

    Пункты меню можно создать программно: menu.add("Item of menu1"), либо взять их из XML файла. По умолчанию onCreateOptionsMenu  уже содержит в себе метод, создающий меню из XML :

    getMenuInflater().inflate(R.menu.main, menu);

    Сам xml-файл меню тоже уже создан за нас. Найти его можно по адресу res\menu\main.xml. Можно создать свой файл или использовать, то что нам предложено по-умолчанию. Мы будем редактировать имеющийся. Кстати в нем уже задан один пункт меню. Если запустить приложение в эмуляторе и нажать PageUp, мы увидим меню с этим одним пунктом, но при нажатии на него ничего не произойдет.

    Открываем main.xml. Здесь задан один пункт.

    <item

            android:id="@+id/action_settings"

            android:orderInCategory="100"

            android:showAsAction="never"

            android:title="@string/action_settings"/>

    Сейчас нас интересуют параметры id - идентификатор пункта по которому будем находить его в коде и title - текст, который будет отображаться на пункте. Текст можно задать прямо здесь:

    android:title="Настройки"

    Но это не совсем правильно, потому что затруднит локализацию приложения, т.е. если мы захотим чтобы у приложения был не только русскоязычный интерфейс. Поэтому лучше использовать текст из строковых констант, которые описаны в файле res\value\string.xml. Откроем его.

    <string name="app_name">super_calc</string>

    <string name="hello_world">Hello world!</string>

    <string name="action_settings">Settings</string>

    Здесь уже описаны три строковые константы. app_name - это имя нашего приложения. Его мы видим в заголовке активити, при запуске на эмуляторе. Другие две константы мы использовать не будем, их можно удалить. Изменим имя приложения и добавим две новые, соответствующие пунктам меню.

    <string name="app_name">Калькулятор</string>

    <string name="options">Настройки</string>

    <string name="about_app">О программе</string>

    Возвращаемся к файлу меню main.xml, удаляем пункт по умолчанию, дописываем два своих.

    <item

            android:id="@+id/options_menu"

            android:title="@string/options"/>

    <item

            android:id="@+id/about_menu"

            android:title="@string/about_app"/>

    Возвращаемся в MainActivity.java к методу onOptionsItemSelected. Удаляем обработку удаленного пункта меню, ставим switch для наших пунктов. Определяем id нажатого пункта и выводим на экран сообщение о нажатом пункте.

    @Override

           public boolean onOptionsItemSelected(MenuItem item) {

                 switch(item.getItemId()){

                 case R.id.options_menu:

                        Toast.makeText(this, R.string.options, Toast.LENGTH_LONG) .show();

                        break;

                 case R.id.about_menu:

                        Toast.makeText(this, R.string.about_app, Toast.LENGTH_LONG) .show();

                        break;

                

                 }

                 return super.onOptionsItemSelected(item);

           }

    Такая обработка нажатия пунктов меню - временная мера. Впоследствии мы будем по нажатию открывать экраны настроек и "О программе". Но их сначала нужно создать и зарегистрировать в файле AndroidManifest.xml. Этим займемся в следующих уроках.

    Запускаем приложение на эмуляторе, тестируем меню.

    Программируем калькулятор на андроид. Урок 10.

    Программируем калькулятор на андроид. Урок 9.

    Программируем калькулятор на андроид. Урок 8.

    Программируем калькулятор на андроид. Урок 7.

    Программируем калькулятор на андроид. Урок 6.

    Программируем калькулятор на андроид. Урок 5.

    Программируем калькулятор на андроид. Урок 4.

    Программируем калькулятор на андроид. Урок 2.

    Программируем калькулятор на андроид. Урок 1.

     

    Листинги файлов в которые мы вносили изменения:

    string.xml

    <?xml version="1.0" encoding="utf-8"?>

    <resources>

     

        <string name="app_name">Калькулятор</string>

        <string name="options">Настройки</string>

        <string name="about_app">О программе</string>

     

    </resources>

    main.xml (меню)

    <menu xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

        tools:context="ru.urok.super_calc.MainActivity" >

     

        <item

            android:id="@+id/options_menu"

            android:title="@string/options"/>

        <item

            android:id="@+id/about_menu"

            android:title="@string/about_app"/>

     

    </menu>

    MainActivity.java

    package ru.urok.super_calc;

     

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.Menu;

    import android.view.MenuItem;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.widget.Button;

    import android.widget.TextView;

    import android.widget.Toast;

     

    public class MainActivity extends Activity implements OnClickListener {

          

           //объявляем кнопки и текстовое поле

           Button btOne, btTwo, btThree, btFour, btFive;

           Button btSix, btSeven, btEight, btNine, btZero;

           Button btPlus, btMinus, btMulti, btDiv, btEqual, btClear;

           TextView tvLCD;

           //объявляем переменные для вычислений

           int operand1, operand2, flagAction;

           double result;

          

     

           @Override

           protected void onCreate(Bundle savedInstanceState) {

                 super.onCreate(savedInstanceState);

                 setContentView(R.layout.activity_main);

                

                 //связываем кнопки с макетом

                 btOne = (Button) findViewById(R.id.btOne);

                 btTwo = (Button) findViewById(R.id.btTwo);

                 btThree = (Button) findViewById(R.id.btThree);

                 btFour = (Button) findViewById(R.id.btFour);

                 btFive = (Button) findViewById(R.id.btFive);

                 btSix = (Button) findViewById(R.id.btSix);

                 btSeven = (Button) findViewById(R.id.btSeven);

                 btEight = (Button) findViewById(R.id.btEight);

                 btNine = (Button) findViewById(R.id.btNine);

                 btZero = (Button) findViewById(R.id.btZero);

                 btPlus = (Button) findViewById(R.id.btPlus);

                 btMinus = (Button) findViewById(R.id.btMinus);

                 btMulti = (Button) findViewById(R.id.btMulti);

                 btDiv = (Button) findViewById(R.id.btDiv);

                 btEqual = (Button) findViewById(R.id.btEqual);

                 btClear = (Button) findViewById(R.id.btClear);

                 tvLCD = (TextView) findViewById(R.id.tvLCD);

                 //назначаем кнопкам слушателя

                 btOne.setOnClickListener(this);

                 btTwo.setOnClickListener(this);

                 btThree.setOnClickListener(this);

                 btFour.setOnClickListener(this);

                 btFive.setOnClickListener(this);

                 btSix.setOnClickListener(this);

                 btSeven.setOnClickListener(this);

                 btEight.setOnClickListener(this);

                 btNine.setOnClickListener(this);

                 btZero.setOnClickListener(this);

                 btPlus.setOnClickListener(this);

                 btMinus.setOnClickListener(this);

                 btMulti.setOnClickListener(this);

                 btDiv.setOnClickListener(this);

                 btClear.setOnClickListener(this);

                 btEqual.setOnClickListener(this);

                

                 //инициализируем переменные

                 operand1 = 0;

                 operand2 = 0;

                 result = 0;

                 flagAction = 0;

                 //Установим значение первого операнда в текстовое поле

                 tvLCD.setText(Integer.toString(operand1));

                

                

           }

     

           @Override

           public boolean onCreateOptionsMenu(Menu menu) {

                 // Inflate the menu; this adds items to the action bar if it is present.

                 getMenuInflater().inflate(R.menu.main, menu);

                 return true;

           }

     

           @Override

           public boolean onOptionsItemSelected(MenuItem item) {

                 switch(item.getItemId()){

                 case R.id.options_menu:

                        Toast.makeText(this, R.string.options, Toast.LENGTH_LONG).show();

                        break;

                 case R.id.about_menu:

                        Toast.makeText(this, R.string.about_app, Toast.LENGTH_LONG).show();

                        break;

                

                 }

                 return super.onOptionsItemSelected(item);

           }

     

           @Override

           public void onClick(View v) {

                 switch(v.getId()){

                 case R.id.btOne:

                        ClickNumber(1);

                        break;

                 case R.id.btTwo:

                        ClickNumber(2);

                        break;

                 case R.id.btThree:

                        ClickNumber(3);

                        break;

                 case R.id.btFour:

                        ClickNumber(4);

                        break;

                 case R.id.btFive:

                        ClickNumber(5);

                        break;

                 case R.id.btSix:

                        ClickNumber(6);

                        break;

                 case R.id.btSeven:

                        ClickNumber(7);

                        break;

                 case R.id.btEight:

                        ClickNumber(8);

                        break;

                 case R.id.btNine:

                        ClickNumber(9);

                        break;

                 case R.id.btZero:

                        ClickNumber(0);

                        break;

                 case R.id.btPlus:

                        if(flagAction == 0)flagAction = 1;

                        break;

                 case R.id.btMinus:

                        if(flagAction == 0)flagAction = 2;

                        break;

                 case R.id.btMulti:

                        if(flagAction == 0)flagAction = 3;

                        break;

                 case R.id.btDiv:

                        if(flagAction == 0)flagAction = 4;

                        break;

                 case R.id.btEqual:

                        switch(flagAction){

                               case 1:

                                      result = operand1 + operand2;

                                      break;

                               case 2:

                                      result = operand1 - operand2;

                                      break;

                               case 3:

                                      result = operand1 * operand2;

                                      break;

                               case 4:

                                      result =(double) operand1 / (double) operand2;

                                      break;

                               default:

                                      Toast.makeText(this, "Операция не задана", Toast.LENGTH_LONG);

                        }

                        if(flagAction != 0){

                               tvLCD.setText(Double.toString(result));

                               operand1 = 0;

                               operand2 = 0;

                               result = 0;

                               flagAction = 0;

                        }

                        break;

                 case R.id.btClear:

                        operand1 = 0;

                        operand2 = 0;

                        result = 0;

                        flagAction = 0;

                        tvLCD.setText(Integer.toString(operand1));

                        break;

                 }

           }

          

           private void ClickNumber(int num){

                 if(flagAction == 0){

                        operand1 = operand1*10 + num;

                        tvLCD.setText(Integer.toString(operand1));

                 }else{

                        operand2 = operand2*10 + num;

                        tvLCD.setText(Integer.toString(operand2));

                 }

           }

    }

    Категория: Андроид разработка | Добавил: Olelucoye (23.11.2014)
    Просмотров: 2124
    | Теги: создание меню, Калькулятор, java, Android | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Меню сайта
    Категории раздела
    Андроид разработка [23]
    libGDX [24]
    Мои андроид проекты [6]
    Excel [7]
    Железяки [5]
    Скрипты в блокноте [4]
    Разное [1]
    Форма входа
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Яндекс Метрика
    Яндекс.Метрика