210202
[동적버튼 생성] 코틀린으로 동적버튼 생성, margin값 dp로 설정 본문
동적으로 버튼을 생성하려면 코드상에서 View를 만들어서 추가해주어야한다.
동적으로 버튼을 생성하는 방법은 다음과 같다.
1. 생성할 액티비티에서 onCreate안에 버튼을 생성해준다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val dynamicButton = Button(this)
}
여기서는 dynamicButton으로 생성해주었다.
2. dynamicButton의 속성을 설정해준다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val dynamicButton = Button(this)
val layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
dynamicButton.layoutParams = layoutParams
}
여기서 layoutParams를 만들어서 설정해준다. LinearLayout.~ 로 생성한 이유는 내가 쓰려고하는 버튼을 LinearLayout으로 배치하기 위함이고 다른것으로 바꿔도 된다. 그 다음 witdth, height를 자신이 설정하고자하는 크기에 맞춘다.
나는 width는 match_parent, height는 wrap_content로 설정하기 위해 다음과 같이 설정했다.
3. 버튼이 들어갈 View에 추가
<LinearLayout
android:id="@+id/buttonview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/serachlocationbutton1"
style="@style/MainSearchLocationButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="1번 위치를 입력해주세요"></Button>
<Button
android:id="@+id/serachlocationbutton2"
style="@style/MainSearchLocationButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="2번 위치를 입력해주세요"></Button>
</LinearLayout>
나는 xml 상에서 id가 buttonview라고 되어있는 view에 넣을 것이다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val buttonview = findViewById<LinearLayout>(R.id.buttonview)
val dynamicButton = Button(this)
val layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
dynamicButton.layoutParams = layoutParams
buttonview.addView(dynamicButton)
}
이렇게 추가하면 동적으로 생성이 된다.
+ margin값 설정(dp로)
layoutParams.setMargins(0, 0, 0, 0)
위의 코드로 left, top, right, bottom margin을 줄 수 있는데 여기서는 Int로 설정되어있다. 따라서 dp로 변환하는 작업이 필요하다.
dp로 바꾸는 방법은 다음과 같다.
var displayMetrics = resources.displayMetrics
var dp = Math.round(value * displayMetrics.density)
여기서 value자리에 원하는 값을 넣으면 dp로 바뀐다. 쉽게 사용하려면 다음과 같이 함수로 바꿔서 사용할 수 있다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val buttonview = findViewById<LinearLayout>(R.id.buttonview)
val dynamicButton = Button(this)
val layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
dynamicButton.layoutParams = layoutParams
layoutParams.setMargins(changeDP(10), changeDP(20), changeDP(10), 0)
buttonview.addView(dynamicButton)
}
private fun changeDP(value : Int) : Int{
var displayMetrics = resources.displayMetrics
var dp = Math.round(value * displayMetrics.density)
return dp
}
changeDP 함수로 값을 넣으면 자동으로 dp로 바뀐값이 리턴되게해서 쓰면 쉽다.
'Android > 기능구현' 카테고리의 다른 글
[Java] Room 기초적인 사용법 (0) | 2020.07.30 |
---|---|
[카카오톡 릴리즈 키값 구하기] 카카오링크 사용시 카카오톡 릴리즈 키값 쉽게 구하기 (0) | 2020.07.09 |
[데이터베이스] SQLite로 로컬에 데이터 저장하고 조회하기 (0) | 2020.06.22 |
Comments