Android
Meny
Sök…
Syntax
- inflater.inflate (R.menu.your_xml_file, meny);
parametrar
Parameter | Beskrivning |
---|---|
inflate(int menuRes, Menu menu) | Blås upp en menyhierarki från den angivna XML-resursen. |
getMenuInflater () | Returnerar en MenuInflater med detta sammanhang. |
onCreateOptionsMenu (Menu menu) | Initiera innehållet i Aktivitetens meny med standardalternativ. Du bör placera dina menyalternativ i menyn. |
onOptionsItemSelected (MenuItem item) | Den här metoden kallas varje gång ett objekt i alternativmenyn väljs |
Anmärkningar
Läs detta om du vill veta mer om menyer . Hoppas det hjälper!
Alternativmeny med avdelare
I Android finns en standardalternativmeny, som kan ta ett antal alternativ. Om ett större antal alternativ måste visas är det vettigt att gruppera dessa alternativ för att upprätthålla tydligheten. Alternativ kan grupperas genom att placera avdelare (dvs. horisontella linjer) mellan dem. För att möjliggöra delare kan följande tema användas:
<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>
Genom att ändra temat kan delare läggas till i en meny.
Använd anpassat teckensnitt på Meny
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);
}
och sedan i aktiviteten:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
applyFontToMenu(menu,this);
return true;
}
Skapa en meny i en aktivitet
För att definiera din egen meny, skapa en XML-fil i projektets res/menu/
katalog och bygga menyn med följande element:
-
<menu>
: Definierar en meny som innehåller alla menyalternativ. -
<item>
: Skapar ett MenuItem, som representerar ett enda objekt i en meny. Vi kan också skapa ett kapslad element för att skapa en undermeny.
Steg 1:
Skapa din egen xml-fil på följande sätt: I 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>
Steg 2:
För att ange alternativmenyn, åsidosätter onCreateOptionsMenu()
i din aktivitet .
På den här metoden kan du blåsa upp din menyresurs (definierad i din XML-fil, dvs. res/menu/main_menu.xml
)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
När användaren väljer ett objekt från alternativmenyn, anropar systemet din aktivitets åsidosatta onOptionsItemSelected()
.
- Den här metoden passerar det valda MenuItem.
- Du kan identifiera objektet genom att ringa
getItemId()
, vilket returnerar det unika ID för menyposten (definierat avandroid:id attribute
i menyresursen -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);
}
}
Avslutar!
Din Activity
ska se ut nedan:
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);
}
}
}