목록프로그래밍 (90)
처음부터 차근차근
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bnSAPb/btrBynFHzq2/eqEE74x63pAcXP18XnK2Yk/img.png)
팝업 메뉴 뷰에 부착된 모달 메뉴(modal menu)를 팝업 메뉴라 한다. API 레벨 11부터 제공하기 시작했으며 용도는 아래와 같다. 오버플로우 스타일 메뉴 제공 서브 메뉴의 역할 드롭다운 메뉴 팝업메뉴 만들기 1. res 아래에 menu 디렉토리 만들기 2. 그 밑에 popup.xml 만들기 popup.xml activity_main.xml MainActivity.java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activit..
입력칸에다 이름을 입력하면 위에가 'Hello, [입력값]'으로 변경되는 간단한 앱을 만들어 보았다. 코드 import UIKit ///내가만든 클래스 class ViewController: UIViewController { @IBOutlet weak var lblHello: UILabel! @IBOutlet weak var txtName: UITextField! @IBAction func btnSend(_ sender: UIButton) { lblHello.text = "Hello," + txtName.text! //print(lblHello.text, txtName.text) } override func viewDidLoad() { super.viewDidLoad() let l = UILabel() ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQuhIl/btrAUk4qdm5/33nZJkQ5eBkXEh3k4srhGk/img.png)
inflate inflate = 팽창 안드로이드에서는 XML 파일을 읽어서 실제 메뉴로 만들어주는 것을 inflate(팽창)한다고 한다. 메뉴 리소스를 팽창(inflate)하면 실제 메뉴가 생성된다. inflate 소스 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mymenu, menu); return true; } 메뉴 종류 안드로이드가 지원하는 메뉴의 종류에는 3가지가 있다. 1. 옵션 메뉴 : 액티비티의 주 메뉴. 화면 아래쪽에 숨겨져 있으며, MENU 버튼을 눌러야 나타난다. 2. 컨텍스트 메뉴 : 화면을 길게 누르고 있..
class Man{ var age : Int var weight : Double func display(){ print("나이=\(age), 몸무게=\(weight)") } init(age: Int , weight : Double){ self.age = age self.weight = weight } } class Student : Man {//비어있지만Man의 모든 것을 가지고 있음 } var kim : Man = Man(age:10, weight:20.5) kim.display() var lee : Student = Student(age:20,weight:65.2) lee.display() print(lee.age) //나이=10, 몸무게=20.5 //나이=20, 몸무게=65.2 //20 class ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nCiiS/btrzKsnvz3o/oydpkvFsvXzcLKhG9ftJbK/img.png)
EditText 이벤트 처리 - 리스너 객체 사용 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText editText = findViewById(R.id.editTest); Button button = (Button) findViewById(R.id.btnTest); button.setOnClickListener(new View.OnClickListener() { @Override public voi..
var x : Int! = 10 // 선언문에서 ?는 옵셔널 변수 선언 print(x) //print(x!) // 실행문에서 느낌표는 강제 언래핑 if x != nil { // !는 그냥 쓰면 위험(x에 nil들어가면 crash남). 그래서 if문 사용해서 언래핑해줌 print(x!) // ! 옵셔널 변수는 옵셔널로 사용되지 않으면 자동으로 옵셔널을 푼다. } // 옵셔널 바인딩 if let xx = x { print(x, xx) } var a : Int? var y = a ?? 0 // a에 nil이 들어가있으면 0을 y에 대입한다. print(a, y) //optional chaning //실행문에서 ?를 쓰는 것 //Optional(10) //10 //Optional(10) 10 //nil 0 va..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bIijXj/btryTNupXoK/rDt952yTvuf71AwMoYJRjk/img.png)
배경 지식 Android에서 UI 작업은 메인 스레드에서만 할 수 있다. 이유1. Android UI가 을 따르고 있기 때문(중요) 싱글 스레드 모델 : 안드로이드 화면을 구성하는 뷰나 뷰그룹을 하나의 스레드에서만 담당하는 원칙 1. 메인 스레드를 중단하지 않기 2. 안드로이드 UI 툴킷은 오직 메인 스레드(UI 스레드)에서만 접근할 수 있도록 하기 이유2. 앱의 속도가 느려지기 때문 메인 스레드에서 UI를 맡아서 작업하는 데, UI 작업 말고도 다른 시간이 많이 걸리는 작업까지 메인 스레드에서 도맡아 하면 앱의 속도가 현저히 느려진다. 그래서 UI를 제외한 다른 작업들은 다른 스레드에다 맡겨 분리하는 방법을 선택했다. 메인 스레드는 기본적으로 looper을 가진다. looper은 Message Queu..
class Man{ var age : Int var weight : Double func display(){ print("나이=\(age), 몸무게=\(weight)") } init(age: Int , weight : Double){ self.age = age self.weight = weight } } class Student : Man {//비어있지만Man의 모든 것을 가지고 있음 } var kim : Man = Man(age:10, weight:20.5) kim.display() var lee : Student = Student(age:20,weight:65.2) lee.display() print(lee.age) //나이=10, 몸무게=20.5 //나이=20, 몸무게=65.2 //20 class ..