前言:
在上篇文章,我总结了怎么自定义和提取控件属性,这里呢,我只讲怎样自定义一个简单的导航栏,写得不如意的地方,请见谅~
概述:
- 环境:Android Studio 3.42
- 语言:Java
- 特点:简单,易懂
展示:

简要说明:
这个导航栏由三部分构成
两个Button按钮 BACK 和 SHARE
外加中间的文本TextView
具体实现:
-
自定义Navigation标题栏
上篇文章我已经提到怎样自定义属性和提取控件属性,这里再讲一下怎样提取属性
第一步 在res文件下的values属性里新建一个attrs的资源文件

第二步 实现属性的封装
大家注意
<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