20190413のKotlinに関する記事は2件です。

Textboxの入力制限について

Android開発をしている中で、テキストボックスに制限を追加したいことはありませんか?
今回は入力値を選択して、編集できないようにする制限です。
その中で試したことをメモとして残したいと思います。

実現したいこと

テキストボックスを押すと日付のカレンダーが出て、日にちを選択するとテキストボックスに表示されるようにしました。
それ自体はすぐにできましたが、入力して、日にちが変更できてしまうことがネックと言いますか、要件としてはダメだし、後の処理でエラーが発生する可能性大なので、編集できないようにしたいと思いました。

試したこと

①isEnableとisCursorVisibleの併用
調べてみるとisCursorVisibleをfalseに設定して、isEnableをtrueに設定すると、カーソルが合わないということがわかり、下記のソースを追加しました。

dateText.isCursorVisible = false
dateText.isEnabled = true

これだと確かにカーソルは合わないですが、キーボードが表示されていると入力できてしまいました。
なので、追加で、キーボードが非表示になる処理か、編集できないようにする必要があるようです。

②isFocusableの使用

さらに追加で調べてみるとisFocusableでフォーカスが当たらないようにできることがわかり、こちらに書き換えました

dateText.isFocusable= false

テキストボックスが押せるのか不安はありましたが、試してみると編集はできず、日時が選択できるようにできました。

少し時間はかかりましたが、試行錯誤することはやっぱり大切ですね。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

KotlinでUTC標準記述の文字列を、日本時刻に変換して文字列出力

KotlinでAndroidアプリを作っていて、WebのAPIで返ってきたUTC標準時刻で記載された文字列の日時を、日本時刻に変換して表示する方法。
文字列をDateに、Dateを文字列に、というあたりの情報は結構見つかったのですが、TimeZoneを変更して出力するというやり方は「これ」というのが見当たらず、いくつかのページを参考に試行錯誤したらできたんですが自分で忘れそうなので備忘録です。

やったこと

以下の手順で処理したらできました。

  1. UTCで書かれた文字列(私が扱っていた元データはISO8601形式だったので "yyyy-MM-dd'T'HH:m m:ssZ" でした(mmの間は本来くっついてます。markdownで勝手に変換されてしまうのを止める方法がわからなかった…orz))を、Dateに変換
  2. DateをCalendarに変換
  3. CalendarにTimezoneをセット
  4. DateFormatを指定して、文字列を出力

実際のソースコードはこちら

import android.text.format.DateFormat
import android.icu.text.SimpleDateFormat
import java.util.*

            val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
            val jpCal:Calendar = Calendar.getInstance()
            jpCal.time = df.parse(item.updateDateTime)
            jpCal.timeZone = TimeZone.getTimeZone("Asia/Tokyo")
            holder.mUpdateDTView.text = DateFormat.format("MM-dd HH:mm",jpCal)

item.updateDateTime内に、例えば 2019-04-12T01:00:00Z という文字列が設定されているとして、これでmUpdateDTView.textの中には 04-12 09:00 という文字列が出力されるようになりました。

多分ですが、"Asia/Tokyo" のところを、端末の標準設定とか持ってこれれば、APIから返ってきた時刻を、その端末の現地時間に合わせて表示できるんじゃないのかなと思います。(未検証ですが…)

若干冗長な気はしているので、もっと簡単にできるよ~という方法があったら是非教えて頂きたいです。m(__)m

参考にさせていただいたサイト

https://developer.android.com/reference/android/text/format/DateFormat.html
https://qiita.com/emboss369/items/5a3ddea301cbf79d971a
https://stackoverflow.com/questions/48838992/how-to-convert-date-string-to-timestamp-in-kotlin

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む