How to turn off keyboard icon at TimePicker?

寵の児 提交于 2019-12-19 04:16:08

问题


I have a timepicker, everything works well but the problem is that I can't make it look like designer wants. For now it looks like this:

I need to hide this keyboard icon under the buttons. How can I do it? It's just a prototype, so here's only its xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:tag="ww">

  <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Time"
    android:textAppearance="?android:attr/textAppearanceLarge" />

  <TimePicker
    android:id="@+id/timePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:amPmBackgroundColor="#6400AA"
    android:numbersSelectorColor="#6400AA" />

  <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end"
    android:orientation="horizontal">

    <Button
      android:id="@+id/button2"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="Cancel"
      android:textColor="#6400AA" />

    <Button
      android:id="@+id/button1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="OK"
      android:textColor="#6400AA" />

  </LinearLayout>

</LinearLayout>

回答1:


As far as I can tell you cannot remove this icon, it is part of the UI on Android O.

The icon is there to make the manual editing of the time more apparent because in previous versions it was not obvious that you could click on the time and change it via keyboard




回答2:


I just inspected the hierarchy in layout inspector and found that keyboard icon. For portrait and landscape hierarchy is different, so we have a orientation check for this and also have OS check from Oreo(from Oreo only this icon is availble), I tried this code and it is working fine. PS: Kotlin Code

    fun hideKeyboardInputInTimePicker(orientation: Int, timePicker: TimePicker)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
            try
            {
                if (orientation == Configuration.ORIENTATION_PORTRAIT)
                {
                    ((timePicker.getChildAt(0) as LinearLayout).getChildAt(4) as LinearLayout).getChildAt(0).visibility = View.GONE
                }
                else
                {
                    (((timePicker.getChildAt(0) as LinearLayout).getChildAt(2) as LinearLayout).getChildAt(2) as LinearLayout).getChildAt(0).visibility = View.GONE
                }
            }
            catch (ex: Exception)
            {
            }

        }
    }

Call like this

hideKeyboardInputInTimePicker(this.resources.configuration.orientation, startTimePicker)



回答3:


Try to use:

timePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);

You also can use android:descendantFocusability="blocksDescendants" in xml.




回答4:


Android N :

Date/Time picker come with rolling clock and that improved interaction with users to make entry but that made minute selection more tedious .Rolling clock sucks big time in 24h mode and while using thumb it was impossible to see exact time .

Android O :

Date/Time picker (in Calendar, Clock, etc) gets one small icon(manual entry) at the bottom left: a keyboard. Tapping it switches to text-based entry where you can manually type in the exact precise time.




回答5:


Okay this is my solution. After inspecting the Layout I found that the keyboard is AppCompatImageButton. So you just do a recursion over the TimePicker which is a Viewgroup. So you can call it for example like this:

private fun initTimePicker() {
    timePicker.setIs24HourView(true)
    setImageButtonToGone(timePicker)
}

private fun setImageButtonToGone(viewGroup: ViewGroup) {
    for (i in 0 until viewGroup.childCount) {
        val child = viewGroup.getChildAt(i)
        if (child is LinearLayout) {
            setImageButtonToGone(child)
        } else if (child is AppCompatImageButton) {
            child.visibility = View.GONE
        }
    }
}

And you will get the desired layout.

WARNING!!! This depends heavely that the keyboard button is the only AppCompatImageButton if they change the XML of TimePicker this will not work properly anymore.



来源:https://stackoverflow.com/questions/46790910/how-to-turn-off-keyboard-icon-at-timepicker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!