위에 그림은 SMS 화면의 일부입니다. SMS 와 비슷하게 메시지 박스를 만들고 Byte 표시 및 제한을 해보려고 합니다. 1. EditText Box : 메시지 박스 border_black_1dp.xml <? xml version ="...

[안드로이드] EditText Box : 메시지 박스 Byte 표시 및 제한


위에 그림은 SMS 화면의 일부입니다.

SMS 와 비슷하게 메시지 박스를 만들고 Byte 표시 및 제한을 해보려고 합니다.




1. EditText Box : 메시지 박스

border_black_1dp.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item >
<shape android:shape="rectangle" >
<stroke
android:width="1dp"
android:color="#000000" />
</shape>
</item>
</layer-list>


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="20dp">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="250dp"
android:orientation="vertical">

<EditText
android:id="@+id/etMessage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/border_black_1dp"
android:gravity="start"
android:hint="메시지를 입력해주세요."
android:padding="10dp" />

<TextView
android:id="@+id/tvByte"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginEnd="5dp"
android:gravity="end" />
</FrameLayout>
</LinearLayout>




2. Byte 표시 및 제한

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val etText = findViewById<TextView>(R.id.etMessage)
val tvByte = findViewById<TextView>(R.id.tvByte)

etText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {

}

override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
val bytes: ByteArray?
try {
// byte 표시 갱신 처리
bytes = charSequence.toString().toByteArray(charset("KSC5601"))
val strCount = bytes.size
tvByte.text = "$strCount / 80 Byte"
} catch (ex: UnsupportedEncodingException) {
ex.printStackTrace()
}
}

override fun afterTextChanged(editable: Editable) {
val str = editable.toString()
try {
// byte 제한을 넘었을 때 삭제 처리
val strBytes = str.toByteArray(charset("KSC5601"))
if (strBytes.size > 80) {
editable.delete(editable.length - 2, editable.length - 1)
}
} catch (ex: Exception) {
ex.printStackTrace()
}
}
})
}
}




3. 결과






[참고자료]

https://hanyeop.tistory.com/64






0 comments: