Android开发之模仿UC浏览器的菜单
这个内容内容涉及到的了两个知识点:
PopupWindow:使用PopupWindow创建一个简单的菜单
使用TabHost创建标签:这个网上好多教程随便看看就好。
实现思路:
观察一下UC浏览器的菜单我们可以发现,UC的菜单就是一个个标签页显示在了PopupWindow上,所以可以想到使用PopupWindow+TabHost来实现类似的效果。这样做,在标签页中我们可以使用android提供布局对象随意设置布局。
下面来看代码:
想要实现这种效果的菜单,默认的PopupWindow明显需要重写:
- public class MyMenu extends PopupWindow {
- private TabHost tabHost; //标签页窗口
- private LayoutInflater inflater; //用于加载tabhost
- private View layout;
- private Context context;
- //构造函数
- public MyMenu(Context context, int width, int height) {
- super(context);
- this.context = context;
- inflater = LayoutInflater.from(this.context);
- //创建标签页
- initTab();
- //设置默认选项
- setWidth(width); //宽
- setHeight(height); //高
- setContentView(tabHost); //把标签页设置到PopupWindow上
- }
- //实例化标签页
- private void initTab(){
- layout = inflater.inflate(R.layout.menu,null);
- tabHost = (TabHost)layout. findViewById(android.R.id.tabhost); //获取tabhost
- tabHost.setBackgroundColor(Color.argb(60,144,144,150)); //设置背景色
- tabHost.setup(); //使用findViewById()加载tabhost时在调用addTab前必须调用
- /**
- * addTab()添加标签页
- * tabHost.newTabSpec("Fitst") 创建一个tab
- * setIndicator("A") 设置指针
- * setContent(R.id.tab1)设置内容
- */
- tabHost.addTab(tabHost.newTabSpec("Fitst").setIndicator("A").setContent(R.id.tab1));
- tabHost.addTab(tabHost.newTabSpec("SECOND").setIndicator("B").setContent(R.id.tab2));
- tabHost.addTab(tabHost.newTabSpec("THIRD").setIndicator("C").setContent(R.id.tab3));
- tabHost.setCurrentTab(1); //设置默认选种标签
- }
- //获取选项卡中的组件
- public View getOption(int id){
- return layout.findViewById(id);
- }
- }
复制代码
菜单的布局文件res/layout/menu.xml
- <?xml version="1.0" encoding="utf-8"?>
- <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/tabhost"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <LinearLayout
- android:orientation="vertical"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent">
- <TabWidget
- android:id="@android:id/tabs"
- android:layout_height="40dp"
- android:layout_width="fill_parent"
- />
- <FrameLayout
- android:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/tab1">
- <Button
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="Tab one"
- android:id="@+id/first_button"
- />
- </LinearLayout>
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/tab2">
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="Tab two"
- />
- </LinearLayout>
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:id="@+id/tab3">
- <TextView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="Tab three"目前菜单的样子还是比较丑陋了,美化大家自己发挥好了!/>
- </LinearLayout>
- </FrameLayout>
- </LinearLayout>
- </TabHost>
在Activity中使用:
- public class MyActivity extends Activity
- {
- private MyMenu menu;
- private LinearLayout linear;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- //组件初始化
- private void init(){
- linear = (LinearLayout) findViewById(R.id.popMenu);
- int width = getWindowManager().getDefaultDisplay().getWidth()-15; //菜单的宽度
- int heigth = getWindowManager().getDefaultDisplay().getHeight()/3; //菜单的高度
- menu = new MyMenu(this, width,heigth);
- Button button= (Button) menu.getOption(R.id.first_button); //获取菜单第一个标签页中的按钮
- //添加点击事件
- button.setOnClickListener(new Button.OnClickListener(){
- public void onClick(View v) {
- Toast.makeText(MyActivity.this,"tab one",Toast.LENGTH_SHORT).show();
- }
- });
- }
- //显示菜单
- private void show(){
- menu.showAtLocation(linear, Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL,0,0);
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- //按以下菜单按键展示菜单 按两下隐藏菜单
- if(!menu.isShowing()&&keyCode == KeyEvent.KEYCODE_MENU){
- show();
- }
- else{
- menu.dismiss();
- }
- return true;
- }
- }
Android开发之模仿UC浏览器的菜单的更多相关文章
- 前端开发在手机UC浏览器上遇到的坑
1.user-scalable问题 写手机页面都会加一个meta标签 <meta content="width=device-width, initial-scale=1.0, max ...
- Android开发工程师文集-提示框,菜单,数据存储,组件篇
提示框,菜单,数据存储,组件篇 Toast Toast.makeText(context, text, 时间).show(); setDuration();//设置时间 setGravity();// ...
- Android开发学习之3大类菜单
在Android系统中,菜单可以分为三类:选项菜单(Option Menu),上下文菜单(Context Menu)以及子菜单(Sub Menu). 一.选项菜单(Option Menu) 创建选项菜 ...
- Android 开发一定要看的15个实战项目
前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...
- UC浏览器插件开发
pip install UC浏览器插件是个什么玩意? 如图所看到的,便是UC的插件面板. UC通过开放浏览器插件api, 使开发人员可以进行插件的开发. 插件种类: 1 : extension. 就是 ...
- UC浏览器调试移动端网站
准备工作: UC浏览器开发版网址 UC浏览器开发者版下载地址 下载adb_tool 步骤: 1.将adb_tool解压,把里面的文件复制到 C:\Windows\SysWOW64 文件夹下面. 2.运 ...
- 站在巨人的肩膀上学习Android开发
我们知道,一開始最好的学习方法是模仿,尤其是模仿巨人. 那说到Android开发的模仿自然就是分析并研究主流程序的布局.实现方法.进而提升自己的技术. 第一招----逆向project 要分析&quo ...
- Android 高仿UC浏览器监控剪切板弹出悬浮窗功能
UC浏览器应该是android手机里 最流行的浏览器之一了,他们有一个功能 相信大家都体验过,就是如果你复制了什么文字,(在其他app中 复制也有这个效果!,所以能猜到肯定是监控了剪切板),就会弹出一 ...
- android仿微信红包动画、Kotlin综合应用、Xposed模块、炫酷下拉视觉、UC浏览器滑动动画等源码
Android精选源码 仿微信打开红包旋转动画 使用Kotlin编写的Android应用,内容你想象不到 Android手机上的免Root Android系统日志Viewer 一个能让微信 Mater ...
随机推荐
- 【BZOJ】【2127】happiness
网络流/最小割 Orz Hzwer. 这题他题解说的比较简略……我手画了个图才明白过来…… 嗯对于每个人选文or理的单独收益大家应该很好理解……连S->i 权值为选文的喜悦值,i->T权值 ...
- @Java类加载的过程
前言 我们写的源程序.java文件经过编译后成为了.class字节码文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机(JVM)之后才能运行和使用.而虚拟机如何加载这些.class文件 ...
- 3D几何图形的生成算法
在之前的博客上,发布了一个我写的3D几何图形生成的DEMO: http://www.cnblogs.com/WhyEngine/p/3415040.html DEMO下载地址: http://file ...
- RV 多样式 MultiType 聊天界面 消息类型 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 不要再使用JS框架了
停止编写Javascript框架吧. Javascript框架就好像死亡和税收一样:终究不可避免它的存在.我确信如果我是那面墙上的一只苍蝇,每次有人开始一个新的网页项目时,第一个问题肯定是我们用的是哪 ...
- 再谈javascript图片预加载技术
图片预加载技术的典型应用: 如lightbox方式展现照片,无疑需要提前获得大图的尺寸,这样才能居中定位,由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小然后展 ...
- Android中操作SQLite数据库
我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...
- hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
本文档主要内容有: 1.hadoop 2.2.0 集群安装与部署 2.HBase 0.96 集群安装与部署 3.Zookeeper 3.4.5集群安装部署 备注:安装文档可能有所遗漏,后续将持续更新. ...
- 12款程序员们最爱的Bootstrap模板
如果你还没有开始使用Bootstrap模板,那你可真是有够OUT,这是一个帮助你快速开发的工具,Bootstrap是基于jQuery框架开发的,它在jQuery框架的基础上进行了更为个性化和人性化的完 ...
- iOS开发系列课程预告
近期在Mac和iOS上做开发,认为应该写一点东西分享给感兴趣的童鞋们.在此之前.以前有非常多同行们都在埋怨苹果Objective-C的复杂和难以上手,为此也有非常多人对今年(2014年)刚推出的Swi ...