android自定义View之(七)------自定义控件组合仿actionbar控件

我们前面写了6个自定义view的样例,这都是全新自已画的控件。在这个样例中,我们来用几个现有的控件来组合成一个新的控件。

效果图:

我们用二个Button和一个TextView组合来成为一个actionbar,下面先来一个效果图:

关键代码:

(1)res/layout/custom_action_bar.xml----组合控件布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/button_ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_ok_click"
		android:layout_alignParentLeft="true"/>

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="gone"
        />

    <Button
        android:id="@+id/button_no"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_no_click"
        android:layout_alignParentRight="true"/>

</RelativeLayout>

(2)CustomActionbar.java------自定义组合控件

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class CustomActionbar extends RelativeLayout{

	private Button button_ok;
	private Button button_no;
	private TextView title;

	private ActionbarClickedListener actionbarClickedListener;

	public CustomActionbar(Context context) {
        this(context, null);
    }

    public CustomActionbar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomActionbar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        LayoutInflater.from(context).inflate(R.layout.custom_action_bar, this, true);
    }

    protected void onFinishInflate() {
        super.onFinishInflate();
        button_ok = (Button) findViewById(R.id.button_ok);
        button_ok.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
				  if (actionbarClickedListener != null) {
					  actionbarClickedListener.onActionbarOKClicked();
	                }
			}
		});
        button_no = (Button) findViewById(R.id.button_no);
        button_no.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
				  if (actionbarClickedListener != null) {
					  actionbarClickedListener.onActionbarCancelClicked();
	                }
			}
		});

        title = (TextView) findViewById(R.id.title);
    }

    public void setTitle(int resId){
    	title.setText(resId);
    	title.setVisibility(View.VISIBLE);
    }

    public void setActionbarClickedListener(ActionbarClickedListener actionbarClickedListener){
    	this.actionbarClickedListener = actionbarClickedListener;
    }

    public interface ActionbarClickedListener {
        public void onActionbarOKClicked();
        public void onActionbarCancelClicked();
    }
}

(3)res/layout/activity_main.xml-------主文件布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="wrap_content">

<com.example.customviewactionbar.CustomActionbar

android:id="@+id/customActionbar"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

</RelativeLayout>

(4)MainActivity.java-----主文件

import com.example.customviewactionbar.CustomActionbar.ActionbarClickedListener;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class MainActivity extends Activity implements ActionbarClickedListener{

	public static final String TAG ="CustomActionbar";

	private CustomActionbar customActionbar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
	}

	private void init() {
		// TODO Auto-generated method stub
		customActionbar = (CustomActionbar) findViewById(R.id.customActionbar);
		customActionbar.setActionbarClickedListener(this);
		//customActionbar.setTitle(getResources().getText(R.string.hello_world));
		customActionbar.setTitle(R.string.hello_world);
	}

	@Override
	public void onActionbarOKClicked() {
		// TODO Auto-generated method stub
		Log.i(TAG,"click_ok");
	}

	@Override
	public void onActionbarCancelClicked() {
		// TODO Auto-generated method stub
		Log.i(TAG,"click_cancel");
		finish();
	}
}

组合控件自定义view总结:

1.自定义组合控件得到想要的控件

2.自定义控件,导入布局文件,实现自已想要控件

3.在其它布局文件中使用

源码下载:

http://download.csdn.net/detail/hfreeman2008/8421039

参考资料:

1.Android软件开发之 自定义控件

http://blog.csdn.net/jackhenry/article/details/7340474

2.android - 自定义(组合)控件 + 自定义控件外观

http://www.cnblogs.com/bill-joy/archive/2012/04/26/2471831.html

时间: 2024-12-20 20:29:30

android自定义View之(七)------自定义控件组合仿actionbar控件的相关文章

Android自定义View的实现方法,带你一步步深入了解View(四)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不 知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析.视图的绘制流程. 视图的状态及重绘等知识,算是把View中很多重要的知识点都涉及到了.如果你还没有看过我前面的几篇文章,建议先去阅读一下,多了解一些原理方面的东 西. 之前我有承诺过,会在View这个话题上多写几篇博客,讲一讲View的

【转】Android自定义View的实现方法,带你一步步深入了解View(四)

原文网址: 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析.视图的绘制流程.视图的状态及重绘等知识,算是把View中很多重要的知识点都涉及到了.如果你还没有看过我前面的几篇文章,建议先去阅读一下,多了解一些原理方面的东西. 之前我有承诺过,会在View这个话题上多写几篇博客,讲一讲Vi

android自定义view(一),打造绚丽的验证码

前言:我相信信念的力量,信念可以支撑起一个人,一个名族,一个国家.正如"人没有梦想和咸鱼有什么区别"一样,我有信念,有理想,所以我正在努力向着梦想前进~. 自定义view,如果是我,我首先要看到自定义view的效果图,然后再想想怎么实现这种效果或功能,所以先贴上自定义验证码控件的效果图: 怎么样,这种验证码是不是很常见呢,下面我们就自己动手实现这种效果,自己动手,丰衣足食,哈哈~ 一. 自定义view的步骤 自定义view一直被认为android进阶通向高手的必经之路,其实自定义vie

Android自定义控件_自绘控件

控件的划分:自绘控件.组合控件.继承控件 每种方式是如何自定义View的? 第一:自绘控件 继承view,重写onDraw方法,在布局文件里面引用     示例:水波纹 WaterRipplesActivity 1 public class WaterRipplesActivity extends Activity { 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(saved

【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53470872 本文出自[DylanAndroid的博客] Android自定义View实战之仿百度加载动画一种优雅的Loading方式 第一个仿百度加载动画用ObjectAnimator属性动画操作ImageView的属性方法实现 第二个仿百度加载动画第二种实现方式用ValueAnimator原生的ondraw方法实现 第三个扔球动画-水平旋转动画 第四个扔球动画-垂直旋转动

Android 自定义View 三板斧之一——组合现有控件

通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 上文说过了如何继承现有控件来自定义控件,这节我们来讨论第二个议题.怎么将控件组合来实现一个功能强大的自定义控件. 先看看创建组合控件的好处吧,创建组合控件能够很好的创建具有组合功能的控件集合.那我们一般又是怎么做的了,一般我们来继承一个合适的ViewGroup,再为他创建一个新功能,从而就形成了一个新功能的控件.我们还

Android自定义View之组合控件 ---- LED数字时钟

先上图 LEDView效果如图所示. 之前看到一篇博客使用两个TextView实现了该效果,于是我想用自定义控件的方式实现一个LEDView,使用时即可直接使用该控件. 采用组合控件的方式,将两个TextView叠放在一起,再使用digital-7.ttf字体来显示数据,从而达到LED的效果.代码如下: LEDView.class package ione.zy.demo; import java.io.File; import java.util.Calendar; import java.u

android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检索

我们的手机通讯录一般都有这样的效果,如下图: OK,这种效果大家都见得多了,基本上所有的Android手机通讯录都有这样的效果.那我们今天就来看看这个效果该怎么实现. 一.概述 1.页面功能分析 整体上来说,左边是一个ListView,右边是一个自定义View,但是左边的ListView和我们平常使用的ListView还有一点点不同,就是在ListView中我对所有的联系人进行了分组,那么这种效果的实现最常见的就是两种思路: 1.使用ExpandableListView来实现这种分组效果 2.使

android自定义View之(六)------高仿华为荣耀3C的圆形刻度比例图(ShowPercentView)

为什么写这篇文章: 显示当前的容量所占的比例,表现当前计划的进度,一般都会采用百分比的方式,而图形显示,以其一目了然的直观性和赏心悦目的美观形成为了我们的当然的首选. 在图形表示百分比的方法中,我们有用画圆的圆形进度条的方法<<android自定义View之(二)------简单进度条显示样例篇>>,也有用画弧形的进度条的方法<<android自定义View之(三)------视频音量调控样例>>,今天看到华为荣耀3C的一个界面: 个人觉得这个表示比例的圆形