Android导航栏拓展

热门标签

,

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

前言:

在上篇文章,我总结了怎么自定义和提取控件属性,这里呢,我只讲怎样自定义一个简单的导航栏,写得不如意的地方,请见谅~

概述:
  • 环境:Android Studio 3.42
  • 语言:Java
  • 特点:简单,易懂
展示:
Android导航栏拓展
image.png
简要说明:
这个导航栏由三部分构成 两个Button按钮 BACK 和 SHARE 外加中间的文本TextView
具体实现:
  • 自定义Navigation标题栏
上篇文章我已经提到怎样自定义属性和提取控件属性,这里再讲一下怎样提取属性
第一步 在res文件下的values属性里新建一个attrs的资源文件
Android导航栏拓展
image.png
第二步 实现属性的封装

大家注意
<declare-styleable name="MyNavigation">这行代码表示需要封装属性的类,就是我们自定义的导航栏
<attr name="isBackShow" format="boolean"></attr>这行代码和下面的一样,第一个参数是我们自己设置的属性名,第二个是它的类型,例如布尔类型boolean,整型integer,颜色color类型 下一步在xml中使用会用到

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="MyNavigation">
        <attr name="isBackShow" format="boolean">
        </attr>
        <attr name="isShareShow" format="boolean">
        </attr>
        <attr name="isTextShow" format="boolean">
        </attr>
        <attr name="title" format="string">
        </attr>
    </declare-styleable>

</resources>

第三步 在xml文件里使用 来到activity_main.xml文件里 声明导航栏属性 这里包括系统的和自定义的 自定义的我们已经封装好了 这里直接使用会有提示
 <com.example.day_6.MyNavigation
        android:id="@+id/navigation_container"
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:background="#f00"
        app:isBackShow="true"
        app:isShareShow="true"
        app:isTextShow="true"
        app:title="自定义导航栏"/>

第五步 实现提取属性 来到自定义导航栏的类

大家注意private void init(Context context, AttributeSet attrs){}这个我们自定义的方法里有两个参数,都是提取控件属性需要的,第一个参数获取环境,第二个参数则含有控件的所有属性,具体实现如下

 private void init(Context context, AttributeSet attrs)
    {
        setGravity(CENTER_VERTICAL);
        //取出自定义的属性
        TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyNavigation);
        boolean isBack = typedArray.getBoolean(R.styleable.MyNavigation_isBackShow,true);
        boolean isShare = typedArray.getBoolean(R.styleable.MyNavigation_isShareShow,true);
        boolean isText = typedArray.getBoolean(R.styleable.MyNavigation_isTextShow,true);
        String title = typedArray.getString(R.styleable.MyNavigation_title);
        //设置属性
        setShowText(isText,title);
        setShowBack(isBack,"back");
        setShowShare(isShare,"share");
    }

小结:如果大家还有什么不懂,可以去看我的上一篇文章
  • 下面给导航栏按钮设置监听事件,具体实现我还没有完成,只是在点击方法那里还有一点问题 但是框架已经搭建好了
前言:

给导航栏设置监听事件是在自定义控件内部设置点击事件,外部具体实现点击事件效果
内部
主要是4步:接口定义抽象点击方法 设置外部环境添加监听方法 记录监听对象 按钮实现监听对象的抽查点击方法 具体实现如下

  • 第一步
//定义接口
    public interface onClcikedListener{
        void onClicked();
    }
  • 第二步
 //设置监听方法
    private void setListener(onClcikedListener listener){
        this.listener = listener;
    }
  • 第三步
//记录监听对象
    private onClcikedListener listener;
  • 第四步
 //设置点击事件
               share.setOnClickListener(new OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       if (listener != null){
                           listener.onClicked();
                       }
                   }
               });

外部
外部具体实现点击效果 这里我在MainActivity里实现了上面定义的接口 具体的点击方法效果大家可以自己定义 我会在下篇文章完成点击效果

public class MainActivity extends AppCompatActivity implements MyNavigation.onClcikedListener
 //实现点击事件
    @Override
    public void onClicked() {
//  下篇文章实现
    }

总结:这个Demo比较有难度,适合想挑战自己的人来做,当然每个人都可以
源码附上: https://pan.baidu.com/s/1rS2CuEFMQoE-sSRdrwPNbQ&shfl=shareset 提取码: 627k

 

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术狗|博客
原文地址:《Android导航栏拓展》 发布于2019-10-28

分享到:
赞(0)

评论 抢沙发

5 + 5 =


Android导航栏拓展

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录