如何在同一个 activity 中更改不同工具栏的菜单项?
How can I change menu items of different toolbars in the same activity?
我正在尝试更改选项菜单项上文本的区域设置。我一直在尝试在 onPrepareOptionsMenu
中执行此操作。我可以从资源中获取正确的语言环境文本,当我打印出 setTitle
的结果时,它看起来是正确的。但是,在应用程序本身上,旧标题仍然存在。我不知道我遗漏了什么任何帮助表示赞赏。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem toggle = menu.findItem(R.id.toggleType);
MenuItem options = menu.findItem(R.id.options);
MenuItem exit = menu.findItem(R.id.exit);
String new1 = context.getResources().getString(R.string.satellite);
String new2 = context.getResources().getString(R.string.options);
String new3 = context.getResources().getString(R.string.exit);
toggle.setTitle(new1);
options.setTitle(new2);
exit.setTitle(new3);
return super.onPrepareOptionsMenu(menu);
}
在main_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" >
<item
android:id="@+id/toggleType"
android:title="@string/satellite"
app:showAsAction="never" />
<item
android:id="@+id/options"
android:title="@string/options"
app:showAsAction="never" />
<item
android:id="@+id/exit"
android:title="@string/exit"
app:showAsAction="never" />
</menu>
编辑:
我想我意识到了这个问题,但我仍然没有解决办法。问题是我正在使用 TabHost
并且我的布局中有三个选项卡,所以为了在所有三个选项卡上显示工具栏同时将 tabwidget 保持在屏幕底部,我创建了三个工具栏在每个选项卡中。因此,当我更改这些项目的标题时,只会更新最后一个工具栏的菜单项。有什么方法可以更改其他工具栏菜单项的标题吗?
这是代码。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost 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"
android:id="@+id/tabHost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@color/colorAccent"
android:layout_alignParentBottom="true"></TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="50dp">
<!-- TAB 1 -->
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<!-- SOME CONTENT HERE -->
</LinearLayout>
<!-- TAB 2 -->
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#da8200"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<!-- SOME CONTENT HERE -->
</LinearLayout>
<!-- TAB 3 -->
<LinearLayout
android:id="@+id/tab3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:background="@drawable/gradient"
android:layout_height="fill_parent">
<!-- SOME CONTENT HERE -->
</LinearLayout>
</LinearLayout>
</FrameLayout>
</RelativeLayout>
</TabHost>
MainActivity.java -> onCreate()
:
Toolbar toolbar1 = findViewById(R.id.toolbar1);
Toolbar toolbar2 = findViewById(R.id.toolbar2);
Toolbar toolbar3 = findViewById(R.id.toolbar3);
setSupportActionBar(toolbar1);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("");
}
setSupportActionBar(toolbar2);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("");
}
setSupportActionBar(toolbar3);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("");
}
toolbar1.inflateMenu(R.menu.main_menu);
toolbar2.inflateMenu(R.menu.main_menu);
toolbar3.inflateMenu(R.menu.main_menu);
因为我是个笨蛋,所以我想不出更改页边距。无论如何,这是一个在所有选项卡上共享工具栏的有效实现。
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@color/colorAccent"
android:layout_alignParentBottom="true"></TabWidget>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="?attr/colorPrimary"
android:gravity="top"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="50dp"
android:layout_marginTop="50dp">
我正在尝试更改选项菜单项上文本的区域设置。我一直在尝试在 onPrepareOptionsMenu
中执行此操作。我可以从资源中获取正确的语言环境文本,当我打印出 setTitle
的结果时,它看起来是正确的。但是,在应用程序本身上,旧标题仍然存在。我不知道我遗漏了什么任何帮助表示赞赏。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem toggle = menu.findItem(R.id.toggleType);
MenuItem options = menu.findItem(R.id.options);
MenuItem exit = menu.findItem(R.id.exit);
String new1 = context.getResources().getString(R.string.satellite);
String new2 = context.getResources().getString(R.string.options);
String new3 = context.getResources().getString(R.string.exit);
toggle.setTitle(new1);
options.setTitle(new2);
exit.setTitle(new3);
return super.onPrepareOptionsMenu(menu);
}
在main_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" >
<item
android:id="@+id/toggleType"
android:title="@string/satellite"
app:showAsAction="never" />
<item
android:id="@+id/options"
android:title="@string/options"
app:showAsAction="never" />
<item
android:id="@+id/exit"
android:title="@string/exit"
app:showAsAction="never" />
</menu>
编辑:
我想我意识到了这个问题,但我仍然没有解决办法。问题是我正在使用 TabHost
并且我的布局中有三个选项卡,所以为了在所有三个选项卡上显示工具栏同时将 tabwidget 保持在屏幕底部,我创建了三个工具栏在每个选项卡中。因此,当我更改这些项目的标题时,只会更新最后一个工具栏的菜单项。有什么方法可以更改其他工具栏菜单项的标题吗?
这是代码。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost 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"
android:id="@+id/tabHost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@color/colorAccent"
android:layout_alignParentBottom="true"></TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="50dp">
<!-- TAB 1 -->
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<!-- SOME CONTENT HERE -->
</LinearLayout>
<!-- TAB 2 -->
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#da8200"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<!-- SOME CONTENT HERE -->
</LinearLayout>
<!-- TAB 3 -->
<LinearLayout
android:id="@+id/tab3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:background="@drawable/gradient"
android:layout_height="fill_parent">
<!-- SOME CONTENT HERE -->
</LinearLayout>
</LinearLayout>
</FrameLayout>
</RelativeLayout>
</TabHost>
MainActivity.java -> onCreate()
:
Toolbar toolbar1 = findViewById(R.id.toolbar1);
Toolbar toolbar2 = findViewById(R.id.toolbar2);
Toolbar toolbar3 = findViewById(R.id.toolbar3);
setSupportActionBar(toolbar1);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("");
}
setSupportActionBar(toolbar2);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("");
}
setSupportActionBar(toolbar3);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("");
}
toolbar1.inflateMenu(R.menu.main_menu);
toolbar2.inflateMenu(R.menu.main_menu);
toolbar3.inflateMenu(R.menu.main_menu);
因为我是个笨蛋,所以我想不出更改页边距。无论如何,这是一个在所有选项卡上共享工具栏的有效实现。
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@color/colorAccent"
android:layout_alignParentBottom="true"></TabWidget>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="?attr/colorPrimary"
android:gravity="top"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="50dp"
android:layout_marginTop="50dp">