Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

androidとkotlinの入門 電卓

More than 1 year has passed since last update.

タイトルどおりです

ただボタンが多いだけのアプリです

xmlファイルを2つに分け、片側を読み出す事してます。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:id="@+id/answerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#e4e2e2"
            android:text=""
            android:textAlignment="textEnd"
            android:textColor="#f39800"
            android:textSize="30sp" />
        <Button
            android:id="@+id/buttonClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="CLR"
            android:textSize="30sp" />
        <include
            android:id="@+id/calkey"
            layout="@layout/ten_key"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

読み込まれる方は数字のボタン

ten_key.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <GridLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:columnCount="4">
        <Button
            android:id="@+id/button_7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="7" />
        <Button
            android:id="@+id/button_8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="8" />
        <Button
            android:id="@+id/button_9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="9" />
        <Button
            android:id="@+id/button_divide"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="÷" />
        <Button
            android:id="@+id/button_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="4" />
        <Button
            android:id="@+id/button_5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="5" />
        <Button
            android:id="@+id/button_6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="6" />
        <Button
            android:id="@+id/button_multiply"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="×" />
        <Button
            android:id="@+id/button_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1" />
        <Button
            android:id="@+id/button_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2" />
        <Button
            android:id="@+id/button_3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="3" />
        <Button
            android:id="@+id/button_minus"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-" />
        <Button
            android:id="@+id/button_0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0" />
        <Button
            android:id="@+id/button_equal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="=" />
        <Button
            android:id="@+id/button_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="3"
            android:text="+" />
    </GridLayout>
</android.support.constraint.ConstraintLayout>

本来、生成とかしたほうが簡単なような気がしますが
気にしないでゴリゴリ書いてます

コードの方は、ボタンが押されたらどうするか処理してるだけなので難しいことしてません。

MainActivity.kt
package jp.example.hoge.calculator

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.ten_key.view.*

class MainActivity : AppCompatActivity() {
    var answerVal = 0               // 表示している値
    var inputlen = 0               // 桁数
    var memoVal = 0               // 一時記憶

    // 演算モード
    enum class calMode {
        NOTMAL,
        PLUS,
        MINUS,
        MULT,
        DIV,
        EQUAL
    }

    var calModeNew: calMode = calMode.NOTMAL

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 各ボタン押された時の処理登録
        buttonClear.setOnClickListener {
            answerVal = 0
            inputlen = 0
            memoVal = 0
            calModeNew = calMode.NOTMAL
            answerView.text = answerVal.toString()
        }
        calkey.button_0.setOnClickListener { valAdd(0) }
        calkey.button_1.setOnClickListener { valAdd(1) }
        calkey.button_2.setOnClickListener { valAdd(2) }
        calkey.button_3.setOnClickListener { valAdd(3) }
        calkey.button_4.setOnClickListener { valAdd(4) }
        calkey.button_5.setOnClickListener { valAdd(5) }
        calkey.button_6.setOnClickListener { valAdd(6) }
        calkey.button_7.setOnClickListener { valAdd(7) }
        calkey.button_8.setOnClickListener { valAdd(8) }
        calkey.button_9.setOnClickListener { valAdd(9) }
        calkey.button_add.setOnClickListener { calModeCheng(calMode.PLUS) }
        calkey.button_minus.setOnClickListener { calModeCheng(calMode.MINUS) }
        calkey.button_multiply.setOnClickListener { calModeCheng(calMode.MULT) }
        calkey.button_divide.setOnClickListener { calModeCheng(calMode.DIV) }
        calkey.button_equal.setOnClickListener { calModeCheng(calMode.EQUAL) }
    }

    // 数値ボタン押された 表示値×10して1桁目に加算
    private fun valAdd(item: Int) {
        if (inputlen == 0) {
            answerVal = 0
        }
        if (10 > inputlen) {
            inputlen++
            answerVal = answerVal * 10 + item
        }
        answerView.text = answerVal.toString()
    }

    // 演算ボタンおされた
    private fun calModeCheng(setMode: calMode) {
        // 入力があったら
        if (0 < inputlen) {
            // 前の演算モードに応じて計算
            when (calModeNew) {
                calMode.PLUS -> answerVal += memoVal
                calMode.MINUS -> answerVal = memoVal - answerVal
                calMode.MULT -> answerVal = memoVal * answerVal
                calMode.DIV -> answerVal = if (0 == answerVal) 0 else memoVal / answerVal
                else -> {
                }
            }
        }
        // 次の計算の準備
        inputlen = 0
        calModeNew = setMode
        memoVal = answerVal
        // 結果表示
        answerView.text = answerVal.toString()
    }
}

ボタンを配列みたいにできなのかな

calculator.png

こんな感じになります

folivora
androidとkotlinの初心者 独学なので正しいのかわからないので、コードをさらしてみました
https://folivoradesu.blogspot.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away