Android Studio를 활용한 안드로이드 프로그래밍 P317 직접 풀어보기 7-3
실습7-3을 다음과 같이 수정하라.
(일단 7-3실습 코딩을 해보시면 쉽게 수정 할 수 있습니다.)
1. Activity Main.xml의 텍스트뷰를 에디트 텍스트로 변경
2. <여기를 클릭> 클릭 시 Activity Main.xml의 에디트텍스트 내용이 대화 상자의 에디트텍스트에 나타남
3. 대화상자에서 <확인> 클릭 시 대화상자의 에디트텍스트 내용이 Activity main.xml의 에디트텍스트 내용으로 변경되게 한다.
(즉, 열려진 대화상자에서 정보 수정 후 '확인'을 누르면 main의 에디트텍스트가 수정됨)
4. 대화상자에서 <취소> 클릭 시 토스트가 화면의 임의 위치에 나타나게 함
결과 화면
1. 바깥의 EditText에 이름, 이메일 작성
2. <여기를 클릭> 클릭 후 대화상자화면
3. 대화상자에서 정보 수정 후 <확인> 버튼 클릭 후
4. <취소>버튼 누를 시 랜덤위치에 토스트 출력
dialog1.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">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사용자 이름"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이메일"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit2"/>
</LinearLayout>
toast1.xml (토스트 뷰)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff0000"
android:gravity="center">
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:src="@drawable/pic01"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:textSize="20sp"
android:text="textview"/>
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:src="@drawable/pic01"/>
</LinearLayout>
activity_main.xml 코드
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvName"
android:hint="사용자 이름"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvEmail"
android:hint="이메일"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:text="여기를 클릭"/>
</LinearLayout>
MainActivity 코드
토스트뷰를 랜덤위치에 출력해주는 함수들만 조심하면 될 것 같습니다.
random함수가 0~1의 임의의 수를 구해주는데 거기에 랜덤 좌표를곱하기때문에 토스트가 랜덤위치에 찍히게 됩니다.
그리고 EditText -> TextView의 경우, 읽어들인 EditText값을 문자열로 변환한 후 TextView에 저장해야하지만
이 문제는 EditeText->EditText의 경우이므로 굳이 문자열변환함수 toString()을 쓰지 않아도됩니다.
package com.example.a7_3;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText tvName,tvEmail;
EditText dlgEdtName,dlgEdtEmail;
TextView toastText;
View dialogView, toastView;
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("사용자 정보 입력");
tvName=(EditText) findViewById(R.id.tvName);
tvEmail=(EditText) findViewById(R.id.tvEmail);
btn1=(Button)findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogView=(View)View.inflate(MainActivity.this,R.layout.dialog1,null);
AlertDialog.Builder dlg=new AlertDialog.Builder(MainActivity.this);
dlg.setTitle("사용자 정보 입력");
dlg.setIcon(R.mipmap.ic_launcher);
dlg.setView(dialogView);
dlgEdtName=(EditText)dialogView.findViewById(R.id.edit1);
dlgEdtEmail=(EditText)dialogView.findViewById(R.id.edit2);
//에딧텍스트의 문구를 에딧텍스트에 복사하므로 .toString()함수 필요x
dlgEdtName.setText(tvName.getText());
dlgEdtEmail.setText(tvEmail.getText());
dlg.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
tvName.setText(dlgEdtName.getText());
tvEmail.setText(dlgEdtEmail.getText());
}
});
dlg.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast toast=new Toast(MainActivity.this);
toastView=(View)View.inflate(MainActivity.this,R.layout.toast1,null);
toastText=(TextView)toastView.findViewById(R.id.textView);
toastText.setText("취소했습니다.");
toast.setView(toastView) ;
Display display=((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int xoffset=(int)(Math.random()*display.getWidth());
int yoffset=(int)(Math.random()*display.getHeight());
toast.setGravity(Gravity.TOP | Gravity.LEFT,xoffset,yoffset);
toast.show();
}
});
dlg.show();
}
});
}
}
'Android Studio를 활용한 안드로이드 프로그래밍' 카테고리의 다른 글
직접 풀어보기 8-2 (15) | 2020.05.20 |
---|---|
직접 풀어보기 8-1 (0) | 2020.05.20 |
직접 풀어보기 7-2 (4) | 2020.05.19 |
직접 풀어보기 7-1 (0) | 2020.05.18 |
직접 풀어보기 6-3 (5) | 2020.05.11 |