全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android UI设计与开发之PopupWindow仿腾讯新闻底部弹出菜单

前一篇文章中有用到 PopupWindow 来实现弹窗的功能。简单介绍以下吧。

官方文档是这样解释的:这就是一个弹出窗口,可以用来显示一个任意视图。出现的弹出窗口是一个浮动容器的当前活动。

1.首先来个简单的栗子,效果如下:

只有两个布局文件,一个是弹窗布局(只有一张图片),一个是主界面布局(只有一个按钮)。

然后在主界面代码中实例 PopupWindow ,指定弹出的界面,在按钮点击事件中显示或隐藏弹窗就可以了,代码如下:

package com.yanis.demo;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.PopupWindow;

public class PopupWindowActivity extends Activity {
 PopupWindow pop;
 Button btn;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_popup_window);
  btn = (Button) findViewById(R.id.btnShowWindow);

  LayoutInflater inflater = LayoutInflater.from(this);
  // 引入窗口配置文件 - 即弹窗的界面
  View view = inflater.inflate(R.layout.my_popup_window, null);
  // PopupWindow实例化
  pop = new PopupWindow(view, LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT, false);

  btn.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    if (pop.isShowing()) {
     // 隐藏窗口,如果设置了点击窗口外消失,则不需要此方式隐藏
     pop.dismiss();
    } else {
     // 弹出窗口显示内容视图,默认以锚定视图的左下角为起点,这里为点击按钮
     pop.showAsDropDown(v);
    }
   }
  });

 }
}

2.知道了怎么实现 PopupWindow 弹窗,利用其特性替换系统自带的菜单栏,来个仿腾讯新闻的菜单吧,效果图如下:

布局什么的花点时间,慢慢调,自然就出来了,主要还是主界面的逻辑代码啊,菜单就是通过 PopupWindow 来显示的,具体代码如下:

package com.yanis.popup_window;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener,
  OnKeyListener {
 PopupWindow pop;
 TextView hideView;
 Button btnCancel;
 ImageView btnNight, btnWord, btnExit;
 View view;
 boolean isOut, isIn;// 是否弹窗显示

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  initView();
  initData();
 }

 /**
  * 初始化组件
  */
 private void initView() {
  hideView = (TextView) findViewById(R.id.hideView);

  LayoutInflater inflater = LayoutInflater.from(this);
  // 引入窗口配置文件 - 即弹窗的界面
  view = inflater.inflate(R.layout.menu_view, null);
  btnNight = (ImageView) view.findViewById(R.id.btnNight);
  btnWord = (ImageView) view.findViewById(R.id.btnWord);
  btnExit = (ImageView) view.findViewById(R.id.btnExit);
  btnCancel = (Button) view.findViewById(R.id.btnCancel);

 }

 /**
  * 初始化数据
  */
 private void initData() {
  btnNight.setOnClickListener(this);
  btnWord.setOnClickListener(this);
  btnExit.setOnClickListener(this);
  btnCancel.setOnClickListener(this);
  view.setFocusableInTouchMode(true);
  view.setOnKeyListener(this);
  // PopupWindow实例化
  pop = new PopupWindow(view, LayoutParams.MATCH_PARENT,
    LayoutParams.WRAP_CONTENT, true);
  /**
   * PopupWindow 设置
   */
  // pop.setFocusable(true); //设置PopupWindow可获得焦点
  // pop.setTouchable(true); //设置PopupWindow可触摸
  // pop.setOutsideTouchable(true); // 设置非PopupWindow区域可触摸
  // 设置PopupWindow显示和隐藏时的动画
  pop.setAnimationStyle(R.style.MenuAnimationFade);
  /**
   * 改变背景可拉的弹出窗口。后台可以设置为null。 这句话必须有,否则按返回键popwindow不能消失 或者加入这句话
   * ColorDrawable dw = new
   * ColorDrawable(-00000);pop.setBackgroundDrawable(dw);
   */
  pop.setBackgroundDrawable(new BitmapDrawable());

 }

 /**
  * 按钮点击事件监听
  * 
  * @param v
  */
 @Override
 public void onClick(View v) {
  switch (v.getId()) {
  case R.id.btnNight:
   changePopupWindowState();
   Toast.makeText(MainActivity.this, "你点击了夜间模式", Toast.LENGTH_SHORT)
     .show();
   break;
  case R.id.btnWord:
   changePopupWindowState();
   Toast.makeText(MainActivity.this, "你点击了文本模式", Toast.LENGTH_SHORT)
     .show();
   break;
  case R.id.btnExit:
   exitTheDemo();
   break;
  case R.id.btnCancel:
   changePopupWindowState();
   break;
  }
 }

 /**
  * 退出程序
  */
 private void exitTheDemo() {
  changePopupWindowState();
  new AlertDialog.Builder(MainActivity.this).setMessage("确定退出这个 Demo 吗?")
    .setPositiveButton("确定", new DialogInterface.OnClickListener() {

     @Override
     public void onClick(DialogInterface dialog, int which) {
      finish();
     }
    }).setNegativeButton("取消", null).show();
 }

 /**
  * 改变 PopupWindow 的显示和隐藏
  */
 private void changePopupWindowState() {
  if (pop.isShowing()) {
   // 隐藏窗口,如果设置了点击窗口外消失,则不需要此方式隐藏
   pop.dismiss();
  } else {
   // 弹出窗口显示内容视图,默认以锚定视图的左下角为起点,这里为点击按钮
   pop.showAtLocation(hideView, Gravity.BOTTOM, 0, 0);
  }
 }

 // Called when a key was pressed down and not handled by any of the views
 // inside of the activity
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
  case KeyEvent.KEYCODE_MENU:// 菜单键监听
   isOut = true;
   changePopupWindowState();
   break;
  }
  return super.onKeyDown(keyCode, event);
 }

 // Called when a hardware key is dispatched to a view.
 @Override
 public boolean onKey(View v, int keyCode, KeyEvent event) {
  switch (keyCode) {
  case KeyEvent.KEYCODE_MENU:
   if (isOut && !isIn) {
    isOut = false;
    isIn = true;
   } else if (!isOut && isIn) {
    isIn = false;
    changePopupWindowState();
   }
   break;
  }
  return false;
 }

}

源代码地址:https://github.com/YeXiaoChao/Yc_ui_popup_window

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# PopupWindow仿腾讯新闻底部弹出菜单  # PopupWindow仿新闻底部弹出菜单  # PopupWindow底部弹出菜单  # Android实现雅虎新闻摘要加载视差动画效果  # Android仿网易新闻图片详情下滑隐藏效果示例代码  # Android开发实现自定义新闻加载页面功能实例  # Android RecyclerView仿新闻头条的频道管理功能  # Android网络编程之简易新闻客户端  # Android模拟实现网易新闻客户端  # Android 模拟新闻APP显示界面滑动优化实例代码  # Android实现基本功能的新闻应用  # 弹出窗口  # 是一个  # 不需要  # 这句话  # 来个  # 配置文件  # 是这样  # 腾讯  # 中有  # 这就  # 弹出  # 只有一个  # 设置为  # 来实现  # 一篇文章  # 源代码  # 大家多多  # 夜间  # 就可以  # 可以用来 


相关文章: c# 在高并发下使用反射发射(Reflection.Emit)的性能  济南专业网站制作公司,济南信息工程学校怎么样?  如何在橙子建站中快速调整背景颜色?  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何在Windows服务器上快速搭建网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何通过免费商城建站系统源码自定义网站主题与功能?  兔展官网 在线制作,怎样制作微信请帖?  如何选购建站域名与空间?自助平台全解析  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何快速搭建高效简练网站?  详解jQuery中基本的动画方法  魔方云NAT建站如何实现端口转发?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何快速上传建站程序避免常见错误?  PHP 500报错的快速解决方法  小建面朝正北,A点实际方位是否存在偏差?  盘锦网站制作公司,盘锦大洼有多少5G网站?  建站主机系统SEO优化与智能配置核心关键词操作指南  在线教育网站制作平台,山西立德教育官网?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何快速完成中国万网建站详细流程?  如何通过万网虚拟主机快速搭建网站?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  已有域名和空间如何快速搭建网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  建站之星CMS五站合一模板配置与SEO优化指南  高性价比服务器租赁——企业级配置与24小时运维服务  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何使用Golang安装API文档生成工具_快速生成接口文档  5种Android数据存储方式汇总  如何快速搭建虚拟主机网站?新手必看指南  如何选择域名并搭建高效网站?  建站之星多图banner生成与模板自定义指南  网页设计与网站制作内容,怎样注册网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何在宝塔面板中创建新站点?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何通过远程VPS快速搭建个人网站?  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站之星如何一键生成手机站?  如何设置并定期更换建站之星安全管理员密码?  香港服务器WordPress建站指南:SEO优化与高效部署策略  历史网站制作软件,华为如何找回被删除的网站?  如何基于云服务器快速搭建网站及云盘系统?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。