最终效果如下图,点击菜单会切换Activity,有动画效果。
从早上起床就研究这个东西,因为之前一直都直接用系统提供的几个控件,从来没搞过图片背景、嵌套布局什么的,今天是第一次,没什么经验,花了一个上午才搞 定。
简单介绍一下思路,使用LinearLayout嵌套,分三部分,第一部分是顶部的标题栏,第二部分是内容,第三部分是底部菜单。参考网上的代码,一路顺 风顺水搞定,但在模拟器测试时出了问题(开发时用I9000),模拟器的屏幕是HVGA的,在上面运行看不到菜单栏。这个问题困扰了很久,网上也搜不出有 用的答案(说是用dip,不用px,我开始就是用dip的),最后还是自己冥思苦想解决了问题,解决方法也很简单,就是让内容fill_parent,然 后菜单layout_marginTop取个负值。
main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:gravity="clip_horizontal" android:layout_height="fill_parent" android:id="@+id/toplayout"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="30dip" android:background="@drawable/header" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/toptv" android:gravity="center" android:textSize="20dip" android:layout_gravity="center" android:text="@string/home"/> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="wrap_content" android:gravity="center" android:textSize="20dip" android:layout_gravity="center" android:text="@string/home" android:layout_height="fill_parent"/> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_marginTop="-50dip" android:layout_height="50dip" android:gravity="bottom" android:background="@drawable/header"> <include layout="@layout/foot" /> </LinearLayout> </LinearLayout>
foot.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="80dip" android:layout_height="80dip" android:id="@+id/home" android:gravity="center_horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="50dip" android:gravity="center" android:paddingTop="29dip" android:background="@drawable/tab_home" android:id="@+id/hometv" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/line" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="80dip" android:layout_height="wrap_content" android:gravity="center_horizontal" android:id="@+id/channel"> <TextView android:layout_width="wrap_content" android:layout_height="50dip" android:gravity="center" android:paddingTop="29dip" android:background="@drawable/tab_channel" android:id="@+id/channeltv" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/line" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="80dip" android:id="@+id/fav" android:layout_height="wrap_content" android:gravity="center_horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="50dip" android:gravity="center" android:paddingTop="29dip" android:background="@drawable/tab_fav" android:id="@+id/favtv" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/line" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="80dip" android:id="@+id/search" android:layout_height="wrap_content" android:gravity="center_horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="50dip" android:gravity="center" android:paddingTop="29dip" android:background="@drawable/tab_search" android:id="@+id/searchtv"/> </LinearLayout> </LinearLayout>
main.java:
package com.BottomMenu; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.LinearLayout; import android.widget.TextView; public class main extends Activity { private LinearLayout home, channel, fav, search; TextView toptv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); Init(); } public void Init(){ Animation anim = AnimationUtils.loadAnimation(this,R.anim.scale); findViewById(R.id.toplayout).startAnimation(anim); //这两行是启动activity的动画效果 home = (LinearLayout) findViewById(R.id.home); TextView hometv=(TextView)home.findViewById(R.id.hometv); hometv.setBackgroundResource(R.drawable.tab_home_select); home.setBackgroundResource(R.drawable.tab_two_highlight); toptv=(TextView)findViewById(R.id.toptv); channel = (LinearLayout) findViewById(R.id.channel); channel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setClass(main.this, channel.class); main.this.startActivity(intent); } }); fav = (LinearLayout) findViewById(R.id.fav); fav.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setClass(main.this, fav.class); main.this.startActivity(intent); } }); search = (LinearLayout) findViewById(R.id.search); search.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setClass(main.this, search.class); main.this.startActivity(intent); } }); }; }
动画效果scale.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/decelerate_interpolator" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" android:duration="300" /> </set>
其他几个activity代码就不贴了,反正内容都一样,下面有代码打包供大家参考。 BottomMenu
相关推荐
在Android应用开发中,底部菜单栏(Bottom Navigation Bar)是一种常见的UI设计元素,它提供了一种方便用户在应用的主要功能之间快速切换的方式。通常,底部菜单栏包含3到5个图标,每个图标代表一个主要的功能区域。...
在Android应用开发中,BottomNavigationView是一种常见的导航组件,它位于屏幕底部,通常包含几个固定选项,用户可以通过点击这些选项在不同的页面间切换。本项目"Android-BottomNavigation"旨在模仿闲鱼App的底部...
总结起来,Android Studio中的底部自定义菜单设计涉及到了Android UI组件、菜单资源管理、事件监听、数据模型以及视图更新等多个方面。通过熟练掌握这些知识点,开发者能够构建出功能丰富且用户体验优秀的Android...
在UI设计中,屏幕底部的菜单栏是一种常见的交互元素,它为用户提供了一种直观且便捷的方式来访问主要功能或页面。本示例"UIMainDemo"着重于如何在应用程序中实现这种屏幕底部的菜单栏效果。这个压缩包包含了实现这一...
在Android应用开发中,微信的底部菜单栏是一个常见的设计元素,它为用户提供了一种直观的导航方式。这个项目是关于如何在自己的Android应用中实现一个类似微信的底部菜单栏,并且能够显示未读消息的数量。下面我们将...
在Android开发中,底部...总的来说,实现底部栏菜单布局不仅涉及Android UI设计,还涵盖了事件监听、界面跳转等多个方面。通过合理地设计和编码,可以构建出类似携程旅行这样的应用主界面,为用户提供便捷的操作体验。
在处理底部菜单的点击事件时,我们通常会配合使用Fragment进行页面切换,因为它们允许在不重新加载整个Activity的情况下改变屏幕内容。使用FragmentManager和FragmentTransaction,可以轻松地在底部菜单选项之间切换...
底部导航菜单(Bottom Navigation)是Android设计规范中推荐的一种用户交互模式,用于在3到5个主要功能之间进行切换。本教程将深入探讨如何在Android应用中实现一个基于Fragment的底部动画菜单,并实现导航和各种...
总的来说,Android的底部菜单栏实现涉及了UI组件的使用、菜单资源的配置、点击事件的监听以及可能的业务逻辑处理。通过深入研究提供的源码,开发者可以提高对Android应用界面设计和交互实现的理解。
在Android应用开发中,底部导航栏(Bottom Navigation Bar)是一种常见的UI设计,它允许用户在应用的多个主功能之间快速切换。"Android底部导航栏切换TestFragment"的实践旨在实现一个与QQ应用类似的导航功能,结合...
在Android应用中,`Fragment`是可重用的UI组件,它们可以单独添加到Activity中,也可以随着底部菜单的切换而替换。在这个DEMO中,当用户点击底部菜单的不同选项时,可能对应着不同的Fragment进行显示。 3. **菜单...
在Android应用开发中,底部导航栏(Bottom Navigation Bar)是一种常见的界面设计元素,它提供了一种用户友好的方式来在多个主要功能之间切换。通常,它位于屏幕底部,包含3到5个图标,每个图标代表一个不同的页面或...
5. **布局设计**:在项目中,开发者可能使用了XML布局文件来定义界面元素的位置和样式,如使用`android:layout_gravity`属性控制PopupWindow的位置,使用`FrameLayout`或`LinearLayout`来组织Fragment的布局。...
在Android应用开发中,底部切换标签是常见的UI设计模式,为用户提供流畅的多页面导航体验。本教程将探讨如何通过Activity结合FragmentTabHost实现这一功能,即“底部切换标签(方式二)Activity+Fragment”。我们将...
在Android应用开发中,底部导航菜单(Bottom Navigation)是一种常见的用户界面设计,它允许用户在三个到五个主要功能之间快速切换。本示例"Android-不用写布局几句代码就可以实现底部菜单Fragment切换"展示了如何...
在Android应用开发中,底部导航栏(Bottom Navigation)是一种常见的用户界面设计,它允许用户在多个顶级操作之间轻松切换。本教程将详细讲解如何在Android项目中实现底部切换标签,以及如何利用Fragment来管理不同...
总结,仿微信底部导航栏的实现涉及UI设计、事件监听和页面切换等多个方面。通过封装工具类,可以提高代码复用性和项目维护性。在Android中,我们可以使用`BottomNavigationView`结合`FragmentManager`来实现;在iOS...
在Android应用开发中,创建一个类似微信的底部和顶部菜单栏是常见的需求,这不仅可以提供良好的用户界面(UI)设计,还能确保用户能够方便地访问主要功能。微信的菜单栏设计已经成为移动应用的一种典范,因此许多...
在Android应用设计中,底部导航栏(Bottom Navigation)是一种常见的UI模式,它提供了对主要功能的快速访问。 首先,我们需要理解Fragment的基本概念。Fragment可以看作是Activity的一部分,有自己的生命周期和UI。...
2. **BottomNavigationView**:这是Android Design Support Library中的一个底部导航栏组件,它提供了在多个主要操作之间切换的便捷方式。与TabLayout类似,每个菜单项对应一个`Fragment`,点击不同的菜单项会触发`...