经过分析,上述按钮效果实际上就是一个布局,一个最简单不过的垂直线性布局,上部分是一个ImageView,下部分是一个TextView,这个布局可点击、可设置监听。

我们首先要编写自己的ImageButton类,然后在主布局文件中为我们自定义的Button编写布局,最后在Activity中调用我们自定义ImageButton即可。

首先,我们编写一个MyImageButton类,继承自LinearLayout

package com.billhoo.study; 

import android.content.Context;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; //自定义ImageButton,模拟ImageButton,并在其下方显示文字
//提供Button的部分接口
public class MyImageButton extends LinearLayout { public MyImageButton(Context context, int imageResId, int textResId) {
super(context); mButtonImage = new ImageView(context);
mButtonText = new TextView(context); setImageResource(imageResId);
mButtonImage.setPadding(, , , ); setText(textResId);
setTextColor(0xFF000000);
mButtonText.setPadding(, , , ); //设置本布局的属性
setClickable(true); //可点击
setFocusable(true); //可聚焦
setBackgroundResource(android.R.drawable.btn_default); //布局才用普通按钮的背景
setOrientation(LinearLayout.VERTICAL); //垂直布局 //首先添加Image,然后才添加Text
//添加顺序将会影响布局效果
addView(mButtonImage);
addView(mButtonText);
} // ----------------public method-----------------------------
/*
* setImageResource方法
*/
public void setImageResource(int resId) {
mButtonImage.setImageResource(resId);
} /*
* setText方法
*/
public void setText(int resId) {
mButtonText.setText(resId);
} public void setText(CharSequence buttonText) {
mButtonText.setText(buttonText);
} /*
* setTextColor方法
*/
public void setTextColor(int color) {
mButtonText.setTextColor(color);
} // ----------------private attribute-----------------------------
private ImageView mButtonImage = null;
private TextView mButtonText = null;
}

然后在main布局中为我们自定义的Button写xml布局,注意,我们的“按钮”实际上是一个线性布局,因此xml中应该写LinearLayout而不是Button或者ImageButton

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"> <!-- 这就是我们的“数据管理按钮” -->
<LinearLayout android:id="@+id/ll_bt_data_config"
android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

最后,在Activity中为我们自定义的按钮设置监听

package com.billhoo.study; 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout; public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); btDataConfig = new MyImageButton(this, R.drawable.option, R.string.text); //获取包裹本按钮的容器
llbtDataConfig = (LinearLayout) findViewById(R.id.ll_bt_data_config); //将我们自定义的Button添加进这个容器
llbtDataConfig.addView(btDataConfig); //设置按钮的监听
btDataConfig.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
btDataConfig.setText("按钮被点击过了");
}
});
} private LinearLayout llbtDataConfig = null; //main布局中包裹本按钮的容器
private MyImageButton btDataConfig = null;
}

效果:

Android 自定义Android带图片和文字的ImageButton的更多相关文章

  1. android 自定义组件-带图片的textView

    1. 定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <decla ...

  2. 自定义带图片和文字的ImageTextButton

    今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认为,多一种解决方式,就多一种举一反三的学 ...

  3. 基于bootstrap的轮播广告页,带图片和文字

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  4. Android 自定义Gallery浏览图片

    之前写的<Android ImageSwitcher和Gallery的使用>一文中提到我在教室一下午为实现那个效果找各种资料.期间在网上找了一个个人觉得比较不错的效果,现在贴图上来: 其实 ...

  5. 自定义带图片和文字的Button的排版--陈棚

    自定义button,动态加载图片与文字 [footView addSubview:btnAllChoose]; [btnAllChoose setTitle:str forState:UIContro ...

  6. Android 自定义android控件EditText边框背景

    在我们进行Android应用界面设计和时候,为了界面风格的统一,我们需要对一些控件进行自定义.比如我们的应用采用的蓝色风格,但是 android的EditText控制获得焦点后显示的却是黄色的边框背景 ...

  7. 【Wince-自定义控件】ImageButton 带图片、文字

    1.看图 可以实现MouseDown改变背景颜色或背景图片. 遗憾是没有实现键盘触发按钮事件. 2.选择继承自Control基类 public class ImageButton : Control ...

  8. Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)

    前段时间写了如何获取相册和拍照之后的照片并且进行显示和上传,这一次是如何进行圆形图像制作,经常看我写的笔记的人会知道,我很懒.那么我就懒的自定义了,目前需求就用原生的就好了,大神的轮子,我会在后面进行 ...

  9. Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示

    Android中的ImageView只能显示矩形的图片,为了用户体验更多,Android实现圆角矩形,圆形或者椭圆等图形,一般通过自定义ImageView来实现,首先获取到图片的Bitmap,然后通过 ...

随机推荐

  1. Mysql主从同步(复制)

    目录: mysql主从同步定义      主从同步机制 配置主从同步      配置主服务器      配置从服务器 使用主从同步来备份      使用mysqldump来备份      备份原始文件 ...

  2. mysql-5.5.46源码编译安装

    1.安装准备 cat /etc/redhat-release uname -r yum install ncurses-devel cmake automake autoconf make gcc g ...

  3. python杂记-2(python之文件)

    文件打开函数:f = open 表1-1:open函数中模式参数常用值 打开模式 描述 'r' 读模式 'w' 写模式 'a' 追加模式 'b' 二进制模式 '+' 读/写模式 表1-2:文件对象方法 ...

  4. Python数据结构——链表的实现

    链表由一系列不必在内存中相连的结构构成,这些对象按线性顺序排序.每个结构含有表元素和指向后继元素的指针.最后一个单元的指针指向NULL.为了方便链表的删除与插入操作,可以为链表添加一个表头. 删除操作 ...

  5. 新手自学ABAP(1)--数据类型

    一.DATA语句 1.TYPE type ex:  可以利用冒号声明多个变量. DATA : gv_num1 TYPE I,   gv_num2 TYPE I. 2.LIKE num   (num可以 ...

  6. c++各种数据类型表示范围

    符号属性     长度属性     基本型     所占位数     取值范围       输入符举例      输出符举例 --            --          char        ...

  7. using System.Threading.Tasks;

    using System.Threading.Tasks; .Net并行库介绍——Task1

  8. Leetcode-Read N Characters Given Read4 II

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...

  9. [转载]C#时间函数

    本文转自livedanta的博客的<C#时间函数> DateTime DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21 ...

  10. 简单易用的导出文件(Excel、word等各种格式)的方法

    以前学习过NPOI导出数据到Excel中,代码较长,不易记忆.工作中,看到了其他同事写的代码,研究了一下,贴出来,共同学习. 使用这种方式,不仅可以设置表格的样式,而且代码简洁. 首先,在后台中通过S ...