ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

ポップアップウィンドウ(PopupWindow)

PopupWindowを表示して、EditTextでデータを入力する方法です。

まず、PopupWindowのレイアウトを決めます。

  • category_setting_popup.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextCategorySettingPopUp"
android:inputType="text" />

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:id="@+id/button_popup_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_alignParentLeft="true"
android:text="@string/button_register" />

<Button
android:id="@+id/button_popup_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_alignParentRight="true"
android:text="@string/button_cancel" />

</RelativeLayout>
</LinearLayout>

 

 次にpopupを表示するソースコードです。

private class onClickCategory_1 implements View.OnClickListener {
public void onClick(View v) {

mPopupWindow = new PopupWindow(getActivity());

// レイアウト設定
final View popupView = getActivity().getLayoutInflater().inflate(R.layout.category_setting_popup, null);
popupView.findViewById(R.id.button_popup_register).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mPopupWindow.isShowing()) {

EditText edText = (EditText) popupView.findViewById(R.id.editTextCategorySettingPopUp);
String category = edText.getText().toString();

Button button = (Button) getView().findViewById(R.id.buttonSettingCategory_1);
button.setText(category);

mPopupWindow.dismiss();
}
}
});
popupView.findViewById(R.id.button_popup_cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mPopupWindow.isShowing()) {
mPopupWindow.dismiss();
}
}
});
mPopupWindow.setContentView(popupView);

// タップ時に他のViewでキャッチされないための設定
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setFocusable(true);

// 表示サイズの設定 今回は幅200dp
float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, getResources().getDisplayMetrics());
// mPopupWindow.setWindowLayoutMode((int) width, WindowManager.LayoutParams.WRAP_CONTENT);
mPopupWindow.setWidth((int) width);
mPopupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);

// 画面(150, 300)に表示
mPopupWindow.showAtLocation(popupView.findViewById(R.id.button_popup_register), Gravity.NO_GRAVITY, 150, 300);

Button button = (Button) getView().findViewById(R.id.buttonSettingCategory_1);
String category = button.getText().toString();
if (category != null) {
EditText edText = (EditText) popupView.findViewById(R.id.editTextCategorySettingPopUp);
edText.setText(category);
}

}
}