之前曾经在网上看到Android仿QQ空间底部菜单的Demo,发现这个Demo有很多Bug,布局用了很多神秘数字。于是研究了一下QQ空间底部菜单的实现,自己写了一个,供大家参考。效果如下图所示:
1、实现原理很简单,底部菜单是一个水平分布的LinearLayout,里面又是五个LinearLayout,它们的layout_weight都为1,意味着底部菜单的子控件将屏幕宽度平均分为5部分。五个LinearLayout除了中间那个,其余都在里面放置ImageView和TextView(中间先空着,什么都不放,后面用来放底盘和加号的)。
2、中间的加号和底盘是用FramLayout实现的,现在底部居中的位置放置底盘,然后在相同位置放置加号,就搞定了。
3、设置加号的触摸事件,弹窗是用PopupWindow实现的,然后再把加号的图片替换成乘号就搞定了。代码如下所示:
ButtomMenuActivity.java:
复制代码 代码如下:
package com.shamoo.qqbuttommenu;
import com.shamoo.qqbuttommenu.R;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.AbsListView;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.RadioButton;
import android.widget.TabHost;
public class ButtomMenuActivity extends TabActivity {
FrameLayout fmpan;
TabHost tabHost;
ImageView image;
FrameLayout fm;
LayoutInflater inflater;
private RadioButton tab_home, tab_second;
PopupWindow popup;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
initView();
fm.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
image.setImageResource(R.drawable.toolbar_plusback);
showWindow(fmpan);
}
});
}
private void initView() {
inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
fmpan = (FrameLayout)findViewById(R.id.tab1);
fm = (FrameLayout)findViewById(R.id.btn_ck);
image = (ImageView)findViewById(R.id.image1);
}
private void showWindow(View parent) {
if(popup == null) {
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.write_tab, null);
// 创建一个PopuWidow对象
popup = new PopupWindow(view, LinearLayout.LayoutParams.MATCH_PARENT,320);
// 设置焦点在弹窗上
popup.setFocusable(true);
// 设置允许在外点击消失
popup.setOutsideTouchable(true);
// 设置弹窗消失事件监听
popup.setOnDismissListener(new OnDismissListener() {
public void onDismiss() {
// TODO Auto-generated method stub
image.setImageResource(R.drawable.toolbar_plus);
}
});
// 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景
popup.setBackgroundDrawable(new BitmapDrawable());
popup.setTouchInterceptor(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_OUTSIDE) {
popup.dismiss();
image.setImageResource(R.drawable.toolbar_plus);
return true;
}
return false;
}
});
}
if(!popup.isShowing()) {
popup.showAsDropDown(parent, Gravity.CENTER, 0);
}
}
}
tab.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" >
<FrameLayout
android:id="@+id/l1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="10.0px"
android:visibility="gone" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include
android:layout_alignParentBottom="true"
android:id="@+id/tab1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout = "@layout/test" />
</RelativeLayout>
</FrameLayout>
</TabHost>
test.xml:
复制代码 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/toolbar_bg" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:src="@drawable/tab_timefeed_opacity"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:text="好友动态"
android:textSize="10.0dip"
android:visibility="visible" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:src="@drawable/tab_feedback_opacity"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:text="与我相关"
android:textSize="10.0dip"
android:visibility="visible" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:src="@drawable/tab_myzone_opacity"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:text="主页"
android:textSize="10.0dip"
android:visibility="visible" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:src="@drawable/tab_applist_opacity"
android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:text="应用"
android:textSize="10.0dip"
android:visibility="visible" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/toolbar_write_bg" />
</FrameLayout>
<FrameLayout
android:id="@+id/btn_ck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1" >
<ImageView
android:id="@+id/image1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="2.0dip"
android:src="@drawable/toolbar_plus" />
</FrameLayout>
</FrameLayout>
这个Demo只是仿着来玩,可能有些地方写得不怎么规范。如果有什么问题,希望大家可以指出,谢谢!
相关推荐:
ChatGPT显示无法加载网站是怎么回事?解决方法!,glow将军ai
ChatGPT:OpenAI的创新之作-一款颠覆传统的语言模型,ai球衣号
如何下载免费AI软件,让你的工作和生活更智能
SEO查看-如何通过精确分析提升网站流量与排名,东丽网站建设价格
SEO希望:如何通过SEO优化实现网站突破,迈向成功之路,品牌网站推广软件
SEO项目指的是什么,seo项目指的是什么意思 ,写个ai
SEO本站:提升网站流量与排名的秘密武器,荆门专业的抖音seo
seo运营经理是什么,seo和运营的区别 ,皖妍ai宁慕晴o
ChatGPT遇到问题?如何解决“您的应用遇到问题,无法正常启动”困境?,ai下载增强版
中文润色:提升表达的艺术,打造无懈可击的语言魅力,广告营销推广新思路论文
AI一键生成文章免费:革新写作方式,提升创作效率
OpenAI注册问题解决方案:如何顺利通过手机号验证,反对ai头像
seo网站页面优化包括什么,seo页面优化技术 ,no ai写作
什么是seo反连接,网站反链多好还是少好 ,网易ai产品
SEO排序:如何让你的网页在搜索引擎中脱颖而出,平谷抖音seo推广招聘
ChatGPT支付时银行卡被拒绝?教你几招轻松解决问题!,国内ai换图
AI写作免费一键生成下载,助您轻松创作!
SEO伪创:提升网站排名的危险策略与如何避免,怎样介绍社交网站推广
SEO提供:如何通过精准的SEO策略提升网站流量与品牌影响力,刷关键词排名立的火星
软件AI:颠覆未来的智能革命
seo网站关键字排名优化,网站seo关键词 ,运动ai
SEO兼职:如何通过SEO兼职实现收入增长与职业突破,濮阳网站建设官网
SEO外链技巧:提升网站排名的秘密武器,ai视频生日祝福
SEO特点与实施策略:提升网站流量与排名的关键,定西抖音seo价格查询
ChatGPT页面空白无法登录?如何解决这一困扰?,温州ai字幕生成
ChatGPT网页版为什么不能用了?解析原因与解决办法,女人莫名其妙想ai
ChatGPT一经发布,便受到了用户的狂热追捧,引爆人工智能热潮,十代ai达人办公本
文章生成AI:让写作轻松高效的神奇工具
seo链接锚是什么,什么是锚链接,如何设置锚链接 ,保山智能AI
怎么用AI缩写文章,轻松提高效率的全新方法
pbootcms前端翻译插件-轻松实现网站多语言支持,拓展全球市场,st ai绘画
SEO检测,让网站排名飞升的秘密武器,高端快消食品营销推广
SEO与网络推广机构:如何选择最适合你的数字营销合作伙伴,ai写作软件性价比高吗
ChatGPT:基于Transformer技术的语言模型,开创人工智能未来,AI独战OK
seo适合什么职业,seo有前途么 ,ai小精灵
AI助手Stut:智能时代的创新引擎,开启未来工作新篇章,ai对ai的格斗游戏
SEO与SEM策略:提升网站流量与品牌曝光的双剑合璧,ai补图
打破创作边界,无限可能无限制生成文章的AI
用AI征文工具,轻松创作出精彩文章!
SEO这样做,轻松引爆流量,助力企业成长,无极标准网站优化好处
用AI写文章查重率高吗?揭秘AI写作与查重检测的关系
SEO关键词利器:如何借助精准关键词提升网站流量与排名,ai绘画客户
ChatGPT宕机恢复时间如何解决用户焦虑与技术背后的故事,ai人工智能写作火山
目前最火的AI软件有哪些?深度解析必备工具
seo需要什么部门,seo主要干什么 ,ai接入仪器
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
AI免费生成文章让创作变得轻松自如
AI生成文章免费工具,让创作变得轻松又高效,ai安心健
撰写稿子的AI,写作的“超级助手”来了!
SEO代做:让你的企业轻松登顶搜索引擎,快速提升曝光率,seo 提高注册量