質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

1171閲覧

EditTextにフォーカスを当てキーボードを立ち上げた状態で、DatePickerを開くと後ろでキーボドが上がったままになってしまう

watashichanchan

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2023/03/08 01:03

編集2023/03/08 05:40

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 他のEditTextのキーボドが立ち上がったまま、DatePickerを立ち上げるとキーボードがさがらないです。同じ動作をNumberPickerで行うとキーボードは下がるので、その違いが知りたいです。

前提

ユーザーの入力画面で、
EditTextに
・DatePicker
・EditText
・NumberPicker
の順で並べています。

EditTextから入力するとキーボードが立ち上がり、
その後DatePickerをタップするとDatePickerが立ち上がりますが、
最初に開いたキーボードが立ち上がったままになってしまいます。

同じように、EditTextから入力しキーボードが立ち上がった状態で
NumberPickerを開くとキーボードは下がります。

一応解決策として、
DatePickerをクリック時にキーボードを非表示にする処理を書くとキーボードは消えるのですが、何故NumberPickerの時はキーボードが勝手に下がり、DatePickerだと下がらないのか気になってしまい、調べてもわからなかったので質問いたしました。

該当のソースコード

DatePicerもNumberPickerも、ともに DialogFragment()を継承しています。
・DatePicker

Kotlin

1class DatePickerDialogFragment(private val editText: EditText) : DialogFragment(), DatePickerDialog.OnDateSetListener { 2 3 var setYear = 0 4 var setMonth = 0 5 var setDay = 0 6 7 8 9 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 10 val calendar = Calendar.getInstance() 11 val year = calendar.get(Calendar.YEAR) 12 val month = calendar.get(Calendar.MONTH) 13 val day = calendar.get(Calendar.DAY_OF_MONTH) 14 15 16 return DatePickerDialog( 17 requireContext(), 18 R.style.DatePicker, 19 this, 20 year, 21 month, 22 day, 23 ) 24 } 25 26 override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) { 27 28 val setLocalDate = LocalDate.of(year,month+1,dayOfMonth) 29 val format = DateTimeFormatter.ofPattern("yyyy年M月d日(E)") 30 val date =setLocalDate.format(format) 31 32 setYear = year 33 setMonth = month 34 setDay = dayOfMonth 35 editText.setText(date) 36 37 } 38}

・NumberPicker

Kotlin

1lass NumberPickerDialogFragment:DialogFragment(){ 2 3 private lateinit var dialogView: View 4 5 private lateinit var listener: NoticeDialogListener 6 private var selectedYearItem by Delegates.notNull<Int>() 7 private var selectedMonthItem by Delegates.notNull<Int>() 8 9 interface NoticeDialogListener { 10 fun onNumberPickerDialogPositiveClick(dialog: DialogFragment, selectedYearItem: Int, selectedMonthItem:Int) 11 fun onNumberPickerDialogNegativeClick(dialog: DialogFragment) 12 } 13 14 15 override fun onAttach(context: Context) { 16 super.onAttach(context) 17 try{ 18 val fragment = parentFragment 19 this.listener = fragment as NoticeDialogListener 20 }catch (e: ClassCastException){ 21 throw ClassCastException("$context must implement NoticeDialogListener") 22 } 23 } 24 25 26 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 27 val inflater = requireActivity().layoutInflater 28 dialogView = inflater.inflate(R.layout.dialog_numberpicker,null) 29 val builder = AlertDialog.Builder(requireContext(),R.style.NumberPickerDialog) 30 31 builder.setView(dialogView) 32 builder.setTitle(R.string.month) 33 builder.setMessage(R.string.month_explanation) 34 builder.setIcon(R.drawable.ic_baseline_fact_check_24) 35 36 builder.setPositiveButton(R.string.ok){_,_ -> this.listener.onNumberPickerDialogPositiveClick(this,this.selectedYearItem,selectedMonthItem)} 37 builder.setNegativeButton(R.string.cancel){_,_ -> this.listener.onNumberPickerDialogNegativeClick(this) } 38 39 val current = LocalDateTime.now() 40 41 42 val yearNumberPicker = dialogView.findViewById<NumberPicker>(R.id.yearNumberPicker) 43 yearNumberPicker.setOnValueChangedListener(object :NumberPicker.OnValueChangeListener{ 44 override fun onValueChange(picker: NumberPicker?, old: Int, new: Int) { 45 selectedYearItem = new 46 } 47 }) 48 yearNumberPicker.minValue = current.year-1 49 yearNumberPicker.maxValue = current.year+30 50 yearNumberPicker.value = current.year 51 selectedYearItem = yearNumberPicker.value 52 53 54 val monthNumberPicker = dialogView.findViewById<NumberPicker>(R.id.monthNumberPicker) 55 monthNumberPicker.setOnValueChangedListener(object :NumberPicker.OnValueChangeListener{ 56 override fun onValueChange(picker: NumberPicker?, old: Int, new: Int) { 57 selectedMonthItem = new 58 } 59 }) 60 monthNumberPicker.minValue = 1 61 monthNumberPicker.maxValue = 12 62 monthNumberPicker.value = current.monthValue 63 selectedMonthItem = monthNumberPicker.value 64 65 return builder.create() 66 } 67 68}

・入力画面のxml該当箇所

xml

1 <EditText 2 android:id="@+id/date_edit_text" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 app:layout_constraintTop_toTopOf="@+id/date_input_layout" 6 app:layout_constraintBottom_toBottomOf="@+id/date_input_layout" 7 app:layout_constraintEnd_toEndOf="parent" 8 android:layout_marginEnd="16dp" 9 android:textColor="@color/black" 10 android:textSize="18sp" 11 android:text="@={viewModel.dateEdit}" 12 android:focusable="false" 13 app:theme="@style/EditTextStyle"/> 14 15 <EditText 16 android:id="@+id/month_edit_text" 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:layout_marginEnd="5dp" 20 android:textColor="@color/black" 21 android:textSize="18sp" 22 android:text="@={viewModel.monthKbnEdit}" 23 app:layout_constraintBottom_toBottomOf="@+id/month_input_layout" 24 app:layout_constraintEnd_toStartOf="@+id/kbn_text" 25 app:layout_constraintTop_toTopOf="@+id/month_input_layout" 26 app:theme="@style/EditTextStyle"/> 27 28 <EditText 29 android:id="@+id/edit_text" 30 android:layout_width="100dp" 31 android:layout_height="wrap_content" 32 app:layout_constraintBottom_toBottomOf="@+id/times_input_layout" 33 app:layout_constraintEnd_toStartOf="@+id/times_text" 34 app:layout_constraintTop_toTopOf="@+id/times_input_layout" 35 android:layout_marginEnd="5dp" 36 android:hint="0" 37 android:gravity="end" 38 android:inputType="number" 39 android:textColor="@color/black" 40 android:textSize="18sp" 41 android:maxLength="4" 42 android:text="@={viewModel.timesEdit}" 43 app:theme="@style/EditTextStyle"/>

・入力画面のDatePicker,
NumberPickerの呼び出し部分

kotlin

1binding.dateEditText.setOnClickListener { 2 3 val datePickerFragment = DatePickerDialogFragment(binding.dateEditText) 4 val fragmentManager = childFragmentManager 5 datePickerFragment.show(fragmentManager,"datePicker") 6 } 7 8binding.monthEditText.setOnClickListener { 9 val numberPicker = NumberPickerDialogFragment() 10 val fragmentManager = childFragmentManager 11 numberPicker.show(fragmentManager,"NumberPickerDialog") 12 }

試したこと

・android:focusable="false"にしましたが効かないです
・requestFocus()で別の場所にフォーカスを当てても変わらないです
・DatePickerタップ時にキーボードを隠す処理で、やりたいことの解決は一応しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/03/08 04:15

動かせられる(説明されている状態を再現できる)一連のコード類をご提示頂けますか。
watashichanchan

2023/03/08 04:31

コメントありがとうございます。 該当箇所のコードを追記いたしました よろしくお願いいたします
watashichanchan

2023/03/08 04:37

質問を読み直してみて、わかりづらく感じたので、 念のため質問したいことは 1.入力画面にDatePicker,NumberPickerではないEditTextを配置 2.DatePicker,NumberPickerのフォーカスはfalseにしておく 3.EditTextをタップし、キーボードが立ち上がった状態でNumbaerPickerをタップするとキーボードは下がる 4.3と同じことをDatePickerで行うとDatePickerはたちあがるものの後ろのキーボードが上がったままの状態になる この流れでNumberPickerの際はキーボードが下がるにもかかわらず、DatePickerでは立ち上がったままになる理由が知りたいです。
jimbe

2023/03/08 05:31

編集ありがとうございます。 それで、フラグメント・~該当箇所・~呼び出し部分等をどう組み合わせておられるのでしょうか。 現象の原因が分からないということは、お手元にあるコードのどこが問題か分からないものと思います。 どこに問題があるか分からない状態では、ボイラーコードと思われる部分にも何かあるかもしれませんので、省略はされないほうが良いと考えますが、如何でしょうか。 また、コメントによる補足よりは、可能でしたら質問本文の追加編集をされたほうが、初めて質問を参照される方により分かり易くなると思います。
watashichanchan

2023/03/08 05:47

ご丁寧なアドバイスありがとうございます。 editetextの一部追記しました。 一応関係しているところはここまでなのですが、他もということであれば一旦諦めようと思います... デバックしてみた結果、NumberPickerもonCreateDialog()の前まではキーボードが上がったままでしたので、 onCreateDialog()のどこかでキーボドを下げるようなことになっているのかな..と思い始めました。
guest

回答1

0

試せていませんが、 NumberPicker (の一部)にフォーカスが移るためと思います。

DatePicker にはキー入力出来る所はありませんのでフォーカスが移らず元の EditText のままの為キーボードはそのままで、 NumberPicker は中央の値の部分がキー入力出来るためにそちらにフォーカスが移り、 EditText からフォーカスが外れてキーボードが消えたのではないでしょうか。

投稿2023/03/08 07:51

jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

watashichanchan

2023/03/08 08:06

回答ありがとうございます。 NumberPicker の中央値部分に android:focusable="false" android:focusableInTouchMode="false" android:descendantFocusability="blocksDescendants" でキーボードを出さない、フォーカスを当てないようにしてみましたが それでもNumberPicker を立ち上げるとキーボードが下がってしまいます...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問