Android開発では端末のバージョンによって以前まではこれで動いてたのに!って言うことが多く、「どれがちゃんと動くやつだっけー、これかな?これかな?」と以前やった検証をまたやって。。。と本当に時間がもったいない。これをなくしたい。なので、いろんなところに散乱してるしてる記事をまとめました。
もくじ
キーボードで画面全体が上がってしまう。固定したい
AndroidManifest.xml に android:windowSoftInputMode=”adjustPan” を追加する。
1 2 3 4 5 6 7 8 |
[AndroidManifest.xml] <activity android:name=".MainActivty" android:windowSoftInputMode="adjustPan" > ...... </activity> |
参考
http://y-anz-m.blogspot.ca/2010/12/androidonscreen-input-methods.html
キーボードで画面が隠れてしまう。スクロールさせたい。
方法1 対象のレイアウトを ScrollView
で囲む。かんたんだけど、下記に注意
・ScrollView は 1 つの View しか持てないので、スクロールさせたい箇所を何かしらの ViewGroup で囲む必要がある
・ScrollView をルート要素にすることができない
・レイアウトによっては ScrollView を入れるとレイアウトが崩れるので、調整する必要あり
方法2 AndroidManifest.xml に android:windowSoftInputMode=”adjustResize” を追加し、該当する activity の xml のルート要素に android:fitsSystemWindows=”true” を書く。
1 2 3 4 5 6 7 8 9 |
[AndroidManifest.xml] <activity android:name=".MainActivty" android:windowSoftInputMode="adjustResize" > ...... </activity> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[example_layout.xml] <LinearLayout 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" android:gravity="center" android:orientation="vertical" android:fitsSystemWindows="true" tools:context=".MainActivity" > ... </LinearLayout> |
参考
https://qiita.com/bird_tummy/items/3709d607c4ec88ad9e71
(何かしたあとで)EditTextに強制的にフォーカス合わせてキーボードを出す。
1 2 3 4 5 6 7 8 |
[example.java] EditText yourEditText= (EditText) findViewById(R.id.yourEditText); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if(imm == null) { // imm might be null return; } imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT); |
参考
https://stackoverflow.com/questions/5105354/how-to-show-soft-keyboard-when-edittext-is-focused
強制的にキーボードを閉じる
1 2 3 4 5 6 7 |
[example.java] InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if(imm == null) { // imm might be null return; } imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0); |
参考
https://stackoverflow.com/questions/5105354/how-to-show-soft-keyboard-when-edittext-is-focused
カラーの設定
正直このあたりちゃんと理解出来ていない。
レイアウトxmlのEditTextはこんな感じです。AppCompatEditTextを使っていますが、EditTextでも同じです。
style と app:theme を両方指定しているのは、 style だけだと colorControlNormal と colorControlActivated の指定が効かないからです。
1 2 3 4 5 6 7 8 9 10 |
[example_layout.xml] <android.support.v7.widget.AppCompatEditText android:id="@+id/edit_text" style="@style/EditTextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="ヒント" app:theme="@style/EditTextStyle" /> |
1 2 3 4 5 6 7 8 9 10 11 |
[examp_style.xml] <style name="EditTextStyle" parent="Widget.AppCompat.EditText"> <item name="colorControlNormal">@color/amber500</item> <item name="colorControlActivated">@color/pink500</item> <item name="android:textCursorDrawable">@color/indigo500</item> <item name="android:textColor">@color/orange500</item> <item name="android:textColorHint">@color/teal500</item> <item name="android:textColorHighlight">@color/purple500</item> </style> |
参考
https://qiita.com/konifar/items/47d467e3574c9228fdc8
カーソルの色、太さ変更
デフォルトのカーソル細すぎる!なんてとき。
カーソル用にDrawableをxmlで作成し、EditTextに設定する
1 2 3 4 5 6 7 8 9 10 |
[drawable/cursor_bar.xml] <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/black"/> <size android:width="2dp"/> </shape> |
1 2 3 4 5 6 7 8 |
[examp_layout.xml] <EditText ... textCursorDrawable="@drawable/cursor_bar" ... /> |
参考
忘れました。多分Stack Over Flow
カーソルを文末に置きたい
1 2 3 4 |
[example.java] EditText et = (EditText)findViewById(R.id.inbox); et.setSelection(et.getText().length()); |
参考
https://stackoverflow.com/questions/6217378/place-cursor-at-the-end-of-text-in-edittext
改行させないようにしたい
EditTextのinputTypemに「text」を指定してやる。ただしこれだとキーボードエンターキーが次のフォーカスに移るようになるのが注意点
1 2 3 4 5 6 7 |
[example_layout.xml] <EditText ... android:inputType="text" /> |
参考
http://android.roof-balcony.com/view/edittext/multiline/
キーボードのエンターキーでフォーカスを移さずキーボードを閉じる。
EditTextにandroid:imeOptions=”actionDone”を追加
1 2 3 4 5 6 7 |
[example_layout.xml] <EditText ... android:imeOptions="actionDone" /> |
参考
http://pentan.info/android/app/sample/edittext_imeoptions.html