Android
Menu
Szukaj…
Składnia
- inflater.inflate (R.menu.your_xml_file, menu);
Parametry
Parametr | Opis |
---|---|
inflate(int menuRes, Menu menu) | Napompuj hierarchię menu z określonego zasobu XML. |
getMenuInflater () | Zwraca MenuInflater w tym kontekście. |
onCreateOptionsMenu (Menu menu) | Zainicjuj zawartość menu standardowych opcji działania. Powinieneś umieścić swoje pozycje menu w menu. |
onOptionsItemSelected (MenuItem item) | Ta metoda jest wywoływana za każdym razem, gdy zostanie wybrany element w menu opcji |
Uwagi
Aby dowiedzieć się więcej o menu , przeczytaj to . Mam nadzieję, że to pomoże!
Menu opcji z przekładkami
W Androidzie jest domyślne menu opcji, które może mieć wiele opcji. Jeśli konieczne jest wyświetlenie większej liczby opcji, sensowne jest zgrupowanie tych opcji w celu zachowania przejrzystości. Opcje można pogrupować, umieszczając między nimi przekładki (tj. Linie poziome). Aby umożliwić dzielniki, można zastosować następujący motyw:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="android:divider">@color/black</item>
<item name="android:dividerHeight">1dp</item>
</style>
Zmieniając motyw, można dodać dzielniki do menu.
Zastosuj niestandardową czcionkę do Menu
public static void applyFontToMenu(Menu m, Context mContext){
for(int i=0;i<m.size();i++) {
applyFontToMenuItem(m.getItem(i),mContext);
}
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
if(mi.hasSubMenu())
for(int i=0;i<mi.getSubMenu().size();i++) {
applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
}
Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
SpannableString mNewTitle = new SpannableString(mi.getTitle());
mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mi.setTitle(mNewTitle);
}
a następnie w działaniu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
applyFontToMenu(menu,this);
return true;
}
Tworzenie menu w działaniu
Aby zdefiniować własne menu, utwórz plik XML w katalogu res/menu/
i zbuduj menu z następującymi elementami:
-
<menu>
: definiuje menu, w którym przechowywane są wszystkie elementy menu. -
<item>
: Tworzy element menu, który reprezentuje pojedynczy element w menu. Możemy również utworzyć element zagnieżdżony w celu utworzenia podmenu.
Krok 1:
Utwórz własny plik xml w następujący sposób: W res/menu/main_menu.xml
:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/aboutMenu"
android:title="About" />
<item
android:id="@+id/helpMenu"
android:title="Help" />
<item
android:id="@+id/signOutMenu"
android:title="Sign Out" />
</menu>
Krok 2:
Aby określić opcje menu, zastępują onCreateOptionsMenu()
w swojej działalności.
W tej metodzie możesz napompować zasoby menu (zdefiniowane w pliku XML, tj. res/menu/main_menu.xml
)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
Gdy użytkownik wybierze element z menu opcji, system onOptionsItemSelected()
przesłoniętą onOptionsItemSelected()
działania onOptionsItemSelected()
.
- Ta metoda przekazuje wybrany element menu.
- Możesz zidentyfikować element, wywołując
getItemId()
, który zwraca unikalny identyfikator elementu menu (zdefiniowany przezandroid:id attribute
w zasobie menu -res/menu/main_menu.xml
) * /
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "Clicked on Sign Out!");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Podsumowując!
Twój kod Activity
powinien wyglądać jak poniżej:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "mytag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "User signed out");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}