[초구어] adjust Nothing. 그런데 Software Keyboard는 뭘 하고 싶어요!때로 하는 일
16753 단어 Android
개시하다
망했다
빠르지만 Software Input Mode가 있지 않나요?
adjustPan이야, adjust Resize야.
키보드가 갑자기 나오면 갑자기 줄어들잖아요.키보드 뒷면에 숨기지 않습니다!너무 좋아요!
편하긴 한데.
나는 배경을 축소하고 싶지 않아!근데 키보드 위치가 위로 이동하고 싶어요!
이런 느낌이야.인스타그램 실시간으로 중계되는 댓글창 같은 거!나 그거 하고 싶어!
adjustnone 좋아요!
하지만 키보드가 나오지 않아서 뺄 수가 없어요.그리고 이 점을 감지하려면 View의 크기를 감시해야 한다. 사이즈가 바뀌면 키보드가 나온다!이렇게 판단하는 거 아니에요?
adjustnone에서 이런 사이즈 조정 이벤트를 해주시나요?그렇게 생각해요.
팝업 윈도 있잖아!
https://developer.android.com/reference/android/widget/PopupWindow.html
이 녀석은 Software Input Mode를 설정할 수 있어!
그러니까 액티비티와 다른 Software Input Mode를 설정할 수 있다는 거죠?그쵸?
즉
이런 느낌.
KeyboardHeightProvider.kt/**
* ソフトウェアキーボードの高さを計算するやつ
*/
typealias KeyBoardHeightChangedListener = (keyboardHeight: Int) -> Unit
@SuppressLint("InflateParams")
class KeyboardHeightProvider(private val activity: Activity) : PopupWindow() {
private val measurementView: View by lazy {
LayoutInflater.from(activity).inflate(R.layout.view_mesurement, null, false)
}
private val parentView: View by lazy {
activity.findViewById<View>(android.R.id.content)
}
private var listener: KeyBoardHeightChangedListener? = null
init {
softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE or
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
inputMethodMode = INPUT_METHOD_NEEDED
contentView = measurementView
width = 0
height = WindowManager.LayoutParams.MATCH_PARENT
measurementView.viewTreeObserver.addOnGlobalLayoutListener {
calcHeight()
}
}
fun listen(listener: KeyBoardHeightChangedListener) {
this.listener = listener
}
fun start() {
if (!isShowing && parentView.windowToken != null) {
showAtLocation(parentView, Gravity.NO_GRAVITY, 0, 0)
}
}
fun stop() {
dismiss()
listener = null
}
private fun calcHeight() {
val point = Point()
activity.windowManager.defaultDisplay.getSize(point)
val rect = Rect()
measurementView.getWindowVisibleDisplayFrame(rect)
listener?.invoke(point.y - rect.bottom)
}
}
view_mesurement.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="match_parent" />
이렇게 BA☆
MainActivity.ktimport android.os.Bundle
import android.support.constraint.ConstraintSet
import android.support.v7.app.AppCompatActivity
import com.example.self.edu.firestorechatsample.KeyboardHeightProvider
import com.example.self.edu.firestorechatsample.R
import kotlinx.android.synthetic.main.activity_entory.*
class MainActivity : AppCompatActivity() {
private val keyboardHeightProvider: KeyboardHeightProvider by lazy {
KeyboardHeightProvider(this)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
root_container.post {
keyboardHeightProvider.start()
}
}
override fun onResume() {
super.onResume()
keyboardHeightProvider.listen {
// EditTextをズラしてる
ConstraintSet().run {
clone(root_container)
setMargin(R.id.message, ConstraintSet.BOTTOM, it)
applyTo(root_container)
}
}
}
override fun onPause() {
keyboardHeightProvider.stop()
super.onPause()
}
}
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:id="@+id/root_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.self.edu.firestorechatsample.view.EntryActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="わーい"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<EditText
android:id="@+id/message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="メッセージ"
android:lines="1"
android:maxLines="1"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/send"
app:layout_constraintHorizontal_chainStyle="spread_inside"/>
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="送信"
app:layout_constraintTop_toTopOf="@+id/message"
app:layout_constraintStart_toEndOf="@+id/message"
app:layout_constraintBottom_toBottomOf="@+id/message"
app:layout_constraintEnd_toEndOf="parent" />
</android.support.constraint.ConstraintLayout>
manifest.xml<activity android:name=".view.MainActivity"
android:windowSoftInputMode="adjustNothing">
아 맞다 맞다 맞다 난 Kotlin Android Extension 썼어.
Reference
이 문제에 관하여([초구어] adjust Nothing. 그런데 Software Keyboard는 뭘 하고 싶어요!때로 하는 일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/GengroHirano/items/f00821c9345cb0c261d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
나는 배경을 축소하고 싶지 않아!근데 키보드 위치가 위로 이동하고 싶어요!
이런 느낌이야.인스타그램 실시간으로 중계되는 댓글창 같은 거!나 그거 하고 싶어!
adjustnone 좋아요!
하지만 키보드가 나오지 않아서 뺄 수가 없어요.그리고 이 점을 감지하려면 View의 크기를 감시해야 한다. 사이즈가 바뀌면 키보드가 나온다!이렇게 판단하는 거 아니에요?
adjustnone에서 이런 사이즈 조정 이벤트를 해주시나요?그렇게 생각해요.
팝업 윈도 있잖아!
https://developer.android.com/reference/android/widget/PopupWindow.html
이 녀석은 Software Input Mode를 설정할 수 있어!
그러니까 액티비티와 다른 Software Input Mode를 설정할 수 있다는 거죠?그쵸?
즉
이런 느낌.
KeyboardHeightProvider.kt/**
* ソフトウェアキーボードの高さを計算するやつ
*/
typealias KeyBoardHeightChangedListener = (keyboardHeight: Int) -> Unit
@SuppressLint("InflateParams")
class KeyboardHeightProvider(private val activity: Activity) : PopupWindow() {
private val measurementView: View by lazy {
LayoutInflater.from(activity).inflate(R.layout.view_mesurement, null, false)
}
private val parentView: View by lazy {
activity.findViewById<View>(android.R.id.content)
}
private var listener: KeyBoardHeightChangedListener? = null
init {
softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE or
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
inputMethodMode = INPUT_METHOD_NEEDED
contentView = measurementView
width = 0
height = WindowManager.LayoutParams.MATCH_PARENT
measurementView.viewTreeObserver.addOnGlobalLayoutListener {
calcHeight()
}
}
fun listen(listener: KeyBoardHeightChangedListener) {
this.listener = listener
}
fun start() {
if (!isShowing && parentView.windowToken != null) {
showAtLocation(parentView, Gravity.NO_GRAVITY, 0, 0)
}
}
fun stop() {
dismiss()
listener = null
}
private fun calcHeight() {
val point = Point()
activity.windowManager.defaultDisplay.getSize(point)
val rect = Rect()
measurementView.getWindowVisibleDisplayFrame(rect)
listener?.invoke(point.y - rect.bottom)
}
}
view_mesurement.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="match_parent" />
이렇게 BA☆
MainActivity.ktimport android.os.Bundle
import android.support.constraint.ConstraintSet
import android.support.v7.app.AppCompatActivity
import com.example.self.edu.firestorechatsample.KeyboardHeightProvider
import com.example.self.edu.firestorechatsample.R
import kotlinx.android.synthetic.main.activity_entory.*
class MainActivity : AppCompatActivity() {
private val keyboardHeightProvider: KeyboardHeightProvider by lazy {
KeyboardHeightProvider(this)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
root_container.post {
keyboardHeightProvider.start()
}
}
override fun onResume() {
super.onResume()
keyboardHeightProvider.listen {
// EditTextをズラしてる
ConstraintSet().run {
clone(root_container)
setMargin(R.id.message, ConstraintSet.BOTTOM, it)
applyTo(root_container)
}
}
}
override fun onPause() {
keyboardHeightProvider.stop()
super.onPause()
}
}
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:id="@+id/root_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.self.edu.firestorechatsample.view.EntryActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="わーい"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<EditText
android:id="@+id/message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="メッセージ"
android:lines="1"
android:maxLines="1"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/send"
app:layout_constraintHorizontal_chainStyle="spread_inside"/>
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="送信"
app:layout_constraintTop_toTopOf="@+id/message"
app:layout_constraintStart_toEndOf="@+id/message"
app:layout_constraintBottom_toBottomOf="@+id/message"
app:layout_constraintEnd_toEndOf="parent" />
</android.support.constraint.ConstraintLayout>
manifest.xml<activity android:name=".view.MainActivity"
android:windowSoftInputMode="adjustNothing">
아 맞다 맞다 맞다 난 Kotlin Android Extension 썼어.
Reference
이 문제에 관하여([초구어] adjust Nothing. 그런데 Software Keyboard는 뭘 하고 싶어요!때로 하는 일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/GengroHirano/items/f00821c9345cb0c261d8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이런 느낌.
KeyboardHeightProvider.kt
/**
* ソフトウェアキーボードの高さを計算するやつ
*/
typealias KeyBoardHeightChangedListener = (keyboardHeight: Int) -> Unit
@SuppressLint("InflateParams")
class KeyboardHeightProvider(private val activity: Activity) : PopupWindow() {
private val measurementView: View by lazy {
LayoutInflater.from(activity).inflate(R.layout.view_mesurement, null, false)
}
private val parentView: View by lazy {
activity.findViewById<View>(android.R.id.content)
}
private var listener: KeyBoardHeightChangedListener? = null
init {
softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE or
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
inputMethodMode = INPUT_METHOD_NEEDED
contentView = measurementView
width = 0
height = WindowManager.LayoutParams.MATCH_PARENT
measurementView.viewTreeObserver.addOnGlobalLayoutListener {
calcHeight()
}
}
fun listen(listener: KeyBoardHeightChangedListener) {
this.listener = listener
}
fun start() {
if (!isShowing && parentView.windowToken != null) {
showAtLocation(parentView, Gravity.NO_GRAVITY, 0, 0)
}
}
fun stop() {
dismiss()
listener = null
}
private fun calcHeight() {
val point = Point()
activity.windowManager.defaultDisplay.getSize(point)
val rect = Rect()
measurementView.getWindowVisibleDisplayFrame(rect)
listener?.invoke(point.y - rect.bottom)
}
}
view_mesurement.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="0dp"
android:layout_height="match_parent" />
이렇게 BA☆MainActivity.kt
import android.os.Bundle
import android.support.constraint.ConstraintSet
import android.support.v7.app.AppCompatActivity
import com.example.self.edu.firestorechatsample.KeyboardHeightProvider
import com.example.self.edu.firestorechatsample.R
import kotlinx.android.synthetic.main.activity_entory.*
class MainActivity : AppCompatActivity() {
private val keyboardHeightProvider: KeyboardHeightProvider by lazy {
KeyboardHeightProvider(this)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
root_container.post {
keyboardHeightProvider.start()
}
}
override fun onResume() {
super.onResume()
keyboardHeightProvider.listen {
// EditTextをズラしてる
ConstraintSet().run {
clone(root_container)
setMargin(R.id.message, ConstraintSet.BOTTOM, it)
applyTo(root_container)
}
}
}
override fun onPause() {
keyboardHeightProvider.stop()
super.onPause()
}
}
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:id="@+id/root_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.self.edu.firestorechatsample.view.EntryActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="わーい"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<EditText
android:id="@+id/message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="メッセージ"
android:lines="1"
android:maxLines="1"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/send"
app:layout_constraintHorizontal_chainStyle="spread_inside"/>
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="送信"
app:layout_constraintTop_toTopOf="@+id/message"
app:layout_constraintStart_toEndOf="@+id/message"
app:layout_constraintBottom_toBottomOf="@+id/message"
app:layout_constraintEnd_toEndOf="parent" />
</android.support.constraint.ConstraintLayout>
manifest.xml<activity android:name=".view.MainActivity"
android:windowSoftInputMode="adjustNothing">
아 맞다 맞다 맞다 난 Kotlin Android Extension 썼어.
Reference
이 문제에 관하여([초구어] adjust Nothing. 그런데 Software Keyboard는 뭘 하고 싶어요!때로 하는 일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/GengroHirano/items/f00821c9345cb0c261d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)