Android仿QQ空间底部菜单示例代码

之前曾经在网上看到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只是仿着来玩,可能有些地方写得不怎么规范。如果有什么问题,希望大家可以指出,谢谢!

时间: 2024-09-14 07:50:27

Android仿QQ空间底部菜单示例代码的相关文章

Android仿QQ空间底部菜单示例代码_Android

之前曾经在网上看到Android仿QQ空间底部菜单的Demo,发现这个Demo有很多Bug,布局用了很多神秘数字.于是研究了一下QQ空间底部菜单的实现,自己写了一个,供大家参考.效果如下图所示:   1.实现原理很简单,底部菜单是一个水平分布的LinearLayout,里面又是五个LinearLayout,它们的layout_weight都为1,意味着底部菜单的子控件将屏幕宽度平均分为5部分.五个LinearLayout除了中间那个,其余都在里面放置ImageView和TextView(中间先空

基于jQuery实现仿QQ空间送礼物功能代码_jquery

我们在QQ空间里面有一个送礼物的功能,显示了最近过生日的人.我们只要把鼠标放到如下图的生日快乐那标签上,就会显示可以给该人送的礼物!! 如下图所示: 单击其中的一个礼物,就会马上送出去.但是我们现在是要说的还有单击更多的时候,会另外弹出一个新的窗口在当前页面最前面!如下图显示: 怎么实现那上面的功能呢? 就是把鼠标放上去,弹出一天tips,单击tips里面的控件,之后弹出另外一个弹出框. 网上就会有很多比较好的插件,就先到网上去找了相对应的jquery插件. jquery中tips的有很多插件,

Android仿QQ空间动态界面分享功能

先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 和 模糊搜索,反复快速滑动仍然非常流畅. 缓存机制使得数据可在启动界面后瞬间加载完成. 动态详情界面MomentActivity支持 (取消)点赞.(删除)评论.点击姓名跳到个人详情 等. 只有1张图片时图片放大显示,超过1张则按九宫格显示. 用到的CommentContainerView和Mom

Android仿微信页面底部导航效果代码实现_Android

大家在参考本地代码的时候要根据需要适当的修改,里面有冗余代码小编没有删除.好了,废话不多说了,一切让代码说话吧! 关键代码如下所示: .java里面的主要代码 public class MainActivity extends BaseActivity implements TabChangeListener { private Fragment[] fragments; private FragZaiXianYuYue fragZaiXianYuYue; private FragDaoLuJi

android仿qq空间、微信朋友圈图片展示

废话不多说,先上效果图 因为最近需要做朋友圈功能,所以在此记录一下,其实很多人不明白的一点应该是在图片的排列上面吧,不规则的排列,其实很简单的,就是一个GridView,然而你xml光光写GridView是不行的哦,你们会发现,图片只显示一行,而且这个gridView还可以滑动,是吧,其实我们得重写GridView的onMeasure方法,使其扩大至内容的最大状态. 项目类图 内容不多,接下来就一一讲解吧 PictureGridView.java 重写GridView的onMeasure方法 p

Android仿QQ空间主页面的实现

今天模仿安卓QQ空间,效果如下:    打开程序的启动画面和导航页面我就不做了,大家可以模仿微信的那个做一下,很简单.这次主要做一下主页面的实现,下面是主页面的布局: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:l

Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果_Android

我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: 这个要实现这个效果可以分几步进行 1.第一步自定义PopupWindow,实现如图的样式,这个继承PopupWindow自定义布局很容易实现 2.得到点击按钮的位置,根据位置是否在屏幕的中间的上方还是下方,将PopupWindow显示在控件的上方或者下方 3.适配问题,因为PopupWindow上面的操作列表

Android仿QQ长按删除弹出框功能示例

废话不说,先看一下效果图,如果大家感觉不错,请参考实现代码: 对于列表来说,如果想操作某个列表项,一般会采用长按弹出菜单的形式,默认的上下文菜单比较难看,而QQ的上下文菜单就人性化多了,整个菜单给用户一种气泡弹出的感觉,而且会显示在手指按下的位置,而技术实现我之前是使用popupWindow和RecyclerView实现的,上面一个RecyclerView,下面一个小箭头ImageView,但后来发现没有必要,而且可定制化也不高,还是使用多个TextView更好一点. 我封装了一下,只需要一个P

Android带你解析ScrollView–仿QQ空间标题栏渐变

绪论 今天来研究的是ScrollView-滚动视图,滚动视图又分横向滚动视图(HorizontalScrollView)和纵向滚动视图(ScrollView),今天主要研究纵向的.相信大家在开发中经常用到,ScrollView的功能已经很强大了,但是仍然满足不了我们脑洞大开的UI设计师们,所以我们要自定义-本篇文章主要讲监听ScrollView的滑动实现仿QQ空间标题栏渐变,先看一下效果图: 好了我们切入主题. 有可能你不知道的那些ScrollView属性 android:scrollbars