Android 菜单项无法适应其父布局
Android menu Item can not be fit to its parent layout
当 action_layout_avl 布局调用时它的宽度适合父页面,但当它作为 actionLayout 包含在菜单中时,宽度刚好覆盖父页面的一半。
下面是菜单项:
<?xml version="1.0" encoding="utf-8"?>
<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"
android:layout_gravity="end"
android:gravity="end"
android:layoutDirection="rtl">
<item
android:id="@+id/map_services"
android:title="title">
<menu>
<group>
<item
android:id="@+id/switch_menu_item_poweroff"
android:title=""
app:actionLayout="@layout/action_layout_powwerroff
app:showAsAction="always" />
<item
android:id="@+id/switch_menu_item_avl"
android:title=""
app:actionLayout="@layout/action_layout_avl"
app:showAsAction="always"/>
<item
android:id="@+id/menu_item_routing"
android:icon="@drawable/route"
android:title="@string/label_routing"
app:showAsAction="ifRoom"/>
</group>
</menu>
</item>
</menu>
下面是action_layout_avl布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:textDirection="ltr"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="left">
<TextView
android:id="@+id/textavl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:gravity="left"
android:text="AVL"
app:layout_constraintVertical_weight=".6"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageButton
android:id="@+id/buttonAvlFilter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:src="@drawable/ic_settings_black_24dp"
app:layout_constraintLeft_toRightOf="@+id/switchAvlWS"
app:layout_constraintRight_toLeftOf="@+id/textavl"
app:layout_constraintTop_toTopOf="parent" />
<Switch
android:id="@+id/switchAvlWS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="خاموش"
android:textOn="روشن"
app:layout_constraintStart_toStartOf="parent"/>
</android.support.constraint.ConstraintLayout>
通常布局的行为在调用时不应该改变
inside menu item.what 可能是导致此问题的代码错误?
任何帮助都将不胜感激
终于解决了这个问题,这个问题是关于菜单项的标题设置,即使标题是空的。它默认分配一半 space 用于标题和图标,另一半 space 用于操作布局。所以,我只是删除标题并设置 tools:ignore="MenuTitle".
<group>
<item
android:id="@+id/switch_menu_item_poweroff"
app:actionLayout="@layout/action_layout_powwerroff"
app:showAsAction="always"
tools:ignore="MenuTitle" />
<item
android:id="@+id/switch_menu_item_avl"
app:actionLayout="@layout/action_layout_avl"
app:showAsAction="always"
tools:ignore="MenuTitle" />
<item
android:id="@+id/menu_item_routing"
android:icon="@drawable/route"
android:title="@string/label_routing"
app:showAsAction="ifRoom"
/>
</group>
当 action_layout_avl 布局调用时它的宽度适合父页面,但当它作为 actionLayout 包含在菜单中时,宽度刚好覆盖父页面的一半。
下面是菜单项:
<?xml version="1.0" encoding="utf-8"?>
<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"
android:layout_gravity="end"
android:gravity="end"
android:layoutDirection="rtl">
<item
android:id="@+id/map_services"
android:title="title">
<menu>
<group>
<item
android:id="@+id/switch_menu_item_poweroff"
android:title=""
app:actionLayout="@layout/action_layout_powwerroff
app:showAsAction="always" />
<item
android:id="@+id/switch_menu_item_avl"
android:title=""
app:actionLayout="@layout/action_layout_avl"
app:showAsAction="always"/>
<item
android:id="@+id/menu_item_routing"
android:icon="@drawable/route"
android:title="@string/label_routing"
app:showAsAction="ifRoom"/>
</group>
</menu>
</item>
</menu>
下面是action_layout_avl布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:textDirection="ltr"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="left">
<TextView
android:id="@+id/textavl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:gravity="left"
android:text="AVL"
app:layout_constraintVertical_weight=".6"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageButton
android:id="@+id/buttonAvlFilter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@null"
android:src="@drawable/ic_settings_black_24dp"
app:layout_constraintLeft_toRightOf="@+id/switchAvlWS"
app:layout_constraintRight_toLeftOf="@+id/textavl"
app:layout_constraintTop_toTopOf="parent" />
<Switch
android:id="@+id/switchAvlWS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="خاموش"
android:textOn="روشن"
app:layout_constraintStart_toStartOf="parent"/>
</android.support.constraint.ConstraintLayout>
通常布局的行为在调用时不应该改变 inside menu item.what 可能是导致此问题的代码错误? 任何帮助都将不胜感激
终于解决了这个问题,这个问题是关于菜单项的标题设置,即使标题是空的。它默认分配一半 space 用于标题和图标,另一半 space 用于操作布局。所以,我只是删除标题并设置 tools:ignore="MenuTitle".
<group>
<item
android:id="@+id/switch_menu_item_poweroff"
app:actionLayout="@layout/action_layout_powwerroff"
app:showAsAction="always"
tools:ignore="MenuTitle" />
<item
android:id="@+id/switch_menu_item_avl"
app:actionLayout="@layout/action_layout_avl"
app:showAsAction="always"
tools:ignore="MenuTitle" />
<item
android:id="@+id/menu_item_routing"
android:icon="@drawable/route"
android:title="@string/label_routing"
app:showAsAction="ifRoom"
/>
</group>