Android Switch 的 Toolbar actionLayout 导致按下菜单时文本跳转
Android Toolbar actionLayout of Switch causes text to jump when menu is pressed
请参考我的项目:
https://github.com/paulpv/ToolbarSwitch
我正在为 Android 工具栏(又名:新 ActionBar)设计一个简单的自定义布局。
这个简单的控件向工具栏添加了一个开关,可以在此处以洋红色突出显示:
我的问题是,当按下溢出菜单时,Switch 的文本会立即跳到工具栏的顶部,并在您关闭溢出菜单时保持该状态:
类似的事情发生在横向(细微差别是溢出菜单弹出窗口没有任何顶部填充)。
我可以对菜单项的 actionLayout 做些什么来防止文本跳转?
menu/menu_main.xml
<menu 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"
tools:context=".MainActivity">
<item
android:id="@+id/action_switch"
android:title="@string/action_switch"
app:actionLayout="@layout/toolbar_switch"
app:showAsAction="always" />
<item
android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never" />
</menu>
layout/toolbar_switch.xml
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_switch"
android:text="@string/action_switch"
android:switchPadding="10dp"
android:background="#ff00ff"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
显然,我想我可以创建两个视图,一个 TextView 和一个 Switch,我在其中分别设置 TextView 上的文本,而不是直接设置 Switch 的文本...但我更愿意设置直接在 Switch 上输入文字。
我还有几个问题:
- 当使用 ActionBarActivity 并展开工具栏菜单时,为什么 onResume 在 onCreateOptionsMenu 之前调用?
- 反之,与#1相同的情况,为什么在onCreate和onResume之间没有调用onCreateOptionsMenu?
- 在横向模式下,标题文字大小明显变小;这是预期和可取的吗?
- 如何设置横向标题文字大小与纵向文字大小相同?
谢谢!
PV
我放弃了使用 Switch 或 SwitchCompat 控件的内置文本字段的尝试。
我最终提供了一个带有单独 TextView 字段的布局:
layout/toolbar_switch.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/action_switch_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="10dp"
android:paddingRight="10dp"
android:text="Switch"
android:textAllCaps="true"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry"/>
<android.support.v7.widget.SwitchCompat
android:id="@+id/action_switch_control"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
我按照你的代码将 Switch 添加到我的操作栏,我能够通过将 Switch 的宽度设置为 wrap_content 来解决你的 "jumping text" 问题,如下所示:
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_switch"
android:text="@string/action_switch"
android:switchPadding="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
请参考我的项目: https://github.com/paulpv/ToolbarSwitch
我正在为 Android 工具栏(又名:新 ActionBar)设计一个简单的自定义布局。 这个简单的控件向工具栏添加了一个开关,可以在此处以洋红色突出显示:
我的问题是,当按下溢出菜单时,Switch 的文本会立即跳到工具栏的顶部,并在您关闭溢出菜单时保持该状态:
类似的事情发生在横向(细微差别是溢出菜单弹出窗口没有任何顶部填充)。
我可以对菜单项的 actionLayout 做些什么来防止文本跳转?
menu/menu_main.xml
<menu 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"
tools:context=".MainActivity">
<item
android:id="@+id/action_switch"
android:title="@string/action_switch"
app:actionLayout="@layout/toolbar_switch"
app:showAsAction="always" />
<item
android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never" />
</menu>
layout/toolbar_switch.xml
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_switch"
android:text="@string/action_switch"
android:switchPadding="10dp"
android:background="#ff00ff"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
显然,我想我可以创建两个视图,一个 TextView 和一个 Switch,我在其中分别设置 TextView 上的文本,而不是直接设置 Switch 的文本...但我更愿意设置直接在 Switch 上输入文字。
我还有几个问题:
- 当使用 ActionBarActivity 并展开工具栏菜单时,为什么 onResume 在 onCreateOptionsMenu 之前调用?
- 反之,与#1相同的情况,为什么在onCreate和onResume之间没有调用onCreateOptionsMenu?
- 在横向模式下,标题文字大小明显变小;这是预期和可取的吗?
- 如何设置横向标题文字大小与纵向文字大小相同?
谢谢!
PV
我放弃了使用 Switch 或 SwitchCompat 控件的内置文本字段的尝试。 我最终提供了一个带有单独 TextView 字段的布局:
layout/toolbar_switch.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/action_switch_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="10dp"
android:paddingRight="10dp"
android:text="Switch"
android:textAllCaps="true"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry"/>
<android.support.v7.widget.SwitchCompat
android:id="@+id/action_switch_control"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
我按照你的代码将 Switch 添加到我的操作栏,我能够通过将 Switch 的宽度设置为 wrap_content 来解决你的 "jumping text" 问题,如下所示:
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_switch"
android:text="@string/action_switch"
android:switchPadding="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>