Menu菜单、PopupWindow窗口和Animation动画

  • 常用菜单
  • 系统菜单
  • 上下文菜单
  • 弹出菜单
  • PopupWindow
  • Animation动画

常用菜单

菜单 显示菜单 事件监听
系统菜单 onCreateOptionsMenu onOptionsItemSelected
上下文菜单 AlertDialog.Builder() setSingleChoiceItems()

系统菜单

首先需要在res下面创建一个menu文件夹,并新建一个xml文件作为OptionMenu的布局文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="主页" android:id="@+id/one"/>
<item android:title="我的" android:id="@+id/two"/>
<item android:title="博客" android:id="@+id/three"/>
<item android:title="账号" android:id="@+id/four"/>
</menu>
在Activity重写onCreateOptionsMenu加载资源文件
//添加系统菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.items, menu);return super.onCreateOptionsMenu(menu);
}
在Activity重写onOptionsItemSelected加设置事件监听
//设置item点击事件
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {int itemId = item.getItemId();switch (itemId) {case R.id.one:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;case R.id.two:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;case R.id.three:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;case R.id.four:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;}return super.onOptionsItemSelected(item);
}

上下文菜单

在res下面创建一个menu文件夹,并新建一个xml文件作为ContextMenu的布局文件(同上)
Activity重写onCreateConextMenu加载资源文件
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvShow = (TextView) findViewById(R.id.tv_show);//长按事件,将上下文菜单注册到tvShow中registerForContextMenu(tvShow);
}
//添加上下文菜单@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {getMenuInflater().inflate(R.menu.items, menu);super.onCreateContextMenu(menu, v, menuInfo);
}
Activity重写onConextItemSelected设置事件监听
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {int itemId = item.getItemId();switch (itemId) {case R.id.one:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;case R.id.two:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;case R.id.three:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;case R.id.four:Toast.makeText(this, "" + item.getTitle(), Toast.LENGTH_SHORT).show();break;}return super.onContextItemSelected(item);
}
*为控件添加长按属性并将菜单绑定到这个控件上:registerForContextMenu(控件)

弹出菜单

实现方法:

步骤1:在res下面创建一个menu文件夹,并新建一个xml文件作为PoupMenu的布局文件。
步骤2:把PopupMenu相关逻辑封装到showPopupMenu()方法中,包含PopupMenu的实例化、布局设置、显示、添加MenuItem的点击监听及响应等
步骤3:为控件设置事件监听直接调用showPopupMenu()方法

XML布局文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/red" android:title="红色字体"/>
</menu>

注意:弹出菜单,默认弹出的位置在控件view的下方

public class Main2Activity extends AppCompatActivity {private TextView tvShow;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);tvShow = (TextView) findViewById(R.id.tv_show);tvShow.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showPopMenu();}});}public void showPopMenu(){//创建对象PopupMenu popupMenu = new PopupMenu(this,tvShow);//记载布局popupMenu.inflate(R.menu.pop_item);//事件监听popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {int id=item.getItemId();switch (id){case R.id.red:tvShow.setTextColor(Color.parseColor("#ff0000"));break;}return false;}});//显示菜单popupMenu.show();}
}

效果:

PopupWindow

关于弹出方法有三个:

showAsDropDown(anchor);
showAsDropDown(anchor, xoff, yoff);
showAtLocation(parent, gravity, x, y)。
解释
TOP 页面顶部
BOTTOM 页面底部
CENTER 页面中心
LEFT 页面左侧中间
RIGHT 页面右侧中间

首先需要Layout布局文件,这个布局文件就是我们的窗口布局

<?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="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:background="#C0CCCC"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="30dp"android:gravity="center_vertical"android:text="微信"android:textColor="#585656"android:textSize="20sp" /></RelativeLayout>
</LinearLayout>

Activity代码:

private Button btnAnim;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main3);btnAnim = (Button) findViewById(R.id.btn_anim);btnAnim.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//创建对象PopupWindow popupWindow = new PopupWindow(Main3Activity.this);//加载布局View inflate = LayoutInflater.from(Main3Activity.this).inflate(R.layout.pop_layout, null);//设置三要素,缺一不可.//自定义数值或者匹配popupWindow.setContentView(inflate);popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);popupWindow.setWidth(600);//外部点击取消popupWindow.setOutsideTouchable(true);//设置弹出的位置//btnAnim是控件//20是x轴位置//10是y轴位置popupWindow.showAsDropDown(btnAnim, 20, 10);}});
}

Animation动画

设置进场动画前要在res目录下创建一个anim文件目录,这里面存放着动画设置

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="1000"><!-- duration设置动画持续时间1000毫秒 --><!-- 从-300位置移动至0位置 --><translateandroid:fromXDelta="-300"android:toXDelta="0" /><!-- 透明度由 0.1(最低)到 1(不透明) --><!-- 透明度是浮点型,在写java代码时要尤为注意 --><alphaandroid:fromAlpha="0.1"android:toAlpha="1" />
</set>

设置完成后要在value文件下的style.xml中注册动画效果

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style><!-- 设置进场动画 --><style name="pop_window" parent="android:Animation"><item name="android:windowEnterAnimation">@anim/popup_in</item></style></resources>

最后结合上面的java代码写出完整代码:

public class Main3Activity extends AppCompatActivity {private Button btnAnim;//记录退出点击时间private long exitTime = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main3);btnAnim = (Button) findViewById(R.id.btn_anim);btnAnim.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//创建对象PopupWindow popupWindow = new PopupWindow(Main3Activity.this);//加载布局View inflate = LayoutInflater.from(Main3Activity.this).inflate(R.layout.pop_layout, null);//设置三要素,缺一不可.//自定义数值或者匹配popupWindow.setContentView(inflate);popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);popupWindow.setWidth(600);//设置窗体透明度WindowManager.LayoutParams attributes = getWindow().getAttributes();attributes.alpha = 0.6f;//浮点型getWindow().setAttributes(attributes);//设置取消监听popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {WindowManager.LayoutParams attributes1 = getWindow().getAttributes();attributes1.alpha = 1f;getWindow().setAttributes(attributes1);}});//设置动画popupWindow.setAnimationStyle(R.style.pop_window);//设置外部点击取消popupWindow.setOutsideTouchable(true);//设置弹出的位置popupWindow.showAsDropDown(btnAnim, 10, 10);}});}

Menu菜单、PopupWindow窗口和Animation动画相关推荐

  1. 【Android】Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口

    使用Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口 [Android]测试与popwindow PopupWindow转载自:Android PopupWindow实现从 ...

  2. android PopupWindow实现从底部弹出或滑出选择菜单或窗口

    android PopupWindow实现从底部弹出或滑出选择菜单或窗口 http://www.open-open.com/lib/view/open1379383271818.html http:/ ...

  3. [译][Tkinter 教程14] menu 菜单

    已获原作者授权. 原系列地址: Python Tkinter 简介 一提到"menu"这个词, 很多人首先想到的是餐馆里的菜单. 虽然餐馆菜单和计算机程序中的菜单看起来一点也不像, ...

  4. WPF 修改(优化)Menu菜单的样式

    Menu菜单,在软件中使用率很高的一个控件.包含具有层级关系的一个或多个MenuItem作为子菜单. 今天就来分享一个定义的菜单样式. 看一下效果图: 下面就来看看代码: 本次代码,全部都在MainW ...

  5. 一直以来使用div menu下拉时flash总是覆盖div menu菜单,当时就很老火了。

    一直以来使用div menu下拉时flash总是覆盖div menu菜单,当时就很老火了,今天在网上搜索找到下面解决方法. 有两种方法, 一种就是设置flash为透明: 但是如果你在DW中插入动画,再 ...

  6. Android数据存储:数据库基础,在Android应用中使用数据库,附加Menu菜单选项的一些说明

    为什么**持久性数据很重要: 在计分器那个应用中,是将球队得分存储在变量里,当我们旋转应用时Activity被销毁,得分记录也没有了.将设备旋转为新的方向时,Activity被重现创建,得分又变成默认 ...

  7. android定制你自己的menu菜单,修改menu字体颜色

    http://bbs.hiapk.com/thread-2581971-1-1.html 原帖来自ligux~~~~傻子啊傻子 如上次教程一样,准备工作是java环境以及反编译工具,还有你从自己ROM ...

  8. MFC关于Menu菜单事件不响应问题

    首先说一下添加菜单事件: 1.资源视图添加Menu 菜单,添加菜单按钮,更改按钮ID ==>ID_LOGOUTDEV: 2.绑定消息响应函数 ON_COMMAND(ID_LOGOUTDEV, & ...

  9. Animation动画之alpha

    一.Android的Anotation由四种类型构成:alpha,scale,translate,rotate; 二.在xml配置文件中 alpha: 渐变透明度动画效果; scale: 渐变尺寸缩放 ...

最新文章

  1. python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系
  2. Devexpress TreeList控件绑定显示父子节点对像
  3. 用shell将时间字符串与时间戳互转
  4. Linus系统下查看系统版本
  5. 武警多业务光端机,五防光端机产品介绍
  6. 网上花店系统源码_如何创建一个花店线上商城,可以开发一个微信小程序
  7. 扫地机器人滤网顺序_扫地机器人如何维护 扫地机器人维护技巧【介绍】
  8. 解决跨域form表单post提交时Forbidden的问题。
  9. CentOS中文乱码问题
  10. android 数组赋值字符串_给字符数组赋值的方法
  11. 快速入门丨篇八:如何进行运动控制器EtherCAT总线的基础使用?
  12. Atitit 艾提拉整理清明节的诗歌集合 清明节的特征 万物复苏 百草发芽 尝试从股市 其他外国诗歌集 得到清明的诗歌 约谈春天 歌颂春天 下雨 不见方三日、 夜来风雨声,花落知多少。(
  13. mac mysql 没有my.cnf_mac下mysql配置my.cnf无效
  14. Java利用libreOffice(jodconverter)将office(ppt,Excel,word,text)文档转换成pdf
  15. BZOJ 3772: 精神污染
  16. 20200928 006.简单错误如何处理_守破离学习法_程序员修炼手册
  17. 【cmd命令】查看端口占用情况
  18. NBOOT、EBOOT、UBOOT介绍
  19. 征信衍生规则中的逾期强变量都有哪些?
  20. 没有权限访问vina linux,auto dockvina 安装-linux

热门文章

  1. CVPR_2019 Paper
  2. 【计算机】单位制前缀的歧义-KB、kb、MB混用
  3. 所建不凡——AWS技术峰会2018中国站在上海起航
  4. 聊天突然尬住?教你用Python一键获取斗图表情包,各种表情包轻松化解尴尬
  5. pyqt5 良心教程
  6. Androidstudio 内容字号颜色,背景颜色
  7. 用USB安装XP -- 电脑店
  8. iOS 二维码生成和扫描
  9. HDLBits-Fsm serialdata
  10. 总结DAY689考研复习day13