ソースコード source code

下記アプリの主要なソースコードを公開しています。アプリ開発の参考になれば幸いです。

画像等が別途必要ですので下記情報のみでアプリが完成するものではありません。 アプリは少しずつ機能拡張していますのでストア公開されているアプリと内容が異なる場合があります。 コードはコピーして自由にお使いいただけます。ただし著作権は放棄しておりませんので全部の再掲載はご遠慮ください。部分的に再掲載したり、改変して再掲載するのは構いません。 自身のアプリ作成の参考として個人使用・商用問わず自由にお使いいただけます。 コード記述のお手本を示すものではありません。ミニアプリですので変数名などさほど気遣いしていない部分も有りますし間違いも有るかと思いますので参考程度にお考え下さい。 他の賢者の皆様が公開されているコードを参考にした箇所も含まれます。Androidアプリ開発の熟練者が書いたコードではありません。 エンジニア向け技術情報共有サービスではありませんので説明は省いています。ご了承ください。 GitHubなどへの公開は予定しておりません。

下記コードの最終ビルド日: 2021-05-08

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = "1.4.32"
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app/build.gradle

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "jp.aosystem.basalmetabolism"
        minSdkVersion 26
        targetSdkVersion 30
        multiDexEnabled true
        versionCode 7
        versionName "1.6"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary true
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        viewBinding true
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'com.google.android.gms:play-services-ads:20.1.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

app/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.aosystem.basalmetabolism">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.BasalMetabolism">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-0000000000000000~0000000000">
        </meta-data>
    </application>

</manifest>

app/src/main/java/jp/aosystem/basalmetabolism/MainActivity.kt

package jp.aosystem.basalmetabolism

import android.content.Context
import android.content.DialogInterface
import android.graphics.Shader
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.DisplayMetrics
import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.MobileAds
import jp.aosystem.basalmetabolism.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private lateinit var viewModel: ConstraintLayout
    private var inputMethodManager: InputMethodManager? = null
    private var configTheme: Int = 0    //0 or 1

    //adMob
    private lateinit var adView: AdView     //adMob
    private val adSize: AdSize
        get() {
            val display = windowManager.defaultDisplay
            val outMetrics = DisplayMetrics()
            display.getMetrics(outMetrics)
            val density = outMetrics.density
            var adWidthPixels = this.binding.adContainer.width.toFloat()
            if (adWidthPixels == 0f) {
                adWidthPixels = outMetrics.widthPixels.toFloat()
            }
            val adWidth = (adWidthPixels / density).toInt()
            return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
        }

    companion object {
        private const val AD_UNIT_ID: String = "ca-app-pub-0000000000000000/0000000000"     //adMob
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)
        this.binding = ActivityMainBinding.inflate(layoutInflater)
        this.viewModel = this.binding.root
        setContentView(this.viewModel)
        //
        supportActionBar?.hide()    //タイトルバー非表示
        //
        this.loadTheme()    //テーマ読み込みと設定
        //adMob
        MobileAds.initialize(this) {}
        this.adView = AdView(this)
        this.binding.adContainer.addView(this.adView)
        loadBanner()
        //
        this.setTouchListener()
        this.binding.radioMan.isChecked = true
        this.loadSetting()
        if (this.binding.editHeight.text.toString() != "" && this.binding.editWeight.text.toString() != "" && this.binding.editAge.text.toString() != "") {
            this.calc()
        }
        this.setTextChangeListener()
        val d = ContextCompat.getDrawable(this, R.drawable.ic_pattern2)
        this.binding.imageBack.setImageDrawable(d?.let { TileDrawable(it, Shader.TileMode.REPEAT) })
        this.binding.imageView4.setImageResource(R.drawable.ic_leaf1)
    }

    //adMob
    private fun loadBanner() {
        this.adView.adUnitId = AD_UNIT_ID
        this.adView.adSize = adSize
        val adRequest = AdRequest
            .Builder()
            //.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .build()
        this.adView.loadAd(adRequest)
    }

    //背景タッチでテキストエリアからフォーカスを外してキーボードを隠す
    private fun setTouchListener() {
        this.inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
        this.binding.editHeight.setOnFocusChangeListener { _, hasFocus ->
            if (!hasFocus) {
                this.inputMethodManager!!.hideSoftInputFromWindow(   //キーボードを隠す
                        this.binding.editHeight.windowToken,
                        InputMethodManager.HIDE_NOT_ALWAYS
                )
                // 背景にフォーカスを移す
                //this.binding.textTitle.requestFocus()
            }
        }
        this.binding.editWeight.setOnFocusChangeListener { _, hasFocus ->
            if (!hasFocus) {
                this.inputMethodManager!!.hideSoftInputFromWindow(   //キーボードを隠す
                        this.binding.editWeight.windowToken,
                        InputMethodManager.HIDE_NOT_ALWAYS
                )
                // 背景にフォーカスを移す
                //this.binding.textTitle.requestFocus()
            }
        }
        this.binding.editAge.setOnFocusChangeListener { _, hasFocus ->
            if (!hasFocus) {
                this.inputMethodManager!!.hideSoftInputFromWindow(   //キーボードを隠す
                        this.binding.editAge.windowToken,
                        InputMethodManager.HIDE_NOT_ALWAYS
                )
                // 背景にフォーカスを移す
                //this.binding.textTitle.requestFocus()
            }
        }
    }

    private fun setTextChangeListener() {
        this.binding.editHeight.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
                this@MainActivity.calc()
            }
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
        })
        //
        this.binding.editWeight.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
                this@MainActivity.calc()
            }
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
        })
        //
        this.binding.editAge.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
                this@MainActivity.calc()
            }
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
        })
        //
        this.binding.radioGroup1.setOnCheckedChangeListener { radioGroup, optionId ->
            run {
                this@MainActivity.calc()
            }
        }
    }

    private fun calc() {
        val valHeight: Int = this.binding.editHeight.text.toString().toIntOrNull() ?: 0
        val valWeight: Int = this.binding.editWeight.text.toString().toIntOrNull() ?: 0
        val valAge: Int = this.binding.editAge.text.toString().toIntOrNull() ?: 0
        val valGender: Int = if (this.binding.radioMan.isChecked) 1 else 2
        //
        var ansA1: Int = 0
        when (valGender) {
            1 -> ansA1 = (66.4730 + (13.7516 * valWeight) + (5.0033 * valHeight) - (6.7550 * valAge)).toInt()
            2 -> ansA1 = (655.0955 + (9.5634 * valWeight) + (1.8496 * valHeight) - (4.6756 * valAge)).toInt()
        }
        this.binding.textResultA1a.text = ansA1.toString() + " kcal"
        this.binding.textResultA2a.text = (ansA1 * 1.5).toInt().toString() + " kcal"
        this.binding.textResultA3a.text = (ansA1 * 1.75).toInt().toString() + " kcal"
        this.binding.textResultA4a.text = (ansA1 * 2).toString() + " kcal"
        //
        var ansB1: Int = 0
        when (valGender) {
            1 -> ansB1 = (((0.1238 + (0.0481 * valWeight) + (0.0234 * valHeight) - (0.0138 * valAge) - 0.5473)) * 1000 / 4.186).toInt()
            2 -> ansB1 = (((0.1238 + (0.0481 * valWeight) + (0.0234 * valHeight) - (0.0138 * valAge) - 0.5473 * 2)) * 1000 / 4.186).toInt()
        }
        this.binding.textResultB1a.text = ansB1.toString() + " kcal"
        this.binding.textResultB2a.text = (ansB1 * 1.5).toInt().toString() + " kcal"
        this.binding.textResultB3a.text = (ansB1 * 1.75).toInt().toString() + " kcal"
        this.binding.textResultB4a.text = (ansB1 * 2).toString() + " kcal"
        //
        this.saveSetting()
    }

    //--------------------------------------------------------------------------------

    //身長・体重・年齢・性別を保存
    private fun saveSetting() {
        getSharedPreferences("settings", Context.MODE_PRIVATE).edit().apply {
            putString("valueHeight", this@MainActivity.binding.editHeight.text.toString())
            putString("valueWeight", this@MainActivity.binding.editWeight.text.toString())
            putString("valueAge", this@MainActivity.binding.editAge.text.toString())
            putString("valueGender", if (this@MainActivity.binding.radioMan.isChecked) "1" else "2")
            apply()
        }
    }

    //身長・体重・年齢・性別を読み出し
    private fun loadSetting() {
        val pref = getSharedPreferences("settings", Context.MODE_PRIVATE)
        this.binding.editHeight.setText(pref.getString("valueHeight", "").toString())
        this.binding.editWeight.setText(pref.getString("valueWeight", "").toString())
        this.binding.editAge.setText(pref.getString("valueAge", "").toString())
        when (pref.getString("valueGender", "1").toString().toInt()) {
            1 -> this.binding.radioMan.isChecked = true
            2 -> this.binding.radioWoman.isChecked = true
        }
    }

    //--------------------------------------------------------------------------------

    //テーマを保存
    private fun saveTheme() {
        getSharedPreferences("settings", Context.MODE_PRIVATE).edit().apply {
            putString("valueTheme", this@MainActivity.configTheme.toString())
            apply()
            recreate()
        }
    }

    //テーマを読み出し
    private fun loadTheme() {
        val pref = getSharedPreferences("settings", Context.MODE_PRIVATE)
        this.configTheme = pref.getString("valueTheme", "0")?.toInt() ?: 0
        when (this.configTheme) {
            0 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
            1 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
        }
    }

    fun onClickButtonTheme(v: View) {
        val dialogMenu = arrayOf<String>("Light","Dark")
        val theme: Int = this.configTheme
        var selectedId: Int = theme
        AlertDialog.Builder(this).apply { // FragmentではActivityを取得して生成
            setTitle("テーマ変更")
            setSingleChoiceItems(dialogMenu, theme) { _, which ->
                selectedId = which
            }
            setPositiveButton("適用", DialogInterface.OnClickListener { _, _ ->
                when (selectedId) {
                    0 -> this@MainActivity.configTheme = 0
                    1 -> this@MainActivity.configTheme = 1
                }
                this@MainActivity.saveTheme()
            })
            setNegativeButton("キャンセル", null)
            show()
        }
    }

    //--------------------------------------------------------------------------------

}

app/src/main/java/jp/aosystem/basalmetabolism/TileDrawable.kt

package jp.aosystem.basalmetabolism

import android.graphics.Bitmap
import android.graphics.BitmapShader
import android.graphics.Canvas
import android.graphics.ColorFilter
import android.graphics.Paint
import android.graphics.PixelFormat
import android.graphics.Shader
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable

class TileDrawable(drawable: Drawable, tileMode: Shader.TileMode) : Drawable() {

    private val paint: Paint

    init {
        paint = Paint().apply {
            shader = BitmapShader(getBitmap(drawable), tileMode, tileMode)
        }
    }

    override fun draw(canvas: Canvas) {
        canvas.drawPaint(paint)
    }

    override fun setAlpha(alpha: Int) {
        paint.alpha = alpha
    }

    override fun getOpacity() = PixelFormat.TRANSLUCENT

    override fun setColorFilter(colorFilter: ColorFilter?) {
        paint.colorFilter = colorFilter
    }

    private fun getBitmap(drawable: Drawable): Bitmap {
        if (drawable is BitmapDrawable) {
            return drawable.bitmap
        }
        val bmp = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight,
                Bitmap.Config.ARGB_8888)
        val c = Canvas(bmp)
        drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
        drawable.draw(c)
        return bmp
    }

}

app/src/main/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">

    <ImageView
        android:id="@+id/imageBack"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:alpha="0.2" />

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="20dp"
                android:layout_marginLeft="20dp"
                android:layout_marginEnd="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginBottom="20dp"
                android:clickable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical">

                <ImageView
                    android:id="@+id/imageView4"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    app:srcCompat="@drawable/ic_leaf1"
                    tools:ignore="contentDescription" />

                <TextView
                    android:id="@+id/textTitle"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    android:gravity="center"
                    android:text="@string/textTitle"
                    android:textColor="#00f4d6"
                    android:textSize="20sp" />

                <TableLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginTop="30dp">

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textHeight"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="right"
                            android:text="@string/textHeight"
                            android:textColor="#00f4d6"
                            android:textSize="20sp" />

                        <EditText
                            android:id="@+id/editHeight"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:inputType="number"
                            android:textSize="26sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="5dp">

                        <TextView
                            android:id="@+id/textWeight"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="right"
                            android:text="@string/textWeight"
                            android:textColor="@color/teal_200"
                            android:textSize="20sp" />

                        <EditText
                            android:id="@+id/editWeight"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:inputType="number"
                            android:textSize="26sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="5dp">

                        <TextView
                            android:id="@+id/textAge"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="right|center_vertical"
                            android:text="@string/textAge"
                            android:textColor="#00f4d6"
                            android:textSize="20sp" />

                        <EditText
                            android:id="@+id/editAge"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:inputType="number"
                            android:textSize="26sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp">

                        <TextView
                            android:id="@+id/textGender"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="right"
                            android:text="@string/textGender"
                            android:textColor="#00f4d6"
                            android:textSize="20sp" />

                        <RadioGroup
                            android:id="@+id/radioGroup1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:ems="10"
                            android:orientation="horizontal"
                            android:textSize="20sp">

                            <RadioButton
                                android:id="@+id/radioMan"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginRight="8sp"
                                android:text="@string/radioMan"
                                android:textColorHighlight="#3949AB"
                                android:textColorLink="#039BE5"
                                android:textSize="20sp" />

                            <RadioButton
                                android:id="@+id/radioWoman"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text="@string/radioWoman"
                                android:textColorHighlight="#3949AB"
                                android:textColorLink="#039BE5"
                                android:textSize="20sp" />
                        </RadioGroup>
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="30dp">

                        <View
                            android:id="@+id/divider1"
                            android:layout_width="match_parent"
                            android:layout_height="1dp"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:background="#00f4d6" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="30dp">

                        <TextView
                            android:id="@+id/textDescriptionA1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:gravity="center"
                            android:text="ハリス・ベネディクト方程式(改良版)での指標"
                            android:textSize="14sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="15dp">

                        <TextView
                            android:id="@+id/textResultA1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA1"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultA1a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionA2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="基礎代謝とは、何もせずじっとしていても生命活動を維持するために必要なエネルギーのことで、一日当たりに必要なエネルギーを一般に基礎代謝量と言います。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp">

                        <TextView
                            android:id="@+id/textResultA2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA2"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultA2a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionA3"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="1日に必要なカロリーA\nデスクワーク中心など、活動レベルが低い場合。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp">

                        <TextView
                            android:id="@+id/textResultA3"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA3"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultA3a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionA4"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="1日に必要なカロリーB\nデスクワーク中心だが、通勤、買い物、家事、軽いスポーツなど、活動レベルが中程度の場合。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp">

                        <TextView
                            android:id="@+id/textResultA4"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA4"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultA4a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionA5"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="1日に必要なカロリーC\n立っていることが多く、または日常的にスポーツや活発な運動を行うなど、活動レベルが高い場合。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="20dp">

                        <TextView
                            android:id="@+id/textDescriptionA6"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="ハリス・ベネディクト方程式(改良版)を用いた計算結果(推定値)です。個人差が有りますのでひとつの目安としてお考え下さい。\n男性=66.4730+13.7516w+5.0033h-6.7550a\n女性=655.0955+9.5634w+1.8496h-4.6756a\nw(体重kg) h(身長cm) a(年齢)\n出典 https://ja.wikipedia.org/wiki/ハリス-ベネディクトの式"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="30dp">

                        <View
                            android:id="@+id/divider2"
                            android:layout_width="match_parent"
                            android:layout_height="1dp"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:background="#00f4d6" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="30dp">

                        <TextView
                            android:id="@+id/textDescriptionB1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:gravity="center"
                            android:text="国立健康・栄養研究所の式での指標"
                            android:textSize="14sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="15dp">

                        <TextView
                            android:id="@+id/textResultB1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA1"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultB1a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionB2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="基礎代謝とは、何もせずじっとしていても生命活動を維持するために必要なエネルギーのことで、一日当たりに必要なエネルギーを一般に基礎代謝量と言います。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp">

                        <TextView
                            android:id="@+id/textResultB2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA2"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultB2a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionB3"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="1日に必要なカロリーA\nデスクワーク中心など、活動レベルが低い場合。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp">

                        <TextView
                            android:id="@+id/textResultB3"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA3"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultB3a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionB4"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="1日に必要なカロリーB\nデスクワーク中心だが、通勤、買い物、家事、軽いスポーツなど、活動レベルが中程度の場合。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp">

                        <TextView
                            android:id="@+id/textResultB4"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center_vertical"
                            android:layout_marginRight="20dp"
                            android:gravity="center_vertical"
                            android:text="@string/textResultA4"
                            android:textSize="20sp" />

                        <TextView
                            android:id="@+id/textResultB4a"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textColor="?attr/colorPrimary"
                            android:textSize="20sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/textDescriptionB5"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="1日に必要なカロリーC\n立っていることが多く、または日常的にスポーツや活発な運動を行うなど、活動レベルが高い場合。"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="20dp">

                        <TextView
                            android:id="@+id/textDescriptionB6"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:text="国立健康・栄養研究所の式を用いた計算結果(推定値)です。個人差が有りますのでひとつの目安としてお考え下さい。\n((0.1238+(0.0481w)+(0.0234h)-(0.0138a)-g))*1000/4.186\ng(男性=0.5473*1,女性=0.5473*2)\nw(体重kg) h(身長cm) a(年齢)\n2000年以降に国立健康・栄養研究所で測定された日本人のデータに基づき、 国立健康・栄養研究所が新たに開発したものです。この推定式は、20-70歳代の日本人男女(男性71名、女性66名)を対象に、国立健康・栄養研究所で測定した基礎代謝量のデータから得られたものです。 得られた値はあくまで推定値で、真の値は、この推定値を中心に分布し、100kcal/日以上異なることもありえます。\n出典 https://www.nibiohn.go.jp/eiken/"
                            android:textSize="11sp" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="30dp">

                        <View
                            android:id="@+id/divider3"
                            android:layout_width="match_parent"
                            android:layout_height="1dp"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:background="#00f4d6" />
                    </TableRow>

                    <TableRow
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="30dp">

                        <Button
                            android:id="@+id/buttonTheme"
                            style="@style/Widget.MaterialComponents.Button.TextButton"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_span="2"
                            android:layout_weight="1"
                            android:minWidth="0dp"
                            android:onClick="onClickButtonTheme"
                            android:text="テーマ変更"
                            android:textColor="#00f4d6"
                            app:strokeColor="#00f4d6"
                            app:strokeWidth="1dp" />

                    </TableRow>

                </TableLayout>

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

            </LinearLayout>
        </ScrollView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ad_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"></LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>