#java #android #kotlin
#java #Android #kotlin
Вопрос:
Я хочу добавить значок уведомления слева и значок поиска справа от панели инструментов.
Я подхожу следующим образом, но не работает
Я хочу сделать что-то вроде этого
Мой код:
fragment_browse.xml
<androidx.appcompat.widget.Toolbar
android:id="@ id/tb_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:background="?attr/colorAccent"
android:minHeight="?attr/actionBarSize"
app:actionViewClass="android.support.v7.widget.SearchView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:theme="@style/ThemeOverlay.AppCompat.Dark"
app:title="Browse" />
Внутри BrowseFragment.kt
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.browse_menu, menu)
val searchItem = menu.findItem(R.id.appSearchBar)
val searchManager = activity?.getSystemService(Context.SEARCH_SERVICE) as SearchManager
if (searchItem != null) {
searchView = searchItem.actionView as SearchView
}
if (searchView != null) {
searchView!!.setSearchableInfo(searchManager.getSearchableInfo(activity!!.componentName))
queryTextListener = object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
Log.i("onQueryTextChange", newText)
return true
}
override fun onQueryTextSubmit(query: String): Boolean {
Log.i("onQueryTextSubmit", query)
return true
}
}
searchView!!.setOnQueryTextListener(queryTextListener)
}
super.onCreateOptionsMenu(menu, inflater)
}
Мой метод onCreateView
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_browse, container, false)
var toolbar = view.findViewById(R.id.tb_toolbar) as Toolbar
(activity as AppCompatActivity?)!!.setSupportActionBar(toolbar)
return view
}
Комментарии:
1. Вам действительно нужна панель инструментов в формате xml? Вы можете изменить панель инструментов с помощью других макетов, таких как RelativeLayout, и добавить свои представления в этот макет, а затем закрепить в верхней части макета фрагмента.
2. да, я могу это сделать
Ответ №1:
На мой взгляд, вы могли бы просто раздуть меню для существующей панели инструментов (вместо setSupportActionBar). Вот пример:
toolbar.inflateMenu(R.menu.browse_menu)
//this inflates your menu programmatically
val searchItem = toolbar.menu.findItem(R.id.appSearchBar)
//do your code with menuitem here
toolBar.setNavigationIcon(androidx.appcompat.R.drawable.abc_ic_ab_back_material)
//or put there your icon ID - that's for the icon at the left side
toolBar.setNavigationOnClickListener { view ->
//that's the click handler for the icon at the left side
}
И вам не нужно переопределять onCreateOptionsMenu и никаких действий таким образом.