Das Schiebemenü wurde mit "DialogFragment" erstellt. Es ist ein Bild, das Dialogfragment über Aktivität abdeckt.
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="250"
android:fromXDelta="-100%"
android:toXDelta="0%" />
<alpha
android:duration="250"
android:fromAlpha="0.8"
android:toAlpha="1.0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="250"
android:fromXDelta="0%"
android:toXDelta="-100%" />
<alpha
android:duration="250"
android:fromAlpha="1.0"
android:toAlpha="0.2" />
</set>
<resources xmlns:tools="http://schemas.android.com/tools">
....
<style name="SlideInMenuAnimation">
<item name="android:windowEnterAnimation">@anim/slide_in</item>
<item name="android:windowExitAnimation">@anim/slide_out</item>
</style>
....
</resources>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/slide_menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".SlideInMenuFragment">
<LinearLayout
android:id="@+id/menu_area"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<!--Raumrand auf gleicher Höhe wie ActionBar-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/design_default_color_primary"
android:minHeight="?android:attr/actionBarSize" />
<!--Menüteil-->
<ListView
android:id="@+id/menu_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</FrameLayout>
public class SlideInMenuFragment extends DialogFragment {
public SlideInMenuFragment() {
// Required empty public constructor
}
public static SlideInMenuFragment newInstance() {
SlideInMenuFragment fragment = new SlideInMenuFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.fragment_slide_in_menu);
//Linksbündig im Vollbilddialog ausrichten
Window window = dialog.getWindow();
window.getAttributes().windowAnimations = R.style.SlideInMenuAnimation;
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.setGravity(Gravity.TOP | Gravity.START);
window.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
//Legen Sie die Stammansicht von Layout fest
FrameLayout rootView = dialog.findViewById(R.id.slide_menu);
onViewCreated(rootView, savedInstanceState);
return dialog;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String[] menuArray = {"Speisekarte", "Speisekarte", "Speisekarte"};
//Stellen Sie den Inhalt des Menüs ein
ListView menu = view.findViewById(R.id.menu_list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, menuArray);
menu.setAdapter(adapter);
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Stellen Sie eine Schaltfläche am linken Rand der Aktionsleiste ein
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
//Das Symbol ↓ verwendet das Standardsortiersymbol, es ist jedoch hilfreich, es in ≡ zu ändern.
actionBar.setHomeAsUpIndicator(android.R.drawable.ic_menu_sort_by_size);
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
//Menüanzeige
FragmentManager fragmentManager = getSupportFragmentManager();
SlideInMenuFragment fragment = SlideInMenuFragment.newInstance();
fragment.show(fragmentManager, fragment.getClass().getSimpleName());
return true;
}
return super.onOptionsItemSelected(item);
}
}
Klicken Sie auf das Symbol links neben der Aktionsleiste ↓ Das Menü wird geöffnet. Tippen Sie auf den transparenten Teil des Hintergrunds, um das Menü zu schließen.
Mit dieser Implementierung können Sie Gesten bedienen und das Menü wird nicht angezeigt. Ich habe diese Methode implementiert, weil ich das Menü selbst ändern musste, aber Immerhin ist es besser, NavigationView zu verwenden.
Recommended Posts