Это не полный пример, но, надеюсь, он даст вам представление о том, что вы могли бы сделать.
При этом используется пользовательский BottomSheetDialog, и преимущество с помощью диалогового окна заключается в том, что его легко отклонить с помощью кнопки назад или щелчка за пределами представления.
TestDialog.java
public class TestDialog extends BottomSheetDialog
{
private Context _context;
public TestDialog(Context context)
{
super(context);
this._context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = getWindow();
if (window != null)
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setContentView(R.layout.test_layout);
}
}
R.layout.test_layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent">
<View
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@drawable/curve"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="14dp"
android:background="@color/white"
android:baselineAligned="false">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
app:srcCompat="@drawable/ic_person_black_24dp"
android:layout_gravity="center_horizontal"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="New Session"
android:textColor="@color/black"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
app:srcCompat="@drawable/ic_person_black_24dp"
android:layout_gravity="center_horizontal"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="Enroll Player"
android:textColor="@color/black"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
app:srcCompat="@drawable/ic_person_black_24dp"
android:layout_gravity="center_horizontal"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="New Batch"
android:textColor="@color/black"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
@ вытяжка / кривая
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle"/>
</item>
<item
android:bottom="-80dp"
android:left="-100dp"
android:right="-100dp"
android:top="0dp">
<shape android:shape="oval">
<solid android:color="@color/white" />
</shape>
</item>
</layer-list>
Отображение диалога
TestDialog dialog = new TestDialog(MainActivity.this);
tdialog.show();
//This is done in order to make dialog width match the screen width
Window window = dialog.getWindow();
window.setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
Что теперь делать
Есть две вещи, которые вы должны реализовать сейчас, если решите пойти по этому пути. Во-первых, нужно убедиться, что само диалоговое окно не имеет фона, сейчас оно не полностью прозрачно, а во-вторых, убедиться, что оно не закрывает ваш BottomNavigationView
.
Пример, как показать диалоговое окно в вашем случае
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.nav_home:
fragment = new HomeFragment();
switchFragment(fragment);
return true;
case R.id.nav_notifications:
fragment = new AlertsFragment();
switchFragment(fragment);
return true;
case R.id.nav_add:
//Show the dialog
TestDialog dialog = new TestDialog(MainActivity.this);
tdialog.show();
//This is done in order to make dialog width match the screen width
Window window = dialog.getWindow();
window.setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
case R.id.nav_messages:
fragment = new MessagesFragment();
switchFragment(fragment);
return true;
case R.id.nav_profile:
fragment = new ProfileFragment();
switchFragment(fragment);
return true;
}
return false;
}