Java tutorial
/* * This is the source code of Telegram for Android v. 3.x.x. * It is licensed under GNU GPL v. 2 or later. * You should have received a copy of the license in this archive (see LICENSE). * * Copyright Nikolai Kudashov, 2013-2016. */ package org.telegram.ui.ActionBar; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.R; import org.telegram.ui.Components.LayoutHelper; public class ActionBarMenu extends LinearLayout { protected ActionBar parentActionBar; public ActionBarMenu(Context context, ActionBar layer) { super(context); setOrientation(LinearLayout.HORIZONTAL); parentActionBar = layer; } public ActionBarMenu(Context context) { super(context); } public View addItemResource(int id, int resourceId) { LayoutInflater li = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = li.inflate(resourceId, null); view.setTag(id); addView(view); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view.getLayoutParams(); layoutParams.height = LayoutHelper.MATCH_PARENT; view.setBackgroundDrawable(Theme.createBarSelectorDrawable(parentActionBar.itemsBackgroundColor)); view.setLayoutParams(layoutParams); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { onItemClick((Integer) view.getTag()); } }); return view; } public ActionBarMenuItem addItem(int id, Drawable drawable) { return addItem(id, 0, parentActionBar.itemsBackgroundColor, drawable, AndroidUtilities.dp(48)); } public ActionBarMenuItem addItem(int id, int icon) { return addItem(id, icon, parentActionBar.itemsBackgroundColor); } public ActionBarMenuItem addItem(int id, int icon, int backgroundColor) { return addItem(id, icon, backgroundColor, null, AndroidUtilities.dp(48)); } public ActionBarMenuItem addItemWithWidth(int id, int icon, int width) { return addItem(id, icon, parentActionBar.itemsBackgroundColor, null, width); } public ActionBarMenuItem addItem(int id, int icon, int backgroundColor, Drawable drawable, int width) { ActionBarMenuItem menuItem = new ActionBarMenuItem(getContext(), this, backgroundColor); menuItem.setTag(id); if (drawable != null) { menuItem.iconView.setImageDrawable(drawable); } else { menuItem.iconView.setImageResource(icon); if (icon == R.drawable.ic_ab_reply || icon == R.drawable.ic_ab_fwd_copy || icon == R.drawable.ic_ab_fwd_forward || icon == R.drawable.ic_ab_fwd_delete) { menuItem.iconView.setImageTintList( ColorStateList.valueOf(ContextCompat.getColor(getContext(), R.color.secondary_text))); } } addView(menuItem); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) menuItem.getLayoutParams(); layoutParams.height = LayoutHelper.MATCH_PARENT; layoutParams.width = width; menuItem.setLayoutParams(layoutParams); menuItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.hasSubMenu()) { if (parentActionBar.actionBarMenuOnItemClick.canOpenMenu()) { item.toggleSubMenu(); } } else if (item.isSearchField()) { parentActionBar.onSearchFieldVisibilityChanged(item.toggleSearch(true)); } else { onItemClick((Integer) view.getTag()); } } }); return menuItem; } public void hideAllPopupMenus() { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ((ActionBarMenuItem) view).closeSubMenu(); } } } public void onItemClick(int id) { if (parentActionBar.actionBarMenuOnItemClick != null) { parentActionBar.actionBarMenuOnItemClick.onItemClick(id); } } public void clearItems() { removeAllViews(); } public void onMenuButtonPressed() { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.getVisibility() != VISIBLE) { continue; } if (item.hasSubMenu()) { item.toggleSubMenu(); break; } else if (item.overrideMenuClick) { onItemClick((Integer) item.getTag()); break; } } } } public void closeSearchField() { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.isSearchField()) { parentActionBar.onSearchFieldVisibilityChanged(item.toggleSearch(false)); break; } } } } public void openSearchField(boolean toggle, String text) { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.isSearchField()) { if (toggle) { parentActionBar.onSearchFieldVisibilityChanged(item.toggleSearch(true)); } item.getSearchField().setText(text); item.getSearchField().setSelection(text.length()); break; } } } } public ActionBarMenuItem getItem(int id) { View v = findViewWithTag(id); if (v instanceof ActionBarMenuItem) { return (ActionBarMenuItem) v; } return null; } }