こんにちは、まっさん(@Tera_Msaki)です。
この記事は Android スマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML 構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、記事の最後で紹介します)
ダイアログ領域外のタップでも画面項目が切れる現象が発生します。回避する方法はこちら↓↓↓
画面項目が切れる現象を回避する実装
Androidスマホのアプリ開発でキーボードを閉じずに
処理を継続すると画面項目が切れる現象が発生します。
処理を継続する前にキーボードを閉じるコードを追加すると
画面項目が切れる現象を回避することが可能です。
キーボードを閉じるコード
getSystemService で InputMethodManager を取得します。
取得した InputMethodManager の hideSoftInputFromWindow を使用します。
import android.view.inputmethod.InputMethodManager;
:
private InputMethodManager inputMethodManager;
inputMethodManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
:
//画面のクリックでキーボードを消す
View dialog = dialog.findViewById(R.id.dialog);
dialog.setOnClickListener(view -> {
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
});
:
Keyboardクラス
キーボードが表示されているかの判定は、
標準では実装されていないため、個別でクラスを作成 する必要があります。
クラス内部の処理は、GlobalLayoutListenerで親のビューの高さの変化を検知、
キーボードの表示・非表示を判定します。
判定結果はインタフェースを使用して、イベント通知 します。
import android.app.Activity;
import android.graphics.Rect;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
public class Keyboard {
private final Activity activity;
private boolean prev;
private final Rect rect = new Rect();
public interface OnVisibilityListener {
void onVisibilityChanged(boolean visible);
}
public Keyboard(Activity activity) {
this.activity = activity;
}
public void setVisibilityListener(final OnVisibilityListener onVisibilityListener){
final View parentView = ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
parentView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 148, parentView.getResources().getDisplayMetrics());
parentView.getWindowVisibleDisplayFrame(rect);
int diff = parentView.getRootView().getHeight() - (rect.bottom - rect.top);
boolean isShown = diff >= height;
if (isShown != prev) {
prev = isShown;
onVisibilityListener.onVisibilityChanged(isShown);
}
});
}
}
画面項目が切れる現象を回避するコード
ダイアログを継承したカスタムダイアログに 画面項目が切れる現象の回避 を実装します。
キーボードが表示されているの判定するクラスをインポートし、インタフェースを実装します。
インタフェースで通知されるイベントで処理を継続するかの判定フラグとして更新します。
キーボードが表示されている場合は、キーボードを消す処理を実行するようにします。
import android.view.inputmethod.InputMethodManager;
import Keyboard;
:
public class CustomDialogEdit extends DialogFragment implements Keyboard.OnVisibilityListener {
:
private InputMethodManager inputMethodManager;
private boolean isExecute = true;
:
@Override
public void onVisibilityChanged(boolean visible) {
isExecute = !visible;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Keyboard keyboard = new Keyboard(getActivity());
keyboard.setVisibilityListener(this);
inputMethodManager = (InputMethodManager)context1.getSystemService(Context.INPUT_METHOD_SERVICE);
:
View view1 = dialog.findViewById(R.id.dialog);
view1.setOnClickListener(view -> {
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
});
:
dialog.findViewById(R.id.dialog_ok).setOnClickListener(view -> {
dialog.findViewById(R.id.dialog_ok).requestFocus();
if (isExecute) {
:
} else
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
});
今回は、ここまでです。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪
IPX7防水なので、お風呂で音楽を聞くのに使ってます♪
これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
初めての Android のアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。
未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪
未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪
カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪
ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪
コメント欄