[Android] IntelliJ #3 ActionBar, Button, AlertDialog

현지·2022년 2월 4일
0

ActionBar

  • 상단 메뉴

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공간이 있으면 표시, 해상도에 따라 달라짐
withTexttext와 아이콘 함께 표시

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 & Datetime

  • 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 기본 방법

  • onClick 함수를 사용하려면 activity_main.xml에 android:onClick="onClick" 추가해야 함
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 사용

  • gradle추가해야 함
  • activity_main.xml에 android:onClick="onClick"는 필요없음
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())
        }
    }
}

AlertDialog

  • 입력한 내용으로 알림창 띄우기

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)
    = 뒤로가기 버튼이나 화면을 눌러서 종료하는 것을 막을 수 있다.
    = 알림창의 버튼으로만 종료할 수 있다.

0개의 댓글