Skip to content

Commit

Permalink
frame 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
jhg3410 committed Jan 12, 2023
1 parent 41b35d6 commit f8ac639
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,31 @@ package org.boostcamp.uniletter_spinner

import android.content.Context
import android.util.AttributeSet
import android.util.Log
import android.view.View
import android.widget.ArrayAdapter
import android.widget.FrameLayout
import android.widget.ListPopupWindow
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView

class Jikpinner @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
private lateinit var items: Array<CharSequence>

private lateinit var title: TextView
private lateinit var recyclerView: RecyclerView
private lateinit var items: Array<CharSequence>
private val popUp = ListPopupWindow(context)

init {
inflate(context, R.layout.jikpinner, this@Jikpinner)


setAttrs(attrs)
setAdapter()
setView()
setVisibility()

recyclerView.addOnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
title.width = right - left
}
setPopup()
popUp.setContentWidth(measureWidth() + 100)
findViewById<TextView>(R.id.tv_title).width = popUp.width
}

private fun setAttrs(attrs: AttributeSet?) {
Expand All @@ -35,19 +36,50 @@ class Jikpinner @JvmOverloads constructor(
}
}

private fun setView() {
inflate(context, R.layout.jikpinner, this@Jikpinner)
recyclerView = findViewById<RecyclerView>(R.id.rv_menu).apply {
adapter = JikpinnerAdapter(items)

private fun setAdapter() {
popUp.setAdapter(ArrayAdapter(context, R.layout.item_jikpinner, items))
}

private fun measureWidth(): Int {
var width = 0
for (i in items.indices) {
val view = ArrayAdapter(context, R.layout.item_jikpinner, items).getView(
i,
null,
FrameLayout(context)
)
view.measure(0, 0)
width = width.coerceAtLeast(view.measuredWidth)
}
title = findViewById<TextView>(R.id.title).apply {
return width
}

private fun setView() {
findViewById<TextView>(R.id.tv_title).apply {
text = items.first()
setOnClickListener {
if (popUp.isShowing) {
popUp.dismiss()
} else {
popUp.show()
}
}
}
}

private fun setVisibility() {
title.setOnClickListener {
private fun setPopup() {

popUp.isModal = true
popUp.anchorView = this
popUp.verticalOffset = this.height + 8
setOnItemClickListener()
}

private fun setOnItemClickListener() {
popUp.setOnItemClickListener { _, _, position, _ ->
findViewById<TextView>(R.id.tv_title).text = items[position]
popUp.dismiss()
}
}
}

This file was deleted.

5 changes: 5 additions & 0 deletions uniletter-spinner/app/src/main/res/drawable/ic_arrow_down.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6 1.41,-1.41z"/>
</vector>
16 changes: 3 additions & 13 deletions uniletter-spinner/app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/teal_200"
tools:context=".MainActivity">
android:background="@color/teal_200">



<org.boostcamp.uniletter_spinner.Jikpinner
android:id="@+id/jikpinner"
Expand All @@ -16,15 +17,4 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<org.boostcamp.uniletter_spinner.Jikpinner
android:id="@+id/jikpinner2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/jikpinner"
app:layout_constraintEnd_toStartOf="@id/jikpinner"/>





</androidx.constraintlayout.widget.ConstraintLayout>
25 changes: 7 additions & 18 deletions uniletter-spinner/app/src/main/res/layout/jikpinner.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,24 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/title"
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:gravity="start|center"
android:padding="12dp"
android:text="전체"
android:textColor="@color/black"
android:textStyle="bold"
app:drawableEndCompat="@drawable/ic_arrow_down"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="전체" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@color/white"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title"
tools:listitem="@layout/item_jikpinner" />


</androidx.constraintlayout.widget.ConstraintLayout>

0 comments on commit f8ac639

Please sign in to comment.