Пункты в HTML 5, относящиеся к последнему рабочему проекту, определяются как элементы потока, которые могут содержать только фразирующие элементы. Списки также определяются как элементы потока и не могут быть заключены в параграфы. Что бы вы ни думали, определение параграфа должно быть, это формальное определение термина в HTML, и я думаю, что это вряд ли изменится.
Есть две возможности, которые вы могли бы рассмотреть, помимо двух вы упомянутый:
section
, nav
, header
, footer
или article
. p – ol – p
с помощью div
по вашему выбору, который применяет общее форматирование к набору. Что касается div
, спецификатор HTML 5 явно рекомендует, чтобы он был элементом «последней инстанции», поскольку он не несет семантического значения в том, как это делают другие элементы HTML, и может быть не таким удобным для пользователей в альтернативных пользовательских агентах. Следуя этим советам, я бы не использовал div
за счет p
для основного текста, если семантика важна для вас. Однако, это может быть полезно, чтобы убедиться, что использование нескольких абзацев не слишком визуально изменено.
, потому что:
настолько предполагающий это - IME, является всегда неправильным - не предполагают быть уверенным!!!
@kevin-du мастер лучшего решения теперь как его запрос IMM для высоты IME - но поскольку это сказало, что методом является скрытый API, настолько использующий, это могло быть опасно в способе получить неправильные "ложные отрицательные результаты" - несправедливостью dev использование.
Что касается этот ответ @TacB0sS я разработал один класс в Kotlin. Надежда это будет полезно. Сообщите мне, требуется ли некоторое улучшение.
class KeyboardVisibilityObserver(val layRootContainer: View?, val keyboardVisibilityListener: KeyboardVisibilityListener?) {
var isKeyboardOpen = false
private set
private var keyBoardObserver = object : ViewTreeObserver.OnGlobalLayoutListener {
private val DefaultKeyboardDP = 100
// Lollipop includes button bar in the root. Add height of button bar (48dp) to maxDiff
private val EstimatedKeyboardDP = DefaultKeyboardDP + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 48 else 0
private val r = Rect()
override fun onGlobalLayout() {
if (layRootContainer != null) {
// Convert the dp to pixels.
val estimatedKeyboardHeight = TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_DIP, EstimatedKeyboardDP.toFloat(), layRootContainer.resources.displayMetrics).toInt()
// Conclude whether the keyboard is shown or not.
layRootContainer.getWindowVisibleDisplayFrame(r)
val heightDiff = layRootContainer.rootView.height - (r.bottom - r.top)
val isShown = heightDiff >= estimatedKeyboardHeight
if (isShown == isKeyboardOpen) {
// Log.d("Keyboard state", "Ignoring global layout change...");
return
}
isKeyboardOpen = isShown
keyboardVisibilityListener?.onKeyboardVisibilityChanged(isKeyboardOpen)
}
}
}
init {
layRootContainer?.viewTreeObserver?.addOnGlobalLayoutListener(keyBoardObserver)
}
// call this in onDestroy
fun removeObserver(){
layRootContainer?.viewTreeObserver?.removeOnGlobalLayoutListener(keyBoardObserver)
}
interface KeyboardVisibilityListener {
fun onKeyboardVisibilityChanged(isKeyboardOpen: Boolean)
}
}
Вход MethodManager имеет информацию о программной клавиатуре. Вы получаете его от деятельности через:
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
Вы можете играть с этим, чтобы увидеть, что он может вам сказать. Вы можете использовать его, чтобы показать или скрыть мягкий вход ...