안드로이드(Android) 문의 – Dialog 클래스를 이용하여 다이얼로그 계산기 올리기 |
개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2 |
이번내용은 다이얼로그에 계산기 같이 다양한 위젯으로 화면을 꾸밀수 있는지 질문한 내용입니다. 간단하게 EditText 두개 두고 버튼을 클릭하면 계산된 결과를 보여주는 다이얼로그 입니다. |
아래와 같이 첫번째 화면에서 팝업버튼을
누르게 되면 창이 뜨게 되고 창에서
계산하기 버튼을 누르면 결과가 나옵니다.
그리고 닫기 하면 창이 닫히겠죠.
팝업창을 만드는 함수는 createDialog 입니다. 여기 내부에
보시면 Dialog 객체를 생성하면서 R.layout.dialog_calculator_view
레이아웃 xml 로 화면을 만들게 됩니다. 이 xml 에 원하는
위젯들을 추가해서 구성하시면 되겠죠.
protected Dialog createdDialog(int id) { dlg = null; switch (id) { case ID_CALCULAR: Context mContext = this; dlg = new Dialog(mContext); dlg.setContentView(R.layout.dialog_calculator_view); dlgFirst = (EditText) dlg.findViewById(R.id.editText1); dlgSecond = (EditText) dlg.findViewById(R.id.editText2); dlgCalView = (TextView) dlg.findViewById(R.id.textView3); Button okDialogButton = (Button) dlg.findViewById(R.id.btnOk); okDialogButton.setOnClickListener(okDlgCalculator); break; default: break; } return dlg; }
R.layout.dialog_calculator_view 은 다음과 같습니다.
복잡하게 보이지만 TextView 가 많이 들어가서 그렇습니다.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/editText1" android:layout_width="70dp" android:layout_height="wrap_content" android:ems="10" android:inputType="number" > <requestFocus /> </EditText> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" android:gravity="center" android:text="+" android:textAlignment="center" /> <EditText android:id="@+id/editText2" android:layout_width="66dp" android:layout_height="wrap_content" android:ems="10" android:inputType="number" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" android:gravity="center" android:text="=" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="4" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/btnOk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="계산하기" /> <Button android:id="@+id/btnClose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="닫기" /> </LinearLayout> </LinearLayout>
다음은 다이얼로그 박스에서의 계산버튼클릭시
이벤트 구현입니다. setContentView() 에 다이얼로그
레이아웃을 셋팅했기 때문에 그 위젯들을
dlg.findViewById() 로 참조할수 있습니다.
이렇게 참조한 버튼에 clickListener 를 등록합니다.
dlg.setContentView(R.layout.dialog_calculator_view); dlgFirst = (EditText) dlg.findViewById(R.id.editText1); dlgSecond = (EditText) dlg.findViewById(R.id.editText2); dlgCalView = (TextView) dlg.findViewById(R.id.textView3); Button okDialogButton = (Button) dlg.findViewById(R.id.btnOk); okDialogButton.setOnClickListener(okDlgCalculator);
clickListener 는 아래와 같이 구현하였으며 계산일때와
닫기 버튼이 구분되어 있습니다. 계산일때 두 텍스트 박스에서
가져온 값을 더한후 결과값을 표시해 주는 것을 알수 있죠.
private Button.OnClickListener okDlgCalculator = new Button.OnClickListener() { public void onClick(View v) { switch (v.getId()) { case R.id.btnOk: double calValue = Double.parseDouble(dlgFirst.getText().toString()) + Double.parseDouble(dlgSecond.getText().toString()); dlgCalView.setText(String.valueOf(calValue)); break; case R.id.btnClose: dlg.dismiss(); break; default: break; } } };
이렇게 간단한 계산기 팝업을 구현한 전체 소스입니다.
import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class CalculatorPopup extends Activity implements OnClickListener{ private static final int ID_CALCULAR = 0; private Dialog dlg; private EditText dlgFirst, dlgSecond; private TextView dlgCalView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calculator_popup); Button btnPopup = (Button) findViewById(R.id.popup); btnPopup.setOnClickListener(this); } public void onClick(View v) { switch (v.getId()) { case R.id.popup: createdDialog(ID_CALCULAR).show(); // Instead of showDialog(0); break; default: break; } } protected Dialog createdDialog(int id) { dlg = null; switch (id) { case ID_CALCULAR: Context mContext = this; dlg = new Dialog(mContext); dlg.setContentView(R.layout.dialog_calculator_view); dlgFirst = (EditText) dlg.findViewById(R.id.editText1); dlgSecond = (EditText) dlg.findViewById(R.id.editText2); dlgCalView = (TextView) dlg.findViewById(R.id.textView3); Button okDialogButton = (Button) dlg.findViewById(R.id.btnOk); okDialogButton.setOnClickListener(okDlgCalculator); break; default: break; } return dlg; } private Button.OnClickListener okDlgCalculator = new Button.OnClickListener() { public void onClick(View v) { switch (v.getId()) { case R.id.btnOk: double calValue = Double.parseDouble(dlgFirst.getText().toString()) + Double.parseDouble(dlgSecond.getText().toString()); dlgCalView.setText(String.valueOf(calValue)); break; case R.id.btnClose: dlg.dismiss(); break; default: break; } } }; }
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) 색깔을 xml 로 정의 하고 관리하기 (0) | 2014.11.19 |
---|---|
안드로이드(Android) PhoneGap, 이클립스 플러그인 설치로 좀더 쉽게 개발하기 (0) | 2014.11.18 |
안드로이드(Android) 간단한 RatingBar 사용예제 (0) | 2014.11.18 |
안드로이드(Android) 이미지에서의 Exif GPS 정보를 GeoPoint 바꾸기 (6) | 2014.11.17 |
안드로이드(Android) 이미지뷰에서 Exif 정보 다이얼로그 띄우기 (1) | 2014.11.15 |
안드로이드(Android) showDialog(int) deprecated 다시 구현하기 (0) | 2014.11.14 |
안드로이드(Android) 파일 브라우저에서 이미지 보여주기 (1) | 2014.11.13 |
안드로이드(Android) 파일브라우저에서 이미지 클릭시 Exif 정보 출력하기 (0) | 2014.11.12 |