Как добавить меню переполнения на панель инструментов?
Я пытаюсь использовать Android ActionBar
в своем приложении, и у меня есть опция, которая скрыта в меню переполнения.
Там много документации, но это сбивает с толку, потому что большая часть из них относится только к очень старым версиям Android, и когда вы пытаетесь применить те же концепции, они больше не работают или работают по-другому.
Это в макете Activity
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:titleTextColor="@android:color/white"
android:background="@color/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
И это в моем методе Activity
onCreate()
// sets up activity toolbar
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
myToolbar.showOverflowMenu();
myToolbar.setTitleTextColor(R.color.lightPrimaryText);
Я также попытался раздуть файл xml в меню из onCreateOptionsMenu()
, но это также не дало мне результатов, которые я хотел.
Ответы
Ответ 1
Определите Menu
для Toolbar
в папке ресурса res/menu, например:
toolbar_menu.xml
<?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"
tools:context=".activity.MainActivity">
<item
android:id="@+id/action_sign_out"
android:title="@string/toolbar_sign_out"
app:showAsAction="never"/>
</menu>
Настройка app:showAsAction="never"
гарантирует, что этот MenuItem
не будет отображаться в Toolbar
, но вместо этого помещается в меню переполнения.
Тема вашего Activity
должна быть (или получена) одной из тем NoActionBar
AppCompat (например, Theme.AppCompat.Light.NoActionBar
).
В Activity
настройте свой Toolbar
:
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
И переопределить onCreateOptionsMenu()
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
return true;
}
Вы можете переопределить onOptionsItemSelected()
, чтобы определить поведение onClick вашего MenuItem
(s):
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_sign_out: {
// do your sign-out stuff
break;
}
// case blocks for other MenuItems (if any)
}
return false;
}
Ответ 2
в файле манифеста объявить
android:theme="@style/AppTheme.NoActionBar"
вот так:
<activity
android:name=".ActivityName"
android:label="@string/label"
android:theme="@style/AppTheme.NoActionBar" />
и добавьте это в свой стиль:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
и назовите это в Activity onCreate():
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
переопределить этот метод в активности:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.product_list, menu);
//U can find item set icon and stuff...
MenuItem item= menu.findItem(R.id.action_search);
return true;
}
и объявите свое меню, как это для меню переполнения:
<?xml version="1.0" encoding="utf-8"?>
<menu >
<group>
<item
android:id="@+id/sign_out"
android:title="@string/sign_out" />
<item
android:id="@+id/about"
android:title="@string/about" />
</group>
</menu>
и для выбора элемента управления вызовите это
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.sign_out:
//do stuff
break;
}
return super.onOptionsItemSelected(item);
}
сделано:)
Ответ 3
Просто сделайте. Скопируйте этот код в свой файл MainActivet`
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main2, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Group gp=(Group)findViewById(R.id.order);
return true;
}
return super.onOptionsItemSelected(item);
}`
Теперь создайте каталог для названия меню для этого в Android_Studio- > app Folder- > Right_Click- > New- > Directory- > Enter name menu now Создайте XML файл там с именем menu2.xml
и прошёл этот код в файле menu2.xml
<?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">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"
android:icon="@android:drawable/ic_input_add"
/>
</menu>
если какой-либо запрос Пожалуйста, напишите мне