Android仿QQ空间底部菜单
来源:互联网 发布:基于nodejs的cms 编辑:程序博客网 时间:2024/05/14 22:33
之前曾经在网上看到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 stubimage.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只是仿着来玩,可能有些地方写得不怎么规范。如果有什么问题,希望大家可以指出,谢谢!
谢谢大家的支持!以前一直要大家留邮箱发代码实在太麻烦了,所以Shamoo把代码上传到资源。链接:点击打开链接
需要一分资源分,大家评论一下那一分就还回来了,别恨我,哈哈~~
- Android仿QQ空间底部菜单
- Android仿QQ空间底部菜单
- Android底部菜单(中间功能键)仿qq空间客户端
- android特效集锦系列之六 仿QQ空间底部菜单
- 高仿QQ空间首页底部菜单+弹出菜单+中间部分凸起
- 自定义 仿QQ底部菜单popWindow
- 滑动菜单方案之四:Fragment+PopupWindow仿QQ空间最新版底部菜单栏
- Android仿QQ空间
- Android仿QQ空间
- Android仿QQ空间
- Android高仿qq及微信底部菜单的几种实现方式
- Android高仿QQ及微信底部菜单的多种实现方式【附源码地址】
- 【附源码地址】Android高仿QQ及微信底部菜单的多种实现方式
- 【Android UI设计与开发】第09期:Fragment+PopupWindow仿QQ空间最新版底部菜单栏
- android实现顶部底部标题栏固定 中间可滚动,仿QQ空间的主界面布局
- 【Android UI设计与开发】第09期:底部菜单栏(四)Fragment+PopupWindow仿QQ空间最新版底部菜单栏
- 【Android UI设计与开发】第09期:底部菜单栏(四)Fragment+PopupWindow仿QQ空间最新版底部菜单栏
- 【Android UI设计与开发】第09期:底部菜单栏(四)Fragment+PopupWindow仿QQ空间最新版底部菜单栏
- 一个按键液晶多级菜单设计方法
- 考虑更换win8触屏本
- iOS 开发 AppDelegate.m 解说
- 求把一个序列分为两个两组,两组各自和相差最小的最大的那个和
- (黑马程序员)collections集合同步的使用
- Android仿QQ空间底部菜单
- 《代码的未来》 第一章:编程的时间和空间
- 中国互联网
- 利用Java的动态代理模式动态加载属性
- 大数据(big data)
- iPhone应用开发从入门到精通
- HTML 5开发精要与实例详解
- c3p0 You can't operate on a closed Connection解决办法
- PHP中的is_callable函数