こんにちは、まっさん(@Tera_Msaki)です。
この記事は Android スマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML 構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、記事の最後で紹介します)
入力キーボードを閉じずにダイアログ領域外をタップすると
画面項目が切れる現象を回避する
入力キーボードで画面が隠れている部分が切れて表示されます。
入力キーボードを閉じずに処理を継続すると画面項目が切れる現象を回避する方法↓↓↓
枠外のタップで画面項目が切れる現象を回避する実装
入力キーボードを閉じずにダイアログの枠外タップして、
ダイアログを閉じると、画面項目が切れる現象が発生します。
ダイアログの枠外タップを検知して、
ダイアログを閉じる前にキーボードを閉じるコードを追加することで、
画面項目が切れる現象を回避することが可能です。
枠外のタップでダイアログを閉じる
ダイアログ領域外のタップでダイアログを閉じたい場合は、
setCanceledOnTouchOutsideに trueを指定します。
閉じたくない場合は、falseを指定します。
:
public Dialog onCreateDialog(Bundle savedInstanceState) {
dialog = new Dialog(getActivity());
:
dialog.setCanceledOnTouchOutside(true);
:
キーボードを閉じるコード
ダイアログ領域外のタップを検知したい場合は、
Dialogをインスタンス化する際に、cancelをオーバライドします。
キーボードが表示されているか判定するKeyboardクラスを使用して、
キーボードが表示されている場合は、キーボードを非表示にします。
キーボードが表示されていない場合は、
ダイアログを閉じる操作を performClickで呼び出します。
public class CustomDialogEdit extends DialogFragment implements Keyboard.OnVisibilityListener {
private boolean isExecute = true;
:
@Override
public void onVisibilityChanged(boolean visible) {
isExecute = !visible;
}
:
public Dialog onCreateDialog(Bundle savedInstanceState) {
Keyboard keyboard = new Keyboard(getActivity());
keyboard.setVisibilityListener(this);
inputMethodManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
:
dialog = new Dialog(getActivity()) {
@Override public void cancel() {
if (getActivity() != null) {
if (isExecute) {
if (customDialogListener != null) dialog.findViewById(R.id.dialog_close).performClick();
} else {
inputMethodManager.hideSoftInputFromWindow(dialog.findViewById(R.id.dialog_close).getWindowToken(), 0);
}
}
}};
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
dialog.setContentView(layout[customDialogParcels.length]);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.setCanceledOnTouchOutside(true);
:
画面項目が切れる現象を回避するコード
入力キーボードの表示で画面項目が切れた状態であるため、
ダイアログ画面の OK ボタン、閉じる操作ともに画面の再描画が必要です。
ダイアログ呼び出し時に入力があった場合はその文字列、
ダイアログで入力があった場合はその文字列のいずれかを使って、
画面の再描画を行っています。
ダイアログ領域外をタップした場合は、doCloseClickを呼び出します。
:
// 検索ダイアログ表示 //
private void showItemsDialogEdit(Bundle bundle, String keyword) {
CustomDialogEdit customDialogEdit = new CustomDialogEdit(context);
customDialogEdit.setCustomDialogListener(new CustomDialogListener() {
@Override
public void doOkClick(View view) {
Bundle newBundle;
newBundle = customDialogEdit.getArguments();
customDialogParcels = (CustomDialogParcel[]) Objects.requireNonNull(newBundle).getParcelableArray("PAC");
keywords = customDialogParcels[0].getValue();
filter.setText(keywords.length() > 0 ? String.format(context.getString(R.string.stock_filter),keywords) : context.getString(R.string.stock_noFilter));
stockView.initialize(context);
mainActivity.stockerDatabaseHelper.getStockTranList(keywords);
}
@Override
public void doCloseClick(View view) {
stockView.initialize(context);
mainActivity.stockerDatabaseHelper.getStockTranList(keyword);
}
});
customDialogEdit.setArguments(bundle);
customDialogEdit.show(getParentFragmentManager(), context.getString(R.string.search1));
}
:
画面が隠れている部分が切れて表示されることを回避します。
今回は、ここまでです。
参考:キーボード表示でレイアウトが崩れる
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

IPX7防水なので、お風呂で音楽を聞くのに使ってます♪
この記事で紹介している実装は、下記の無料アプリ↓↓↓で動作を確認できます♪
これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
初めての Android のアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。
未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

無料でJava言語を学べるのは、かなり魅力的♪
でも、応募資格は35歳以下です、、、
2022年12月から説明会が土曜日開催が追加されていますよ♪
説明会では、希望者に対してプログラミング体験もできるよ♪

未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪
コメント欄