菜单的实现方式
Android底部弹出菜单可以通过以下方式实现:
- PopupWindow:使用PopupWindow可以自定义一个View,然后在底部弹出,根据需要添加动画效果。
- BottomSheetDialog:在新版本的Android Support库中,提供了BottomSheetDialog,可以实现一个可滑动的底部弹出菜单。
- BottomNavigationView:在Android 28中,Google提供了一个BottomNavigationView,可以直接实现底部导航菜单。
- 自定义View:也可以根据自己的需求自定义一个底部弹出菜单View,然后通过动画来实现弹出效果。
需要注意的是,底部弹出菜单在不同机型、分辨率、屏幕密度下显示可能存在差异,需要做好适配工作。
菜单实现方法
在Android中,底部弹出菜单可以通过使用PopupWindow实现。具体步骤如下:
1.创建布局文件(菜单的样式)
2.创建PopupWindow对象,并设置其宽、高、动画等相关属性
3.通过PopupWindow对象的showAtLocation方法将菜单显示在底部
代码示例:
1.创建布局文件
在res/layout目录下创建popup_bottom_layout.xml布局文件,实现底部弹出菜单的样式。例如:
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/white"
android:padding="16dp">
<Button
android:id="@+id/btn_share"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="分享" />
<Button
android:id="@+id/btn_collect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="收藏" />
<Button
android:id="@+id/btn_report"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="举报" />
</LinearLayout>
2.创建PopupWindow对象
在Activity中创建PopupWindow对象,并设置其宽、高、动画等相关属性。例如:
private PopupWindow mPopupWindow;
private void initPopupWindow() {
//1.创建PopupWindow对象
mPopupWindow = new PopupWindow(this);
//2.设置菜单的宽、高
mPopupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
//3.设置菜单的内容
View popupView = LayoutInflater.from(this).inflate(R.layout.popup_bottom_layout, null);
mPopupWindow.setContentView(popupView);
//4.设置菜单的背景
mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//5.设置菜单的动画
mPopupWindow.setAnimationStyle(R.style.BottomPopupAnimation);
//6.设置菜单的焦点
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
//7.设置菜单的弹出位置
mPopupWindow.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
}
3.调用PopupWindow对象的showAtLocation方法显示底部菜单
在需要弹出底部菜单的地方调用initPopupWindow方法即可。
完整代码示例:
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private PopupWindow mPopupWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnShowPopup = findViewById(R.id.btn_show_popup);
btnShowPopup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
initPopupWindow();
}
});
}
private void initPopupWindow() {
//1.创建PopupWindow对象
mPopupWindow = new PopupWindow(this);
//2.设置菜单的宽、高
mPopupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
//3.设置菜单的内容
View popupView = LayoutInflater.from(this).inflate(R.layout.popup_bottom_layout, null);
mPopupWindow.setContentView(popupView);
//4.设置菜单的背景
mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//5.设置菜单的动画
mPopupWindow.setAnimationStyle(R.style.BottomPopupAnimation);
//6.设置菜单的焦点
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
//7.设置菜单的弹出位置
mPopupWindow.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
}
}
popup_bottom_layout.xml:
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/white"
android:padding="16dp">
<Button
android:id="@+id/btn_share"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="分享" />
<Button
android:id="@+id/btn_collect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="收藏" />
<Button
android:id="@+id/btn_report"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="举报" />
</LinearLayout>
styles.xml:
<resources>
<!-- 底部弹出菜单动画 -->
<style name="BottomPopupAnimation">
<item name="android:windowEnterAnimation">@anim/popup_bottom_in</item>
<item name="android:windowExitAnimation">@anim/popup_bottom_out</item>
</style>
</resources>
popup_bottom_in.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>
popup_bottom_out.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="0"
android:toYDelta="100%p" />
</set>
通过以上代码示例,我们可以实现一个简单的底部弹出菜单。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/117222.html