首页 > 代码库 > 用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)
用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)
用PopupWindow实现弹出菜单是一个比较好的方式。当然我们还有一个类PopupMenu也能实现弹出菜单,但那个太过于局限了,所以不是很推荐。
这个实例的效果是这样的:点击按钮后,一个菜单从屏幕的右边滑入到屏幕中,点击按钮/空白处后菜单消失。
布局文件时一个按钮,我就不贴出代码了。下面是菜单的布局:
<?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="match_parent" android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3" /> <Button android:id="@+id/closet_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭" /></LinearLayout>
MainActivity.java
package com.kale.popup;import android.app.Activity;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.PopupWindow;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{ LayoutInflater inflater = null; private PopupWindow popupWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); initPopWindow(); } /** * 初始化popWindow * */ private void initPopWindow() { View popView = inflater.inflate(R.layout.menu, null); popupWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); popupWindow.setBackgroundDrawable(new ColorDrawable(0)); //设置popwindow出现和消失动画 popupWindow.setAnimationStyle(R.style.PopMenuAnimation); Button btn01 = (Button)popView.findViewById(R.id.button1); btn01.setOnClickListener(this); Button btn02 = (Button)popView.findViewById(R.id.button2); btn02.setOnClickListener(this); Button btn03 = (Button)popView.findViewById(R.id.button3); btn03.setOnClickListener(this); Button closetBtn = (Button)popView.findViewById(R.id.closet_btn); closetBtn.setOnClickListener(this); } public void buttonListener(View v) { showPop(v, 0, 0, 0); } /** * 显示popWindow * */ public void showPop(View parent, int x, int y,int postion) { //设置popwindow显示位置 popupWindow.showAsDropDown(parent); //获取popwindow焦点 popupWindow.setFocusable(true); //设置popwindow如果点击外面区域,便关闭。 popupWindow.setOutsideTouchable(true); popupWindow.update(); } @Override public void onClick(View v) { Button btn = (Button) v; Toast.makeText(MainActivity.this, btn.getText(), 0).show(); popupWindow.dismiss(); } }
菜单的动画
style.xml
<style name="PopMenuAnimation" parent="@android:style/Animation"> <item name="android:windowEnterAnimation">@anim/slide_left_in</item> <item name="android:windowExitAnimation">@anim/slide_right_out</item> </style>
slide_left_in.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromXDelta="100.0%p" android:toXDelta="0.0" /></set>
slide_right_out.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="100" android:fromXDelta="0.0" android:toXDelta="100.0%p" /></set>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。