#android #android-actionbar #toolbar
#Android #android-панель действий #панель инструментов
Вопрос:
почему моя панель действий не отображается во фрагменте?
У меня есть добавить search.xml в папке меню, и это search.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/search"
android:icon="@drawable/ic_search_black_24dp"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="androidx.appcompat.widget.SearchView"
android:title="Search"/>
<item
android:id="@ id/chat"
android:icon="@drawable/ic_message_black_24dp"
app:showAsAction="ifRoom"
android:title="Message"/>
</menu>
в моем домашнем фрагменте я добавил этот код.
public class HomeFragment extends Fragment implements RecyclerView.OnScrollChangeListener {
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.search,menu);
super.onCreateOptionsMenu(menu, inflater);
}
fragment_home.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
tools:context=".ui.HomeFragment">
<com.google.android.material.appbar.AppBarLayout
android:id="@ id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@ id/toolbar"
app:titleTextColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:title="IFUNPOT" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:layout_below="@ id/appbar"
android:id="@ id/recy_feed"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
/>
</RelativeLayout>
но я вижу панель действий, но почему не может отображаться значок поиска и сообщения?
Комментарии:
1. Вы вызывали setHasOptionsMenu(true); ?
Ответ №1:
попробуйте поместить эту строку в родительский макет
android:layout_marginTop="?actionBarSize"
вот так
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="?actionBarSize"
android:fitsSystemWindows="true"
tools:context=".ui.HomeFragment">
<com.google.android.material.appbar.AppBarLayout
android:id="@ id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@ id/toolbar"
app:titleTextColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:title="IFUNPOT" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:layout_below="@ id/appbar"
android:id="@ id/recy_feed"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
/>
</RelativeLayout>
Ответ №2:
В вашем фрагменте добавьте:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
//....
}
Из документа:
setHasOptionsMenu
Метод сообщает, что этот фрагмент хотел бы участвовать в заполнении меню опций, получив вызовonCreateOptionsMenu(Menu, MenuInflater)
и связанные с ним методы.