zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

AndroidQQ代码 示例 空间 菜单 底部
2023-06-13 09:15:01 时间
之前曾经在网上看到Android仿QQ空间底部菜单的Demo,发现这个Demo有很多Bug,布局用了很多神秘数字。于是研究了一下QQ空间底部菜单的实现,自己写了一个,供大家参考。效果如下图所示:
 
1、实现原理很简单,底部菜单是一个水平分布的LinearLayout,里面又是五个LinearLayout,它们的layout_weight都为1,意味着底部菜单的子控件将屏幕宽度平均分为5部分。五个LinearLayout除了中间那个,其余都在里面放置ImageView和TextView(中间先空着,什么都不放,后面用来放底盘和加号的)。
2、中间的加号和底盘是用FramLayout实现的,现在底部居中的位置放置底盘,然后在相同位置放置加号,就搞定了。
3、设置加号的触摸事件,弹窗是用PopupWindow实现的,然后再把加号的图片替换成乘号就搞定了。代码如下所示:
ButtomMenuActivity.java:
复制代码代码如下:

packagecom.shamoo.qqbuttommenu;
importcom.shamoo.qqbuttommenu.R;
importandroid.app.TabActivity;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.graphics.Color;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.os.Bundle;
importandroid.view.Gravity;
importandroid.view.LayoutInflater;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.View.OnTouchListener;
importandroid.view.WindowManager;
importandroid.widget.AbsListView;
importandroid.widget.FrameLayout;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.PopupWindow;
importandroid.widget.PopupWindow.OnDismissListener;
importandroid.widget.RadioButton;
importandroid.widget.TabHost;
publicclassButtomMenuActivityextendsTabActivity{
FrameLayoutfmpan;
TabHosttabHost;
ImageViewimage;
FrameLayoutfm;
LayoutInflaterinflater;
privateRadioButtontab_home,tab_second;
PopupWindowpopup;

publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
initView();
fm.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
image.setImageResource(R.drawable.toolbar_plusback);
showWindow(fmpan);
}
});
}
privatevoidinitView(){
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);
}

privatevoidshowWindow(Viewparent){
if(popup==null){
LayoutInflaterlayoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Viewview=layoutInflater.inflate(R.layout.write_tab,null);
//创建一个PopuWidow对象
popup=newPopupWindow(view,LinearLayout.LayoutParams.MATCH_PARENT,320);
//设置焦点在弹窗上
popup.setFocusable(true);
//设置允许在外点击消失
popup.setOutsideTouchable(true);
//设置弹窗消失事件监听
popup.setOnDismissListener(newOnDismissListener(){
publicvoidonDismiss(){
//TODOAuto-generatedmethodstub
image.setImageResource(R.drawable.toolbar_plus);
}
});
//这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景
popup.setBackgroundDrawable(newBitmapDrawable());
popup.setTouchInterceptor(newOnTouchListener(){
publicbooleanonTouch(Viewview,MotionEventevent){
if(event.getAction()==MotionEvent.ACTION_OUTSIDE){
popup.dismiss();
image.setImageResource(R.drawable.toolbar_plus);
returntrue;
}
returnfalse;
}
});
}
if(!popup.isShowing()){
popup.showAsDropDown(parent,Gravity.CENTER,0);
}
}
}

tab.xml:
复制代码代码如下:

<?xmlversion="1.0"encoding="utf-8"?>
<TabHostxmlns: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:
复制代码代码如下:
<?xmlversion="1.0"encoding="utf-8"?>
<FrameLayoutxmlns: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只是仿着来玩,可能有些地方写得不怎么规范。如果有什么问题,希望大家可以指出,谢谢!