- 상단 메뉴
✅res > menu > menu_main.xml
- menu_main이라는 이름으로 xml을 추가하고 메뉴를 구성한다.
<?xml version ="1.0" encoding ="utf-8"?><!-- Learn More about how to use App Actions: https://developer.android.com/guide/actions/index.html --> <menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <!--ActionBar--> <item android:id="@+id/menu_search" android:icon="@android:drawable/ic_menu_search" android:title="검색" app:showAsAction="always|withText"/> <item android:id="@+id/menu_chat" android:icon="@android:drawable/sym_action_chat" android:title="채팅" app:showAsAction="always"/> <item android:id="@+id/menu_email" android:icon="@android:drawable/sym_action_email" android:title="이메일" app:showAsAction="ifRoom"/> <item android:id="@+id/action_setting" android:title="세팅" app:showAsAction="never"/>
- showAsAction
always 항상표시 never 액션바에 표시 안 함 ifRoom 공간이 있으면 표시, 해상도에 따라 달라짐 withText text와 아이콘 함께 표시
✅ activity_main.xml
- 확인할 TextView를 "textView"라는 아이디로 생성하기
✅ MainActivity
package com.example.sample08 import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.widget.TextView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //상단 title show 여부 //supportActionBar?.setDisplayShowTitleEnabled(false) } //상단에 menu 표시해주는 부분 override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.menu_main, menu) return super.onCreateOptionsMenu(menu) //return false } //클릭했을때, text값 변경하기 override fun onOptionsItemSelected(item: MenuItem): Boolean { val textView:TextView = findViewById<TextView>(R.id.textView) when(item?.itemId){ R.id.menu_search ->textView.text = "검색 클릭" R.id.menu_chat ->textView.text = "채팅 클릭" R.id.menu_email ->textView.text = "이메일 클릭" R.id.action_setting ->textView.text = "세팅 클릭" } return super.onOptionsItemSelected(item) } }
- button one클릭하면 아래 버튼을 현재 시간으로 변경해줌
✅ activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:text="Button one" android:layout_width="149dp" android:layout_height="90dp" android:id="@+id/btn" android:onClick="onClick" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> <Button android:text="time Button" android:layout_width="386dp" android:layout_height="77dp" android:id="@+id/btn2" app:layout_constraintTop_toBottomOf="@+id/btn" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="84dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias="0.0"/> </androidx.constraintlayout.widget.ConstraintLayout>
✅ MainActivity
#1 기본 방법
package com.example.sample09 import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.View import android.widget.Button import android.widget.Toast import java.text.SimpleDateFormat import java.util.* class MainActivity : AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val btn2 = findViewById<Button>(R.id.btn2) btn2.setOnClickListener { Toast.makeText(this.applicationContext, "버튼2 클릭!", Toast.LENGTH_SHORT).show() } } //onClick 함수를 사용하려면 activity_main.xml에 android:onClick="onClick" 추가해야 함 override fun onClick(v: View?) { when(v?.id){ R.id.btn->{ Log.d("버튼", "클릭") var btn2 = findViewById<Button>(R.id.btn2) //kk : 24시간 형태, hh : 12시 까지 형태 btn2.text = SimpleDateFormat("yyyy-MM-dd kk:mm:ss").format(Date()) } } } }
- 아래 코드 2줄 있으면 activity_main.xml에 android:onClick="onClick" 없어도 됨
val btn = findViewById<Button>(R.id.btn) btn.setOnClickListener(this)
#2 binding by lazy 사용
package com.example.sample09 import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import com.example.sample09.databinding.ActivityMainBinding import java.text.SimpleDateFormat import java.util.* class MainActivity : AppCompatActivity() { val binding by lazy { ActivityMainBinding.inflate(layoutInflater) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) binding.btn.setOnClickListener { Toast.makeText(this.applicationContext, "버튼 one", Toast.LENGTH_SHORT).show() binding.btn2.text = SimpleDateFormat("yyyy-MM-dd kk:mm:ss").format(Date()) } } }
- 입력한 내용으로 알림창 띄우기
✅ activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!--android:hint = placeholder같은 역할--> <EditText android:layout_width="414dp" android:layout_height="66dp" android:inputType="textPersonName" android:hint="@string/edit_hint" android:ems="10" android:id="@+id/editText" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> <Button android:text="Button" android:layout_width="414dp" android:layout_height="66dp" android:id="@+id/button" app:layout_constraintTop_toBottomOf="@+id/editText" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="0.516" app:layout_constraintVertical_bias="0.054"/> </androidx.constraintlayout.widget.ConstraintLayout>
✅ MainActivity
package com.example.sample10 import android.content.DialogInterface import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.EditText import androidx.appcompat.app.AlertDialog class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button = findViewById<Button>(R.id.button) val edit = findViewById<EditText>(R.id.editText) button.setOnClickListener { AlertDialog.Builder(this@MainActivity) .setTitle("대화상자 제목") .setMessage(edit.text) //메세지 내용 .setCancelable(false) ////화면을 누르거나 뒤로가기를 눌러도 사라지지 않음, 버튼으로 종료해야 함 .setNeutralButton("닫기", DialogInterface.OnClickListener{ dialog, which -> //닫기 누르고 실행되는 부분 }).show() } } }
- setCancelable(false)
= 뒤로가기 버튼이나 화면을 눌러서 종료하는 것을 막을 수 있다.
= 알림창의 버튼으로만 종료할 수 있다.