본문 바로가기
안드로이드

[Android] 1

by 엘딘 2022. 2. 17.
layout

ConstraintLayout : 강제적으로 위치를 지정, 원하는 위치에 배치 가능

LinearLayout : 가로나 세로방향으로 일열로 나열, 중첩되지 않고 자동 나열

RelativeLayout : 특정 뷰나 부모의 위치에 맞춰 배치

FrameLayout : 액자처럼 안쪽으로 뷰를 배치

TableLayout : 뷰를 테이블 형태로 나열

   <TableRow> : 행을 추가

   <TableColumn> : 열을 추가

android:orientation = "vertical"  : 세로 정렬

 

 

기본 설정
* 텍스트 상자
<TextView
    android:id="@+id/Text"			// id
    android:text="텍스트창"			// 출력 문구
    android:layout_width="match_content"	// 텍스트 상자 넓이
    android:layout_height="wrap_content"/>	// 텍스트 상자 높이

 match_content : 부모화면 기준으로 채우기
 wrap_content : 포함한 내용을 전부 보여줄 크기로 설정

  

viewBinding

xml의 뷰와 변수를 연결해주는 기능

findViewById를 이용할 경우 개별적으로 id와 타입을 적어주어야하나 viewBinding에서는 하지 않아도 됨

 

build.gradel 추가

android{
	...
	buildFeatures{
    	viewBinding true
	}
}

 

MainActivity 

val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
// binding 변수
// lazy : initialize 나중에 실행 > activity_main.xml(resource)을 먼저 객체화 시킨 후 실행
// inflate

// override fun onCreate(savedInstanceState: Bundle?){
	...
    setContentView(binding.root)	// onCreate들어와서 초기화
    
    // btnSay: Button id, Text: textView id
    binding.btnSay.setOnClickListener {
        Log.i(ContentValues.TAG, "btnSay 클릭했습니다")
        println("btnSay 클릭했습니다")

        binding.textSay.setText("Hello Android!!")
    }
}

 

findViewById

xml의 뷰와 변수를 연결해주는 기능

override fun onCreate(savedInstanceState: Bundle?) {
	...
    // layout폴더 안 activity_main에 접근
    setContentView(R.layout.activity_main)
    
    // textSay == 객체(변수)
    val textSay = findViewById<TextView>(R.id.textSay)
    val btnSay = findViewById<Button>(R.id.btnSay) 

    btnsay.setOnClickListner{
    	textSay.text = "Android World"
    }
}

 

Toast - 안드로이드 화면에 메세지 팝업
val toast = Toast.makeText(this.applicationContext, "버튼 클릭!", Toast.LENGTH_SHORT)
toast.show()

 

ImageView
<ImageView
	// 이미지뷰에 가져올 이미지 주소
	app:srcCompat="@drawable/image" />

 

Button
activity_main
<Button
    android:id="@+id/btn"
	android:text="버튼"
    android:layout_width="70dp"
    android:layout_height="50dp"
    // onClickListner 사용하기 위해 작성
    android:onClick="onClick"/>
    
    

MainActivity
									  // button onClickLister
class MainActivity: AppCompatActivity(), View.OnClickListner{
	...
    
    override fun OnClick(view, View?){
    
    val toast = Toast.makeText(this.applicationContext, "버튼 클릭!", Toast.LENGTH_SHORT)
    toast.show()
    
    // 버튼 클릭으로 이미지 노출/비노출
    when(view?.id){
        R.id.btn->{
            var image = findViewById<ImageView>(R.id.image)

            image.visibility = if(image.visibility == view.VISIBLE){
                View.INVISIBLE		// 버튼 클릭으로 이미지 비노출
            }else{
                View.VISIBLE		// 이미지 노출
            }
        }
    }
    }
}

 

inflate

 

 

 

Action bar
//ActionBar
res/menu/menu_main.xml 생성

<menu xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:android="http://schemas.android.com/apk/res/android">

    <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" />
</menu>


MainActivity.kt

class MainActivity : AppCompatActivity() {
	...
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    	//									  매개변수
        menuInflater.inflate(R.menu.menu_main, menu)

        return super.onCreateOptionsMenu(menu)
        //return false
    }

 

 

 

 

 

 

 

 

'안드로이드' 카테고리의 다른 글

[Android] Button  (0) 2022.03.23
[Android] Intent  (0) 2022.03.22
[Android] Fragment  (0) 2022.03.22
[Android] RecylerView  (0) 2022.03.21
[Android] 2  (0) 2022.02.20

댓글