cathome 猫家 开发日记-底部导航

0.内容页没有采用常用的 fragment.  而是采用自认为更简单的直接继承方式。

1.使用继承来实现复用。

2.基类处理大页面布局和底部的导航显示以及逻辑。

3.采用线性布局。平分。tv居中。固定字体.

4.控件采用样式来集中属性。有分支的情况采用dranable  的selecter来处理。非常简洁明了。

视图布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout android:orientation="horizontal" android:id="@+id/bottomMenu" android:layout_width="match_parent" android:layout_height="56dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:paddingLeft="1dp" android:paddingRight="1dp">
    <TextView android:id="@+id/TVmenuCategory1" style="@style/BottomMenu" android:drawableTop="@drawable/category" android:text="@string/bottomMenu1" />
    <TextView android:id="@+id/TVmenuCategory2"  style="@style/BottomMenu"  android:drawableTop="@drawable/book" android:text="@string/bottomMenu2" />
    <TextView android:id="@+id/TVmenuCategory3"  style="@style/BottomMenu"  android:drawableTop="@drawable/book" android:text="@string/bottomMenu3" />
    <TextView android:id="@+id/TVmenuCategory4"  style="@style/BottomMenu"  android:drawableTop="@drawable/book" android:text="@string/bottomMenu4" />
    <TextView android:id="@+id/TVmenuCategory5"  style="@style/BottomMenu"  android:drawableTop="@drawable/book" android:text="@string/bottomMenu5" />
</LinearLayout>
    <RelativeLayout android:id="@+id/RLayoutContent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_above="@id/bottomMenu" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="0dp" android:layout_marginTop="0dp" android:layout_marginBottom="0dp"></RelativeLayout>
</RelativeLayout>

style 统一样式 & drawnable的selector来处理不同。
<!--页面master page -->
<style name="BottomMenu">
    <item name="android:gravity">center</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_weight">1</item>
    <item name="android:textColor">@drawable/selector_bottommenu</item>
</style>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/color_green" android:state_selected="true"/>
    <item android:color="@color/color_green" android:state_checked="true"/>
    <item android:color="@color/color_grey" />
</selector>

activity.

package com.android.linson.catshome.Control;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.android.linson.catshome.R;

//1.实现整体布局,留出主页面给派生类填充 。
//2.实现底部菜单功能 。底部逻辑全部在基类这里。
public class MasterPage extends Activity implements TextView.OnClickListener
{
    //control
    private RelativeLayout mContent;
    private TextView mTVMenu1;
    private TextView mTVMenu2;
    private TextView mTVMenu3;
    private TextView mTVMenu4;
    private TextView mTVMenu5;

    //data
    private String TAG="DEBUG";
    private TextView mSelectedMenu;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.masterpage);
        FindControls();

        mSelectedMenu=mTVMenu1;
        FlushMenuSelected();
        mTVMenu1.setOnClickListener(this);
        mTVMenu2.setOnClickListener(this);
        mTVMenu3.setOnClickListener(this);
        mTVMenu4.setOnClickListener(this);
        mTVMenu5.setOnClickListener(this);
    }

    private void FindControls()
    {
        mContent=findViewById(R.id.RLayoutContent);
        mTVMenu1=findViewById(R.id.TVmenuCategory1);
        mTVMenu2=findViewById(R.id.TVmenuCategory2);
        mTVMenu3=findViewById(R.id.TVmenuCategory3);
        mTVMenu4=findViewById(R.id.TVmenuCategory4);
        mTVMenu5=findViewById(R.id.TVmenuCategory5);
    }

    @Override
    public void onClick(View v)
    {
        if(v instanceof  TextView)
        {
            TextView tempTV=(TextView)v;
            mSelectedMenu=tempTV;
            FlushMenuSelected();

            switch (tempTV.getId())
            {
                case R.id.TVmenuCategory1:
                {
                    break;
                }
            }
        }

    }
    private void FlushMenuSelected()
    {
        mTVMenu1.setSelected(false);
        mTVMenu2.setSelected(false);
        mTVMenu3.setSelected(false);
        mTVMenu4.setSelected(false);
        mTVMenu5.setSelected(false);
        mSelectedMenu.setSelected(true);
    }
}

原文地址:https://www.cnblogs.com/lsfv/p/9822562.html

时间: 2024-10-10 12:47:46

cathome 猫家 开发日记-底部导航的相关文章

cathome 猫家 开发日记-tablayout+viewpager+fragment

概述 1.tablayout.纯粹就是一个滑动菜单,只是多加一个事件,触发viewpager的滑动. 2.viewpage,是主角,一般是设定  adapter,在 adapter中,决定如何显示view,以及显示多少个view. 这里系统已经封装了一个adapter叫 fragmentadapter.转为针对view里面放fragment  的.并且主要方法为 public Fragment getItem(int i) 所以建立多个fragment  .并传递给adapter. 就可以.主体

cathome 猫家 开发日记-webservice服务 ,生成json.

概述,采用熟悉的c# 语言. 1.用asmx .微软的web服务的标准格式.方便. 2.由方法生成json字符.只是利用ms 的框架而已. 配置文档. <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> &l

cathome 猫家 开发日记-自定义控件

概述 根本就是一句话":  自定义一个类(group view的派生类),在构造函数中,生成view,并加入他们.   语句: this.addView(view); 所有的步骤,都是这句话的扩展和补充罢了. 一般的流程. 整个流程都好理解,就是属性是如何加载上去的.没有去认真研究.属性问题操作上就是感觉 one: 建立属性文件 two.在布局文件多加了一行 xmlns:custom="http://schemas.android.com/apk/res-auto" thre

Android开发关闭虚拟按钮、底部导航条

在Android开发中,遇到了一系列大大小小的问题,其中一个就是屏蔽底部实体键,我找了很多的博客也尝试了许许多多的方法,但始终不能屏蔽 HOME键,后来看见一篇博客说在Android 4.0以后,屏蔽底部HOME键必须反编译,修改Android底部原生代码,于是我便放弃了.废话不多说,我先分享一个屏蔽Android虚拟按键的方法,以及最简单的屏蔽Android的Back按钮,适合所有版本(未测试,感觉是这样): 1. Android 屏蔽Back按键 只需要重写 onKeyDown 方法就可以了

基于Mint UI开发VUE项目一之环境搭建和头部底部导航栏的实现

一:简介 Mint UI 包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要.通过它,可以快速构建出风格统一的页面,提升开发效率.真正意义上的按需加载组件.可以只加载声明过的组件及其样式文件,无需再纠结文件体积过大.考虑到移动端的性能门槛,Mint UI 采用 CSS3 处理各种动效,避免浏览器进行不必要的重绘和重排,从而使用户获得流畅顺滑的体验.依托 Vue.js 高效的组件化方案,Mint UI 做到了轻量化.即使全部引入,压缩后的文件体积也仅有 ~30kb (JS + CSS

使用wepy开发微信小程序的底部导航

前言: 最近公司在做一个微信小程序的项目,用的是类似于vue的wepy框架.我也借此机会学习和实践一下. 小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/ wepy官方文档:https://tencent.github.io/wepy/document.html#/ wepy小程序项目初始化:wepy小程序入门之项目初始化 今天的目标是开发微信小程序的底部导航 效果图: 1.打开编辑器(我用的是vscode),然后打开微信开发者工

android应用开发--------------看RadioGroup源代码,写相似单选选项卡的集成控件(如底部导航,tab等等)

博客为 有时个哥 原创.如需转载请标明出处:http://blog.csdn.net/ls703/article/details/46694967 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHM3MDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 上面就是需求设计,4个类似的布局控件.每次仅仅能选择一个.然后得到上面相应的钱数.(上面仅

android应用开发--------------看RadioGroup源码,写类似单选选项卡的集成控件(如底部导航,tab等等)

博客为 有时个哥 原创,如需转载请标明出处:http://blog.csdn.net/ls703/article/details/46694967 上面就是需求设计,4个类似的布局控件,每次只能选择一个,然后得到上面对应的钱数.(上面只是效果图,实际数据是从服务器获取,然后付到控件上) 看到这种,我们就回想到,几种实现方法. 1.把这个整体写一个布局,在xml布局中,复制粘贴,代码,凑够4个.非常不建议这样,因为4个的布局样式是一样的,只是数据可能不相同,所以我们应该写一个组合控件然后重复利用.

android开发(1):底部导航条的实现 | navigation tab | activity的创建

底部导航条,在iOS中叫tabbar,在android中叫bottombar或bottom navigation,是一个常用的切换页面的导航条. 同样,如果有良好的第三方库,我们应该优先考虑,能用好别人的东西,已经很厉害. github上的roughike/BottomBar,曾经是热度较高的库,但是已经过时了,没有再维护,加到项目也会遇到编译的问题,所以这里不使用,这里使用的是PagerBottomTabStrip,地址是:https://github.com/tyzlmjj/PagerBot