Android 6.0 (Marshmallow), カーソルが出なくてよく、単にキーボード表示を抑止したいだけなら、下記のように簡単に抑止できます。, ちなみに、Android 2.x の時代は、この辺のやり方でカーソルも表示されていたみたいです。 Android(アンドロイド)スマホの日本語入力キーボードはAndroid(アンドロイド)OSの開発元Googleから提供されている以外に実にいろいろなキーボードがあります。本稿では、それらの切替方法と戻せないときの対処法を説明しています。 どうも XMLで指定する android:inputType="none" は、setInputType(InputType.TYPE_NULL)と等価ではないみたいですね。, というか、android:inputType="none"を指定して getInputTypeの値をデバッグで追っていったら、何も指定しなかった時と同じ、すなわちandroid:inputType="textMultiLine"のときと同じ値がセットされていたですよ(Hex:0x20001 or Decimal: 131073 InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE)。, これは仕様なのかバグなのか、、、。なんともすっきりしない話です。 Why not register and get more from Qiita? 実際問題、私が採用しているのは「方法その2」なわけですし、当面の間はその辺りで使い分けていくしかなさそうですね。, 今回の目的とは直接的には関係ないのですが、いろいろと試していく中で気がついたことというか、気になったこと。 EditText内のクリックではアクションメニューが表示されなくなるのですが、カーソルの丸部分(Text Selection Handle と呼ぶらしい)をクリックするとやっぱりメニューが表示されてしまいます。, それならば、と、Text Selection Handle を非表示にしてやるとどうなるか、と試してみましたが、、、。, 見た目的には丸いハンドルは見えなくなりましたが、ハンドルがあると思わしき部分をクリックすると、やはりペーストメニューが出てきてしまいました。, stackOverflow にもこの回答があったのですが、残念ながらcanPasteはプライベートメソッド。サブクラスで再定義してもオーバーライドは出来ないというのが結論のようです(stackOverflowでのやり取りを見ると、何故か、4.4ではオーバーライドできていたらしいですが、少なくとも5.1以降ではできなくなっているみたいです), 諦めました(笑)! ソフトキーボードを非表示にして、アプリ画面でボタンを用意、ボタンからの入力しか受け付けないような画面(具体的には電卓アプリのような画面)を考えています。 けれども「方法その2」では(タップでの)カーソル移動もできなくなってしまうので、「方法その1」を採用した上で、コピペだけを抑止したい。, ということで、散々調べたのですが、完全解決には至らず。 RelativeLayoutで下部にボタンを配置したレイアウトでソフトキーボード表示をすると左画のように下部のボタンがソフトキーボードの上にきてしまいます。なぜ?, こちらの意図するところではないのでソフトキーボードの裏というかレイアウトは元通り右画のように固定してて欲しい!, 下部にボタンを配置して設定部分の上部は表示が入りきれなかった場合に備えてスクロールビューとしました。, どうやらこのケースでは適用したスクロールビューが悪さをしているみたいです。スクロールビューを外して実験したら押し上がらなかったので犯人確定ですね。, isScrollContainerはソフトキーボードが表示されたときスペースを空けるためにViewをリサイズするかどうかの設定のようです。デフォルトがtrueのようでリサイズされていたってことですね。, スクロールビューではなくListViewを使用している場合でも同様の現象が起きます。, これもレイアウトXMLのListViewタグ内に android:isScrollContainer="false" を入れると解決できました。, 最初、検索で見つかるadjustPanやfitsSystemWindowsやらを参考にさせて頂いたのですが適用しても全くダメで随分さまよいました(^^;, 画面遷移した際に自動でソフトキーボードが表示されないようにjavaのコードに下記を入れるというのがあります。, ひょっとしたらこれに何かないかなぁと探していたらそれっぽいワードがあったので調べもせず適用してみました。, FLAG_KEEP_SCREEN_ONは画面の自動消灯をさせないようにする設定みたいですがこれで何故動作が変わる??はい。よく分かりません(笑), ソフトキーボードが表示されている間は画面の自動消灯が行われないことになるので入力中の寝落ちは無い(…ではよいのか?)。, なら勘でやるなって(^^; こんなバカなこともやってみた記録として残しておきます。. ですが、ここまでは調べました、という履歴のために、無駄かもしれませんが記録を残しておきます。, この辺りを参考にしましたが、結局解決策には至っていない模様。各回答のコメントまで追っていくと、「not working」の英語がいたるところに出てきています(^^;), Actionメニューを自前で編集するためのCallBackクラスをセットして、そこでアクションメニューを無効にしてしまう方法。, これで、コピー&ペーストのメニューを出さなくすることはできるのですが、「if (android.os.Build.VERSION.SDK_INT >= 23)」とあります通り、「setCustomInsertionActionModeCallback」は、Android6.0以降でないと使えないんですよね。, でもって、この部分がなくて「setCustomSelectionActionModeCallback」だけだとどうなるか? その時のままだったなら、こんなに苦労しなくても済んだのに。。。, 今となってはAPI10以下をサポートすることもないだろうし、if (Build.VERSION.SDK_INT >= 11)はなくてもいいかな? By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. android キーボード表示 レイアウト (2) 私はlistviewと下に送信メッセージでアクティビティを作成しようとしています。 問題は、キーボードが表示されているときに、下部のコンテンツを押すのではなく、単に隠していることです。 素直に「TextViewを弄ればいいじゃん」という話でもあるのですが、せっかく、EditTextのフォーカス状態や編集状態が一目瞭然なUIがあるのに、それを一から自前で実装するというのも勿体無い。, そう、ここで大事なのは、キーボードは非表示にしつつ「カーソルは表示させたままにしたい」ということ。 Android 5.1(Lollipop) Androidアプリ開発で困ったところをメモ。 RelativeLayoutで下部にボタンを配置したレイアウトでソフトキーボード表示をすると左画のように下部のボタンがソフトキーボードの上にきてしまいます。なぜ? こちらの意図するところではな… 単にキーボードを非表示にするだけならば簡単なのだけれども、これがまた一筋縄ではいかない話でした。 確認環境. (キーボードを出す処理が動くのは、onFocusChangeイベントよりも後みたいです), 「方法その1」の場合は、カーソル移動もできるし、コピペも出来るし、範囲選択もできます。, が、わざわざキーボードからの入力を抑止して独自の入力方法を用意するということは、コピペで予期せぬ内容を入力されるのも避けたいというケースは少なくないはずです。 EditTextで、特定の内容しか入力を受け付けたくないようなケース。 What is going on with this article? Compile SDK API レベル: 24 シミュレータ: Android 5.1(Lollipop) Android 6.0 (Marshmallow) カーソルが出なくてもいいなら "http://schemas.android.com/apk/res/android", Disable input method of EditText but keep cursor blinking, Issue 27609: EditText cursor missing when inputtype null, How to disable copy/paste from/to EditText, EditText: Disable Paste/Replace menu pop-up on Text Selection Handler click event, Issue 2854: android:inputType="none" for EditText, droid EditText inputType=“none” doesn't work, becomes “textMultiLine”. Androidスマホのキーボードの切り替えやキーボードキー表示の変更方法、キーボードの背景画像を変更できるおすすめアプリなどを紹介しています。スマホのキーボード設定を見直して、快適に使いたい人はぜひ参考にしてください。 (逆に、昔のメモでは「その1」はうまくいかなかったとあったのだけれど、今回、改めて試してみたところ、何の問題もなく動作してしまった。。。何か見落としがあるのか、昔の手順が何かミスっていたのか、、、)。, テキストエリアをタップ(ダブルタップ・ロングタップを含む)しても、カーソル移動ができませんし、範囲選択もできません。InputType.TYPE_NULL の状態で onTouchEventを読んだ時点で、カーソル位置がクリアされてれしまうためだと思われます。, が、これが本当に問題なのかと言われると、入力内容を制限するためにキーボードを非表示にしているという観点からすると、想定外の入力がなされる可能性が減るという意味で、デメリットではなくむしろメリットになるケースもあるのではないかと。ケースバイケースですね(実際、私のアプリでは、むしろカーソルが勝手に動かされると困るので、問題にはなっていません)。, ただ、このままだとカーソル位置は先頭で固定されてしまいますので、末尾に移動しておきましょう。, ソフトキーボードやタッチ以外の方法でカーソル移動を許可するなどで、末尾以外にカーソルがある可能性がある場合は、InputType同様バックアップ変数に退避しておき、後で戻す方法で。 私はlistviewと下に送信メッセージでアクティビティを作成しようとしています。 問題は、キーボードが表示されているときに、下部のコンテンツを押すのではなく、単に隠していることです。 私はadjustPanを使ってみましたが、ホールビューを押し上げました(リストビューのトップの要素を見る方法がなく、またアクションバーが消える)。, WhatsAppまたはLineを見ると、リストの最後の項目が画面の最下部に表示されると、キーボードがリストビューをプッシュアップします(アクションバーや最初の要素を画面外に出すことはありません) )、リストの最後の項目が表示されていないとき(スクロールアップした後)、キーボードは下のリストに隠れています(通常のadjustResize)。, editTextはListViewの一部ではなく、下部にLinearLayoutが配置されています。 キーボードが表示されると、ListViewは次のようになります(項目3と4はキーボードによって隠されています)。, 私はアンドロイドを試しました:windowSoftInputMode = "adjustPan"。結果は効果的にアイテム3と4が押し上げられ、キーボードでは隠されていません。 問題はそれがリストビューをプッシュするが、それを画面からプッシュするので、actionBarは消え、上にスクロールしようとしても、キーボードで項目1と項目2を見ることはできません。, android - 隠れる - キーボードがadjustPanなしで表示されるときにListViewをプッシュする. if文の中の方も、setRawInputTypeの方は、InputType.TYPE_NULL でないことが大事で(TYPE_NULLだとカーソルがでない)、それ以外であればなんでも良いっぽいようなコメントも見かけ、実質的には、setTextIsSelectable(true)が肝みたいです。 (この場合も、あくまでも画面に「←」「→」ボタンなどを用意して移動させるなどのケースを想定しており、いずれにせよ、タッチ位置によるカーソル移動はできませんのでご注意を), 問題その1で書いた、範囲選択ができないとか、コピペメニューが出てこないとかは、android:inputTypeやsetInputTypeを特に指定していなかった時や、android:inputType="textMultiLine"を指定していた時の話で、android:inputType="text" など、SingleLineのInputTypeを指定している時は、範囲選択ができてしまいます。だけでなく、選択画面に遷移した際にキーボードが表示されてしまいます。, 左が「方法その2」のコードそのままだった場合、右が「問題その1」で書いたカーソル位置を固定する処理を入れている場合の画面。, 何故、シングルラインとマルチラインで、こんなところの挙動が変わってしまうのかは不明。, ちなみに、android:inputType="passwordText"などのパスワードタイプを指定していた時はまた挙動が違っていて、範囲選択(というか全選択?)はできてしまいますがキーボードは表示されません。また、カーソルの移動もできません。, この場合は、ロングタップを無効にしてしまえば、マルチラインの時とほぼ同じ挙動(カーソル動かない、範囲選択できない、コピペできない)で動かすことができます。, 何故、InputTypeのモードによってこんなにも挙動が変わってしまうのか、、、。, 結局どっちの方法がいいのか? 質問: q: 入力エリアがキーボードに隠れる 文字の入力エリアをタップすると、画面が上に移動し、同時にキーボードが現れます。 しかし、サイトによっては入力エリアが上に移動せず、キーボードの後ろに留まったままになってしまいます。 (こっちは、API11から使えます)。 シミュレータ: android:inputType="textMultiLine" にしておいた上で、android:maxLines="1",android:scrollHorizontally:"true" などの設定にして見た目だけ一行っぽくする。あとは、入力監視して、改行が入らないようにする(入力手段が限られるはずなので、割り切れば監視そのものを省略してしまうというのも手?)とかですかね。, 画面上の入力欄がこれしかない、または全てキーボードを表示させないパターンであれば問題はないけれども、通常のEditTextと共存する場合など、既にキーボードが出ている状態で該当のEditTextにフォーカス遷移してくると、(当然ながら)どちらの方法でもキーボードが表示されたままで入力もできてしまいまう。 Android6.0以上がデフォルトになるまで時代を待つか、それ未満のバージョンは対象外としてしまうか、コピペは許可しておいてInputFilterなどで入力内容を制限するか、カーソル移動はできないものと割り切って「方法その2」で対処するか。 How to make EditText not editable through XML in Android? (逆に「一律TYPE_CLASS_TEXTで大丈夫なのか?」と思ったけれども、setInputTypeでなくsetRawInputTypeだからなのか、特に問題ないみたい。パスワード表示も、複数行テキストもちゃんと引き継がれていました), こちらの方法は、onTouchイベントをキーボードのでないTYPE_NULLのInputTypeで呼んでおいて、後でしれっと元のInputTypeに戻しておくってことですね。でもって、以降の余計な処理を走らせないように、戻り値はtrueで返しておく、と。, 私が実際にアプリで採用しているのは「その2」の方法なのですが、今回の記事をまとめるに当たって改めて色々と実験してみたところ、幾つか問題があることがわかりました。 Help us understand the problem. 単にキーボードを非表示にするだけならば簡単なのだけれども、これがまた一筋縄ではいかない話でした。, Compile SDK API レベル: 24 http://iphone.dot-whim.com/CalcForRun/index_ja.html, you can read useful information later efficiently. Androidスマホでテキスト入力をする場合、基本的にディスプレイ上に表示されるソフトウェアキーボードを使います。 しかし、何らかの原因でAndroidのソフトウェアキーボードが画面に表示されなくなり、文字入力ができなくて困ってしまうケースがあります。 このあたりでも散々議論されているけど。。。. したがって、このような場合は、フォーカスが当たった時にキーボードを閉じる処理を追加する必要があります。, ※ ちなみに、ふと「方法その1、方法その2のような面倒くさいことしなくても、この処理だけでもいいんじゃね?」と思って試してみたけれども、これだけだとバッチリキーボードが表示されてしまいました。 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); getWindow().setSoftInputMode(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).