KITCHEN DRINKER

主にAndroid開発メモとか

2020年やってよかった健康・美容

一人暮らし・アラサー・お酒好き・エンジニアが2020年在宅ワークになって孤独と闘いながら体型維持するために支えられた健康・美容法です。


フォームローラー

Amazon | Fitvc 電動 フォームローラー ストレッチ用ポール 振動 マッサージポール ローラー 5段階振動調整 電動マッサージ ストレッチローラー ヨガポール 筋膜 日本語取扱説明書付き (オレンジ) | Fitvc | フォームローラー

Amazon PrimeBEAUTY THE BIBLEで石井美保さんが紹介されててポチった商品。
デンキバリブラシも欲しいけど19万…💸💸

これは前までは筋トレ前にほぐす目的で使う程度だったけど、今年になって毎日使うようになってから明らかにスキニーパンツが緩くなった。
ていうかその分むくんでいた・・・?🌚

ヨガマットを敷いても電動がそれなりに響くので夜に使うのは控えてるけど、電動モードにせず使っても丁度いい硬さ&サイズ感で気に入ってる。

主に脚周りとか身体の側面を自重でコロコロしてるだけだけど、痛気持ち良さがなんとも言えない。


筋トレ

以前は週1でパーソナルトレーニングに通ってたけど、今は週2で一人でジムに行ってる。家の近所にあるので在宅ワークになってから行きやすくなった◎
負荷は軽めで、主に脚裏、お尻、背中、時々腹筋と胸をフォーム重視で1hくらい。

レーニング前にフォームローラーとストレッチポールで身体をほぐすのと、トレーニング後は有酸素運動20分(トレッドミルで歩く)してる。


歩数

これは数年前から継続してることで1日1万歩以上は歩くようにしてる。
元々お散歩好きだし、何かしら理由作って外出したり多少の距離は電車使わず歩くかなーという感じ。

お耳のお供にはpodcastだったりvoicyだったり bilingualnews.jp

でも最近は無心で歩くのも思考が整理されてる感あって好き。


どうしても歩数足りないってときはジムのトレッドミルで歩きに行ったり、家でステッパー使ったり


朝に軽く身体を動かす

通勤がなくなったのもあって、朝軽く身体動かしたいな〜と

ストレッチ -> ラジオ体操 -> ニーアップサーキット

で15分くらい。

平日のルーティーン化したので、これが終わると身体が自然と仕事モードに切り替えられるようになった。

あとラジオ体操のジャンプのとこでその日の体調が測れる(二日酔いの日は笑えるほど飛べない)

業務開始時間が遅めなので朝食は食べず昼食兼。

因みに時々朝からコルセットを付けるのだけと、付けたままご飯食べるとすごい満腹感で中々お腹空かない。ていうか量食べれない
し、継続するとウエストも細くなる。でも数日つけないとすぐ戻る😇😇

いろんな意味で身体って凄い…


湯船に浸かる

酔っ払って入れないこともまぁまぁある😇 けど極力心がけてる。

最低でも20分以上は入るようにしてて、youtubeみながら足指のストレッチしてる。

マグネシウム意識してエプソムソルトはほぼ毎回入れてる。

因みにストレッチやダイエット面では森拓郎さん推し。


休肝日を設ける

在宅ワークになって、晩酌開始の時間が早まる〜終了の時間が遅まることで飲酒量が増えてしまい😇
色々と危機感を感じて夏頃から休肝日を設け出した。
最低でもトレ日は飲まないようにしてる。

(週7で晩酌してたのですごい変化だと思う。。褒めて欲しい)

休肝続けると翌朝の内臓のダメージ感・ダルさがないし、顔のむくみ具合が違う。


睡眠の質を高める

休肝日を設けだしたことにより、休肝した日は寝れない/(^o^)\という発見をした。

というかお酒の力で寝てた(気絶してた?)のかと思うと恐ろしい・・・

でも寝れた日と寝れない日でコンディションが違うことがわかったので、質の良い睡眠を模索して色々と試してみた。

iHerbでメラトニンを数種類試してみたけどあまり効果は感じず、

話題だったパブリック オーガニックのピローミストは気持ち改善したかな?

thepublic.tokyo

試行錯誤してるうちになんとなくリズムが掴めてきた気がするけど、これは引き続き課題💨

寝具をアップデートするか、あとはCBDが気になってるので取り入れてみようかなと思ってる。


ピラティス

正しい身体の使い方を身に付けたくて。ジャイロトニックもお試しで行って迷ったけど一旦プライベートのマシンピラティスセッションを始めることにした。

ピラティスってコアの筋肉を意識するのが難しいし、 筋トレと違って疲労感がそこまでなく達成感がない。

でも掴めたなーってときは歩いてるだけで感覚が違うのと、 普段の筋トレでも感覚が変わってきた気はしてる。

あと筋トレと違ってインターバルがないので、その分トレーナーさんとの雑談タイム(美容院とかのうわべの雑談苦手マン)がなくて好き笑

でも筋トレもそうだけどパーソナルトレーニングって、トレーナーさんの知力と経験量に左右されることが多いと思っていて、
良いトレーナーさんはお客さんが離れないので新規を受け付けてないから見つけるのが大変。

ということで良い方ご存知の方いたら是非紹介して欲しいです🙇‍♂️切実


内服薬

他に常用してるサプリもいくつかあるけどそれは別途。

今年になってお肌の為にビタミンC・ビタミンE・トラネキサム酸を採り入れ出した。

元々色は白い方だけどくすみの軽減を感じてる。


バレットジャーナル

在宅ワークになって1日1日が単調過ぎて恐ろしくなり、日々のログ代わりになんとなく始めてみたけど中々良い。

リズム掴むために一旦100均のものでお試し。セリアで売ってるやつが普通に可愛いかった。

www.amifa.co.jp

取り敢えず以下のものをやってるけど試行錯誤しつつ続けていきたいなー

  • weeklyログ:1日毎のタスクメモと振り返りと、週はじまりに今週やりたいことを軽く書いてる

  • monthlyログ:スキンケア用品とお肌状態の記録用に

  • 習慣トラッカー:継続したいこと(ストレッチ・歩数・禁酒とか)の項目を作って、毎日達成できたらチェックつけてる。チェックつけるの達成感ある

  • その他:調べ物をまとめたりとか1ヶ月の振り返りとか食事内容の振り返りとか気が向いたら日記とか


腸活

元々お通じは良い方で困ってないけど、ガスの匂いが気になるようになって色々と試行錯誤してみた。

タンパク質の撮り過ぎ?と思い減らしてみたけど効果なくて、

でもグルタミンとプロバイオティクス、プレバイオティクスを摂りだしてから軽減した感はあって、今はアイテム減らしたりして様子見中。

この辺は個人差があると思うので人体実験しかない笑

栄養素は極力食事から摂るようにしててサプリは補助的な位置付けにしてるけど、色々試してみたくなって増えちゃう一方なので必要最小限にしていきたい。

FODMAPとかも気になるし、栄養素ももっと勉強して詳しくなりたいな。。今年は腸内環境の検査もやりたいところ


食事

人一倍お酒飲むので、せめて…って意味で食べるものには人一倍気をつけるようにしてるし、食事は身体を作る上で一番大事なことだと思ってる。

在宅ワークになってからは毎食自炊で、自分で作れば余計な添加物は入れないしその時の気分で食べたいものが作れるし、食事面では嬉しい限り。何より作り立てのご飯は美味しい😋✨

1日の中で必ず摂るようにしてるのは、お魚(ときどきお肉)・緑の濃いもの(ほうれん草、ブロッコリーが好き🤗)・きのこ類・ゴマ・発酵食品・卵・フルーツ(冷凍ブルーベリーが多い)で、
タンパク質と良質な脂質と糖質の摂取を心掛けてる。

お菓子食べたいからご飯食べないとか、夕食がアルフォート&酒という生活を送っていた数年前からみるとすごい変化だと思う笑

普段口にしてるもので味覚って変わるし、余計なものを欲しなくなる。 私の場合はタンパク質量を意識し出したのと、その他足りない栄養素をサプリで補う生活を始めてからだと思う。

ただ糖質があまり摂れてないのでこれは今年の課題🔥

代謝力上げたい🔥🔥


シンプルスキンケア

今年はおこもり美容が流行ってたのもあって色々と気になるものがあった。

し、実際にエンビロンとか主にビタミンA系で試してみたものもあるけど、長くなりそうなのではしょります🙈

いくつか美容皮膚科にカウンセリングにも行ったけど、多くの先生が口を揃えて「擦らない&シンプルケアが一番!」と仰っていたので、
+で何かを入れるのではなく、とにかく肌負担にならないようなシンプルケアを心がけてみた。


具体的には化粧をやめて(するとしても石鹸落ちコスメで軽く程度)、基本日焼け止めとワセリンのみで過ごして、

マツエク卒業して、まつ育&まつ毛パーマにしたり、
ちなみにまつげ美容液は今までいくつか試したけどラッシュアディクトのがダントツに伸びた。色素沈着しないってクチコミが多いけど、私の場合は赤くなるし痒くなるので使用頻度は抑えめ。

化粧水やほぼ毎日してたフェエイスパックを辞めて、保湿重視にしてみたり、

あとはいかに肌負担のない洗顔をするかとか、

とにかく擦らないようにとか。。。

やってみて何かが劇的に変わった…!ってことはないけど、化粧品類にかけるお金は少なくなったし(コスメめっちゃ捨てた😂)、きっと長い目でみたら良いことだと信じてる🙏

これも人体実験で継続しないとわからないと思ってるので、引き続きシンプルスキンケア+その日の肌状態にあった アイテムを時々入れて様子みてこうと思う。




まとめ

超超超超三日坊主な私が日常的に何かを続けられるようになったり、休肝日を作り出したり驚きの年だった。

他にも書き足りないことあるし、美容医療も色々トライアンドエラーしてるのでそれはまた気が向いたら👋

2020年買ってよかったもの

暇なので、お酒片手に。
お題「#買って良かった2020



電動式スタンディングデスク

flexispot.jp

多分今年買ってよかったものNo.1

在宅勤務になって腰に限界を感じていたためFlexiSpotのを買った。
周りでもこれの購入率が番高い気がしてる。

椅子は良いやつ使ってないけど、立つ立たないに関わらず腕の位置が調整できるだけで大分楽になった。

あと、スタンディングで晩酌すると寝落ちするのを避けられるという発見。
(去年腕に体重をかけた状態で寝落ちした結果、右腕が1週間程動かなくなる経験をした。お箸を持つはおろかタイピングも出来なかった…)

組み立ては女性の力では難しそうなのと、そもそも組み立てる系のことが苦手なのもあり父を召喚した🙏(不要不急の状況下で来てくれてとても感謝…ミスチを送った)



シルク枕カバー

item.rakuten.co.jp

髪のために今まではシルクのナイトキャップを使ってたのだけど、どうも朝には外れてる(外してる?)ことが多かったので、 いっそのこと枕をシルクにしてみた。
枕は顔も触れることがあるのでお肌のためにも良いかなと

シルクはお高いけど、こちらの商品は片面のみなのでお安い。

ちなみにマスクもシルクのものを買いました。



ステッパー

Amazon | 東急スポーツオアシス ツイスト ステッパー Premium プレミアム イエロー | 東急スポーツオアシス | ステッパー

1日一万歩以上歩くというノルマを課してるけど、在宅ワークになり歩数を稼ぐことが難しくなったのでその対策として。

といってもお散歩好きなので使用頻度は少なめ。

(別の普通のステッパーを買ってスタンディングデスクの足元に置いて作業することも試みたけど、私の場合全然作業に集中できなかった😇)



Xiaomi Mi Smart Band

Amazon.co.jp: 【日本正規代理店品】Xiaomi Mi Smart Band 4 スマートバンド 活動量計: 家電・カメラ

Fitbitが1年弱で壊れてしまったので安価なやつを買ってみた。バッテリーが長時間続くし、スマホの通知と連動してくれて良い。

でも歩数や睡眠の計測面ではやはりFitbitより性能が劣ると思う。



マグネット式電源タップ

Amazon | エレコム 電源タップ 3ピン マグネット付 4個口 2.5m ホワイト T-T1B-3425WH | エレコム | パソコン・周辺機器 通販

台所周りの配線が微妙なので、冷蔵庫の横に張っつけてみた。
地味に便利。



珪藻土 バスマット

Amazon|KMJ 珪藻土 バスマット お風呂マット 足ふきマット 速乾 快適 調湿 消臭 防カビ 抗菌 清潔 洗濯不要 風呂マット 浴室 洗面所 脱衣所 滑り止め付き 一年保証 大理石柄 40cmx30cm|浴室足ふきマット - ホーム&キッチン オンライン通販

今までは普通のバスマットを使ってたけど、珪藻土のタイプを買ってみた。
汚れも気にならないし洗濯から解放されて良き良き。



ジム用シューズ

Amazon | [SAGUARO] ベアフット ランニングシューズ ポータブル フィットネスシューズ 柔軟 超軽量 通気性 | SAGUARO | フィットネス

着脱が楽。



デスクヒーター

Amazon | Miriyon 遠赤外線デスクヒーター 省エネパネルヒーター 3時間タイマー付 冷え対策 踏み型 踏み心地良い | Miriyon | パネルヒーター 通販

末端冷え性で特に冬場は脚が痛くなるくらいに冷えてしまうので
電気ストーブもあるけど変に部分的に当たって火傷っぽくなってしまったり、暖房は空気悪くなるし乾燥が気になって苦手なのでこちらを買ってみた。
足元あったかいだけで大分違う。

ホントは床暖が欲しいところだけど、、、



紫外線対策シート

【楽天市場】マジックミラー フィルム ガラスフィルム 外から見えない 窓 目隠しシート 断熱 遮光 遮熱 飛散防止 はがせる 紫外線カット 窓 目隠しフィルム 省エネ 装飾フィルム 曇りガラス 西日対策 結露防止 透明 UVカット フィルム シート ウインドウフィルム 日よけ【takumu】:HOMMALAB楽天市場店

お家作業が増えて机が窓際にあるので、カーテンでは紫外線が防ぎ切れてない気がして買ってみた。
光の入り具合大分違う。



百均商品

おうち環境を整えるために色々買ったけど、代表して一番買ってよかったなと思ってるのはこれ

f:id:nyanyonin:20201231150656p:plain:w300

ダイソーの袋止めクリップ
この種のはいくつか持ってるけど、これは裏が磁石になってて冷蔵庫に貼っつけれるのが地味に便利。



大豆ミート

www.qoo10.jp

大豆ミートは今年になってタンパク質源として食事の中に取り入れ出した。ミンチタイプのものをひき肉代わりに使ってる。
乾燥タイプだけど戻すのは特に面倒に感じない。

毎日食事記録をつけてるのでカロリー計算が楽で助かってる。
30g辺り、kcal:94.2, P:15.3, C:10.53, F:0.06



冷凍焼き芋

item.rakuten.co.jp

糖質をさつまいもから摂取することが多くて、今までは八百屋で買ってたけど
ふるさと納税で試しに買ってみたら美味しくて。

温めて食べても美味しいけど、半解凍でスイーツ感覚で食べるのがお気に入り🤤
焼き芋は冷凍することで栄養価も上がるし罪悪感がなくて◎

来年は他の種も試してみたいな





おわりに

地味なのもあったけど、こんな感じかな。 思い出したらまた書きます。

次は2020年のやってよかった健康・美容編!…を書くかもしれない

Amazon Cognito で Sign in with Apple 対応

AndroidにてAmazon Cognito で User Pool を使って Sign in with Apple 対応した際に、情報少なくて困ったので誰かの助けになればとメモ。

AmazonAmplifyというLibraryを用意してくれてるのですが、認証機能以外にも色々モリモリ詰まったものなので

本当は少し古いけどよりシンプルなこちらを使いたかったのですが、 Sign In with Apple には対応してない?ようで、大人しくAmplify を使うことにしました。(結果アプリサイズが4M増えました…ツライ)

通常ならこれ通り進めていけば大丈夫です。 docs.amplify.aws

build.gradle

classpath 'com.amplifyframework:amplify-tools-gradle-plugin:1.0.1'

※ 公式には apply plugin: 'com.amplifyframework.amplifytools' も追加するように書いてありますが、追加せずとも動作しました。

app/build.gradle

implementation 'com.amplifyframework:core:1.0.0'
implementation 'com.amplifyframework:aws-auth-cognito:1.0.0'

他、gradleのversionを4.0.0にしました。

必要なファイルは2つ。 本番用と開発用と環境を分けている場合には各環境毎に用意する必要があります。

  • app/src/res/raw/awsconfiguration.json
  • app/src/res/raw/amplifyconfiguration.json

上記のファイルはamplifyコマンドを実行することで自動で作られるのですが、そのためにはAWSへIAMユーザ登録が必要になります。 このために登録したくなかったので、手動で作りました。

awsconfiguration.json

{
  "UserAgent": "aws-amplify/cli",
  "Version": "0.1.0",
  "IdentityManager": {
    "Default": {}
  },
  "CredentialsProvider": {
    "CognitoIdentity": {
      "Default": {
        "PoolId": "xxxxxx",
        "Region": "ap-northeast-1"
      }
    }
  },
  "CognitoUserPool": {
    "Default": {
      "PoolId": "xxxxxx",
      "AppClientId": "xxxxxx",
      "AppClientSecret": "",
      "Region": "ap-northeast-1"
    }
  },
  "Auth": {
    "Default": {
      "OAuth": {
        "WebDomain": "cognito-auth.xxxxxx,
        "AppClientId": "xxxxxx",
        "SignInRedirectURI": "xxxxxx://",
        "SignOutRedirectURI": "xxxxxx://",
        "Scopes": ["openid"],
        "responseType": "code"
      }
    }
  }
} 

amplifyconfiguration.json

{
  "UserAgent": "aws-amplify-cli/2.0",
  "Version": "1.0",
  "auth": {
    "plugins": {
      "awsCognitoAuthPlugin": {
        "CredentialsProvider": {
          "CognitoIdentity": {
            "Default": {
              "PoolId": "xxxxxx,
              "Region": "ap-northeast-1"
            }
          }
        },
        "CognitoUserPool": {
          "Default": {
            "PoolId": "xxxxxx",
            "AppClientId": "xxxxxx",
            "AppClientSecret": "",
            "Region": "ap-northeast-1"
          }
        },
        "Auth": {
          "Default": {
            "OAuth": {
              "WebDomain": "cognito-auth. xxxxxx",
              "AppClientId": "xxxxxx",
              "SignInRedirectURI": "xxxxxx://",
              "SignOutRedirectURI": "xxxxxx://",
              "Scopes": ["openid"],
              "responseType": "code"
            }
          }
        }
      }
    }
  }
} 

AndroidManifestは以下のようにしておきます。

schemejsonファイル内で指定した SignInRedirectURI と同じにします。

AndroidManifest.xml

<application>
   <activity
        android:name=".MainActivity"
        android:launchMode="singleInstance">
        <intent-filter>
           <action android:name="android.intent.action.VIEW" />
           <category android:name="android.intent.category.DEFAULT" />
           <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="xxxxxx" />
        </intent-filter>
   </activity>
・・・
</application>

MainActivty.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Amplify初期化
     try {
          Amplify.addPlugin(AWSCognitoAuthPlugin())
          Amplify.configure(applicationContext)
        } catch (error: AmplifyException) {
          Timber.e("Could not initialize Amplify $error")
        }
・・・
}

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
     if (intent.data != null && "xxxxxx" == intent.data!!.scheme) {
        Amplify.Auth.handleWebUISignInResponse(intent)
      }
}

// Sign in with web UIの呼び出し
private fun loginApple() {
    Amplify.Auth.signInWithWebUI(
        this,
        { result: AuthSignInResult -> {
              val provider = result.nextStep.additionalInfo?.get("provider")
              val token = result.nextStep.additionalInfo?.get("token")
    // 必要なログイン処理
    ・・・
            }
        },
        { error: AuthException -> Timber.e("AuthException $error") }
      )
}

Sign in with web UI用の呼び出し↓後、appleログイン処理に成功したらMainActivityがsingleInstanceで起動されます。

f:id:nyanyonin:20200703122909p:plain:w250

参考文献

https://aws.amazon.com/jp/blogs/aws/new-aws-amplify-libraries-for-android-and-ios/

何か間違っていること等ありましたら遠慮なくご指摘お願いします。

BottomSheet内のitemをscroll時にAppBarをscrollさせたくない

CoordinatorLayout + AppBarLayout + BottomSheet の組み合わせでレイアウトを組んだ際、BottomSheet内でscrollした際、AppBarLayoutの方もscrollしてしまい困ってた。

f:id:nyanyonin:20200330185537p:plain:w200
通常時
f:id:nyanyonin:20200330185533p:plain:w200
scroll時

AppBarLayoutにcustom Behavior を設定することで解決。

class BottomSheetAppBarBehavior @JvmOverloads constructor(
  context: Context?,
  attrs: AttributeSet? = null
) : AppBarLayout.Behavior(context, attrs) {
  private var mIsSheetTouched = false

  override fun onStartNestedScroll(
    parent: CoordinatorLayout,
    child: AppBarLayout,
    directTargetChild: View,
    target: View,
    nestedScrollAxes: Int,
    type: Int
  ): Boolean {
    mIsSheetTouched = target.getId() == R.id.variation_list // 優先したいBottomSheet内のscroll content id
    return (!mIsSheetTouched && super.onStartNestedScroll(
      parent, child, directTargetChild,
      target, nestedScrollAxes, type
    ))
  }

  override fun onInterceptTouchEvent(
    parent: CoordinatorLayout,
    child: AppBarLayout,
    ev: MotionEvent
  ): Boolean {
    if (ev.actionMasked == MotionEvent.ACTION_CANCEL) {
      mIsSheetTouched = false
    }
    return !mIsSheetTouched && super.onInterceptTouchEvent(parent, child, ev)
  }
}

これをAppBarLayoutに設定してあげる app:layout_behavior="jp.co.xxx.BottomSheetAppBarBehavior"

roomをmigrationする

roomのtable定義の追加が必要になり、初migrationしたのでメモ。

こちらを参考にしつつ進めました。

medium.com


1. データベースclassのversionを更新

@Database(entities = [LoginInfo::class], version = 1)

  ↓

@Database(entities = [LoginInfo::class, UserInfo::class], version = 2)


2. migration部分のSQLを追加

/**
 * Migrate from:
 * version 1 - create table for login info
 * to
 * version 2 - create table for user info
 */
internal val MIGRATION_1_2: Migration = object : Migration(1, 2) {
  override fun migrate(database: SupportSQLiteDatabase) {
    database.execSQL(
      """
      CREATE TABLE IF NOT EXISTS user_info (
        id INTEGER NOT NULL, 
        name TEXT NOT NULL, 
  // ・・・(略)
      )
      """
    )
  }


3. DB作成時にmigrationの指定を追加

Room.databaseBuilder(context, AppDatabase::class.java, "test-db")
      .build()

   ↓

Room.databaseBuilder(context, AppDatabase::class.java, "test-db")
      .addMigrations(MIGRATION_1_2)
      .build()

※MIGRATION_2_3が必要になった場合は.addMigrations(MIGRATION_1_2, MIGRATION_2_3)の様に追記していく。


4. buildすると 2.json が自動生成される


以上!

何か間違い等あればご指摘お願いしますmm



その他メモ
  • 最初手順 1. のversion指定せずにbuildしてしまったら、1.json の方が更新されて2.jsonが生成されずハマりました。

  • MIGRATION_2_3 をしたいときはMIGRATION_1_3 は不要

  • migration怖いですよね。。



次はroom migration の test について書きます。

Android Studioでbuildが通らなくなったときに試すこと

Android Studioが最近やたらご機嫌ナナメになる😇

扱い雑なのかな

そんなときに試していくことメモ

  1. build -> Clean project
  2. ローカルのbuild cache削除 ./gradlew clean cleanBuildCache
  3. File -> Invalided Caches / Restart
  4. ~/.gradle/caches/を削除
  5. プロジェクトを右クリックでRemove(ASのversionによっては×がある) → Open

f:id:nyanyonin:20180724112739p:plain:w300

最近はこれらのどれかで大抵解決する。 変なキャッシュが残っちゃってるということ?

それでも駄目ならプロジェクトcloneしなおしたり、Android Studio再インストールしたり、違うversionのAndroid Studio使ってみたりですかね(; ^ω^)ツライ

CustomViewの罠

Custom TextViewにおいて、API 15 で Crash が発生していたので、その対応

Fatal Exception: java.lang.NoSuchMethodError: android.widget.TextView.getMaxLines
       at jp.co.matchingagent.cocotsure.ui.custom.ExpandableTextView.a(ExpandableTextView.kt:54)
       at jp.co.matchingagent.cocotsure.ui.custom.ExpandableTextView.a(ExpandableTextView.kt:14)
       at jp.co.matchingagent.cocotsure.ui.custom.ExpandableTextView$1.onClick(ExpandableTextView.kt:47)
       at android.view.View.performClick(View.java:3514)
       at android.view.View$PerformClick.run(View.java:14111)
       at android.os.Handler.handleCallback(Handler.java:605)
       at android.os.Handler.dispatchMessage(Handler.java:92)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:4457)

原因

getMaxLine()で Crashが発生していた。→ TextViewgetMaxLine()API 16以上

https://developer.android.com/reference/android/widget/TextView.html#getMaxLines()

AppCompatActivityの配下であればTextView -> AppCompatTextViewの自動変換がされるが、カスタムView内のレイアウトでは、TextView -> AppCompatTextView への自動変換は行われない

対応

TextViewAppCompatTextView に置き換え