diff options
5 files changed, 92 insertions, 6 deletions
diff --git a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java index 6dff8b41eeb4..bf3e8d56b6bc 100644 --- a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java +++ b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java @@ -47,6 +47,7 @@ import com.android.internal.util.Preconditions; */ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKeyListener, PopupWindow.OnDismissListener { + private static final int ITEM_LAYOUT = com.android.internal.R.layout.cascading_menu_item_layout; @Retention(RetentionPolicy.SOURCE) @IntDef({HORIZ_POSITION_LEFT, HORIZ_POSITION_RIGHT}) @@ -348,7 +349,7 @@ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKey */ private void showMenu(@NonNull MenuBuilder menu) { final LayoutInflater inflater = LayoutInflater.from(mContext); - final MenuAdapter adapter = new MenuAdapter(menu, inflater, mOverflowOnly); + final MenuAdapter adapter = new MenuAdapter(menu, inflater, mOverflowOnly, ITEM_LAYOUT); // Apply "force show icon" setting. There are 3 cases: // (1) This is the top level menu and icon spacing is forced. Add spacing. diff --git a/core/java/com/android/internal/view/menu/MenuAdapter.java b/core/java/com/android/internal/view/menu/MenuAdapter.java index 2834d39a4f98..5bc981b4fc93 100644 --- a/core/java/com/android/internal/view/menu/MenuAdapter.java +++ b/core/java/com/android/internal/view/menu/MenuAdapter.java @@ -23,8 +23,6 @@ import android.widget.BaseAdapter; import java.util.ArrayList; public class MenuAdapter extends BaseAdapter { - static final int ITEM_LAYOUT = com.android.internal.R.layout.popup_menu_item_layout; - MenuBuilder mAdapterMenu; private int mExpandedIndex = -1; @@ -32,11 +30,14 @@ public class MenuAdapter extends BaseAdapter { private boolean mForceShowIcon; private final boolean mOverflowOnly; private final LayoutInflater mInflater; + private final int mItemLayoutRes; - public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly) { + public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly, + int itemLayoutRes) { mOverflowOnly = overflowOnly; mInflater = inflater; mAdapterMenu = menu; + mItemLayoutRes = itemLayoutRes; findExpandedIndex(); } @@ -78,7 +79,7 @@ public class MenuAdapter extends BaseAdapter { public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { - convertView = mInflater.inflate(ITEM_LAYOUT, parent, false); + convertView = mInflater.inflate(mItemLayoutRes, parent, false); } final int currGroupId = getItem(position).getGroupId(); diff --git a/core/java/com/android/internal/view/menu/StandardMenuPopup.java b/core/java/com/android/internal/view/menu/StandardMenuPopup.java index 445379b1d9f4..d618f6758faa 100644 --- a/core/java/com/android/internal/view/menu/StandardMenuPopup.java +++ b/core/java/com/android/internal/view/menu/StandardMenuPopup.java @@ -43,6 +43,7 @@ import com.android.internal.util.Preconditions; */ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, OnItemClickListener, MenuPresenter, OnKeyListener { + private static final int ITEM_LAYOUT = com.android.internal.R.layout.popup_menu_item_layout; private final Context mContext; @@ -116,7 +117,7 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On mMenu = menu; mOverflowOnly = overflowOnly; final LayoutInflater inflater = LayoutInflater.from(context); - mAdapter = new MenuAdapter(menu, inflater, mOverflowOnly); + mAdapter = new MenuAdapter(menu, inflater, mOverflowOnly, ITEM_LAYOUT); mPopupStyleAttr = popupStyleAttr; mPopupStyleRes = popupStyleRes; diff --git a/core/res/res/layout/cascading_menu_item_layout.xml b/core/res/res/layout/cascading_menu_item_layout.xml new file mode 100644 index 000000000000..7d186359f736 --- /dev/null +++ b/core/res/res/layout/cascading_menu_item_layout.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- Keep in sync with popup_menu_item_layout.xml (which only differs in the title and shortcut + position). --> +<com.android.internal.view.menu.ListMenuItemView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minWidth="196dip" + android:orientation="vertical" > + + <ImageView + android:id="@+id/group_divider" + android:layout_width="match_parent" + android:layout_height="1dip" + android:layout_marginTop="4dip" + android:layout_marginBottom="4dip" + android:background="@drawable/list_divider_material" /> + + <LinearLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="?attr/dropdownListPreferredItemHeight" + android:paddingEnd="16dip" + android:duplicateParentState="true" > + + <!-- Icon will be inserted here. --> + + <TextView + android:id="@+id/title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginStart="16dip" + android:textAppearance="?attr/textAppearanceLargePopupMenu" + android:singleLine="true" + android:duplicateParentState="true" + android:textAlignment="viewStart" /> + + <Space + android:layout_width="0dip" + android:layout_height="1dip" + android:layout_weight="1"/> + + <TextView + android:id="@+id/shortcut" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginStart="16dip" + android:textAppearance="?attr/textAppearanceSmallPopupMenu" + android:singleLine="true" + android:duplicateParentState="true" + android:textAlignment="viewEnd" /> + + <ImageView + android:id="@+id/submenuarrow" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginStart="8dp" + android:scaleType="center" + android:visibility="gone" /> + + <!-- Checkbox, and/or radio button will be inserted here. --> + + </LinearLayout> + +</com.android.internal.view.menu.ListMenuItemView> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index fa0fb9461ef0..97116f54e7c9 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1421,6 +1421,7 @@ <java-symbol type="layout" name="action_menu_layout" /> <java-symbol type="layout" name="action_mode_close_item" /> <java-symbol type="layout" name="alert_dialog" /> + <java-symbol type="layout" name="cascading_menu_item_layout" /> <java-symbol type="layout" name="choose_account" /> <java-symbol type="layout" name="choose_account_row" /> <java-symbol type="layout" name="choose_account_type" /> |