我想将我的工具栏设置为操作栏,但由于您的工具栏是布局元素,因此它必须位于您的布局中。现在我的布局在我的片段中。
我在布局中添加了工具栏,并在片段中调用它:
//Toolbar
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
它有效,因为我可以设置标题等,但现在我希望它作为操作栏反应,因为我实际上想要它。 setDisplayHomeAsUpEnabled(true)
为此,我必须将工具栏更改为操作栏:
setSupportActionBar(toolbar);
这在我的片段中不起作用......
任何人都可以帮助我让我的工具栏作为片段中的操作栏工作。
现在
ActionBarActivity
已被弃用,因此
您需要先将活动从 getActivity()
转换为 AppCompatActivity
。这是一个例子:
((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle();
你必须投射它的原因是因为
getActivity()
返回一个 FragmentActivity
并且你需要一个 AppCompatActivity
尝试:
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
ActionBar 是一个 Activity 属性。如果要将给定片段中的工具栏设置为所属 Activity 的 ActionBar,则获取拥有该片段的 Activity (
Fragment.getActivity()
) 并设置其 ActionBar 属性。
然后,在将工具栏设置为 ActionBar 后,使用您在 ActionBar 上提到的相同的 setDisplayHomeAsUpEnabled 方法来获取后退/向上按钮。
如果您的应用程序在该 Activity 中有多个片段,您显然必须小心管理。
使用
((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("Your Title");
如果您使用 Kotlin,请尝试以下操作:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, state: Bundle?): View? {
(activity as AppCompatActivity).setSupportActionBar(your_toolbar)
setHasOptionsMenu(true)
return inflater.inflate(R.layout.your_layout, container, false)
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
inflater?.inflate(R.menu.your_menu, menu)
}
假设持有片段的 Activity 是 MainActivity。
做
MainActivity main = (MainActivity)getActivity();
//You can access all public variable and methods of MainActivity.
//simply call
main.setSupportActionBar(toolbar)
main.getSupportActionBar.setTitle("title");
如果你使用 kotlin
(activity as AppCompatActivity).setSupportActionBar(toolbar)
工具栏可以通过
findViewById
方法或通过 viewBinding
初始化