Android--通用标题栏之组合控件

前言:

在日常开发Andorid应用当中,一个App是离不开标题栏的,一般标题栏都是处于我们App的页面顶部上面,在App中加入标题栏的目的是为了用户更好的体验而设计的。然而这个标题栏大概是由三个控件组成的,分别有:返回上一页按钮、标题文本、以及标题栏右边的提交按钮或者查询按钮。那么,你可能会发现一个App当中却总是很多标题栏的,如果我们每次在Activity页面布局当中去写一个标题栏,那么这样确实是很麻烦的,你也会发现代码量其实是很多的,为了避免这种麻烦,我们可以打造一个通用的App标题栏,从而减去开发时间,在这里,为了要打造一个通用的标题栏,所以我采用了组合控件,那么下面我们一起来学习吧!


1、组合控件

组合控件的意思就是,我们并不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但我们可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。而我们想要实现通用的标题栏控件就可以采用组合控件去实现。那么下面我们一起来看看是怎样实现的。

新建一个my_title.xml文件,代码如下所示:

<?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="50dp"
    android:background="#ffcb05" >

    <ImageView
        android:id="@+id/button_left"
        android:layout_width="30dp"
        android:layout_height="25dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:background="@drawable/return_left"
        android:textColor="#fff" />

    <TextView
        android:id="@+id/title_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="首页"
        android:textColor="#fff"
        android:textSize="20sp" />

    <ImageView
        android:id="@+id/button_right"
        android:layout_width="22dp"
        android:layout_height="25dp"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_centerVertical="true"
        android:background="@drawable/search_top_right"
        android:textColor="#fff" />

</RelativeLayout>

在这个布局中,我们首先分别定义了一个返回按钮控件,TextView文本控件、以及右边查询按钮控件。然后让这个标题栏的高度根布局RelativeLayout固定为50dp。现在组合控件写好了,那么接下来要把这个组合控件封装起来,打造通用的标题栏,所以我们创建一个自定义MyTitleView去继承FramaLayout。然后把组合控件封装到MyTitleView中。


创建名为:MyTitleView文件,代码如下:

public class MyTitleView extends FrameLayout {  
    private ImageView return_iv;    //返回按钮  
    private TextView title_tv;      //标题名称  
    private ImageView query_iv;     //查询按钮  
  
    public MyTitleView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        //在构造方法中加载我们组合控件布局,以及去查找我们控件的id  
        LayoutInflater.from(context).inflate(R.layout.my_title, this);  
        return_iv = (ImageView) findViewById(R.id.return_iv);  
        title_tv = (TextView) findViewById(R.id.title_tv);  
        query_iv = (ImageView) findViewById(R.id.query_iv);  
        //当我们点击返回的时候,关闭当前页面  
        return_iv.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                ((Activity) getContext()).finish();  
            }  
        });  
    }  
  
    //返回按钮点击事件构造方法  
    public void setReturnListener(OnClickListener l) {  
        return_iv.setOnClickListener(l);  
    }  
  
  
    //设置标题名称文本构造方法  
    public void setTitleText(String text) {  
        title_tv.setText(text);  
    }  
  
    //设置标题名称字体大小构造方法  
    public void setTitleTextSize(int textsize) {  
        title_tv.setTextSize(textsize);  
    }  
  
    //设置查询按钮隐藏构造方法 因为有时候页面没有查询按钮,那么我们可以把它隐藏起来  
    public boolean setQuertVisibility(boolean isVisibility) {  
        if (isVisibility == true) {  
            query_iv.setVisibility(GONE);  
        } else {  
            query_iv.setVisibility(VISIBLE);  
        }  
        return isVisibility;  
    }  
}
}
在这个MyTitleView当中,其实没什么的,主要就是把我们组合控件布局里面加载进去,并且把他们控件取出来,作为下面那些构造方法的对象,有了这些常用的构造方法,以后我们就能在其他Activity页面当前随意的调用了并且设置字体大小,返回事件,文本等等....我们只需要在其他Activity当中去创建我们的 MyTitleView 之后,通过 MyTitleView 对象之后就能调用了,这样一来也方便许多...有关如何调用,下面我们再具体介绍....

到了这里,一个自定义的MyTitleView通用标题栏也就完成了,那么在其他Activity页面当中,如何使用呢?其实是非常容易的,首先创建一个名为:home_activity.xml,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical">  
  
    <com.soft0754.view.MyTitleView  
        android:id="@+id/title_view"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content">  
    </com.soft0754.view.TitleView>  
  
</LinearLayout>
在这里 其实就是把我们封装好的自定义MyTitleView放进去当做这个Activity的标题栏。

布局好了,那么接来下再创建我们的HomeActivity,具体代码如下:

public class HomeActivity extends AppCompatActivity{  
  
    private MyTitleView title_view;  
  
    @Override  
    protected void onCreate(@Nullable Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.home_activity);  
        title_view= (MyTitleView) findViewById(R.id.title_view);  
    }  
}
在HomeActivity当中,只是通过一个Activity去加载我们布局的内容,下面我们先运行起来看看效果



效果确实还可以,但是大家可能已经发现上面多了一个ActionBar标题栏,确实如此,不过没关系,我们在清单文件中application下面的theme主题样式里面把ActionBar标题栏清掉就可以了,具体代码如下:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

</resources>

取消ActionBar代码:

 <item name="windowActionBar">false</item>
 <item name="windowNoTitle">true</item>

取消ActionBar之后下面我们再运行看看效果图:

 
好了, 效果已经达到我们的预期了,那么现在运行好了之后,我们点击一下标题栏中左边的返回按钮,就可以关闭当前的Activity了,
如果我们想修改标题栏中的字体大小,或者修改返回按钮为其他监听事件,那么我们只需要在Activity当中findViewById获得MyTitleView对象实例,
然后通过这个对象就可以去设置字体大小,返回事件等等了,具体可看看下面案例,下面我将分别修改字体、修改字体大小,返回监听事件。以及隐藏查询按钮等等
那么下面代码如下:
public class HomeActivity extends AppCompatActivity{

    private MyTitleView title_view;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_activity);
        title_view= (MyTitleView) findViewById(R.id.title_view);
        title_view.setTitleText("修改后的标题");//修改字体文本
        title_view.setTitleTextSize(20);	//修改字体大小
        title_view.setQuertVisibility(true);	//隐藏查询控件
        title_view.setReturnListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MyTitleActivity.this,"return",Toast.LENGTH_SHORT).show();
            }
        });
      
    }
}

代码写好了之后,那么让我们一起看看效果图!

没错,确实修改了字体大小,文本,隐藏了查询按钮,并且设置了返回监听事件等等..

好了,今天有关通用标题栏之组合控件讲解到这里,希望对大家日常开发中有所帮助!
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值