项目中的需求往往十分怪异,例如在按钮文字的左边加一个图标,这样按钮内部既有文字又有图片,乍看之下Button和ImageView都没法直接使用,若用LinearLayout对ImageView和Button组合布局,这样固然可行,但是布局文件会冗长许多

其实有一个既简单又灵活的办法,在文字周围放置图片,只使用Button就能实现,具体可在XML布局文件中设置一下5个属性

drawableTop : 指定文本上方的图形

drawableBottom : 指定文本下方的图形

drawableLeft : 指定文本左边的图形

drawableRight : 指定文本右边的图形

drawablePadding : 指定图形与文本的间距

示例:

<Button
    android:id="@+id/btn_icon"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:drawableLeft="@mipmap/ic_launcher"
    android:text="程序员"/>

若在代码中实现,则课调用如下方法

setCompoundDrawables : 设置文本周围图形的位置,接受四个参数,可分别设置为左边、上边、右边、下边的图形

setCompoundDrawablePadding : 设置图形与文本的间距

下面的代码演示在按钮中变换图标位置的功能

XML布局如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"tools:context="sxpi.com.myapplication.MainActivity"><Buttonandroid:id="@+id/btn_icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="程序员" /><Buttonandroid:id="@+id/left"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图标在左" /><Buttonandroid:id="@+id/right"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图片在右" /><Buttonandroid:id="@+id/top"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图片在上" /><Buttonandroid:id="@+id/bottom"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="图片在下" />
</LinearLayout>

程序如下

import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{private Button btn_icon;private Drawable drawable;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_icon=(Button)findViewById(R.id.btn_icon);drawable=getResources().getDrawable(R.mipmap.ic_launcher);//必须设置图片大小,否则不显示图片drawable.setBounds(0,0,drawable.getMinimumWidth(),drawable.getMinimumHeight());findViewById(R.id.left).setOnClickListener(this);findViewById(R.id.right).setOnClickListener(this);findViewById(R.id.top).setOnClickListener(this);findViewById(R.id.bottom).setOnClickListener(this);}@Overridepublic void onClick(View v) {if (v.getId()==R.id.left){btn_icon.setCompoundDrawables(drawable,null,null,null);}else if (v.getId()==R.id.top){btn_icon.setCompoundDrawables(null,drawable,null,null);}else if (v.getId()==R.id.right){btn_icon.setCompoundDrawables(null,null,drawable,null);}else if (v.getId()==R.id.bottom){btn_icon.setCompoundDrawables(null,null,null,drawable);}}
}

Android实现自定义带文字和图片的Button相关推荐

  1. 【Android】Android实现自定义带文字和图片的Button

    在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就是利用系统自带的Button来实现,这种方式代码量最 ...

  2. Android 中自定义View 裁剪扇形图片

    Android 中自定义View 裁剪扇形图片 当需要裁剪图片为扇形区域时,使用Canvas.clipPath(path)方法可以裁剪为扇形区域 ps:此方法会导致绘制图片边缘有锯齿,暂无解决方法(知 ...

  3. 使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图

    本文借助vs2005中自带的FileUpload控件实现图片文件的上传并生成缩略图. 实现过程:选择图片上传成功后,取得已经存在服务器的文件生成缩略图,并且判断是否是图片类型的文件,这个的判断可以在程 ...

  4. Android之自定义带圆角的水纹波效果

    1 需求 自定义带圆角的水温波效果 2 代码实现 bg_navigation_ripple.xml <?xml version="1.0" encoding="ut ...

  5. HTML学生个人网站作业设计:宠物网站设计——狗狗 带文字滚动 图片滚动 带视频 带音乐 带留言表单

    Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 宠物网页设计 | 保护动物网页 | 鲸鱼海豚主题 | 保护大象 | 等网站的设计与制作 | ...

  6. C#实现自定义打印文字和图片

    C#中打印其实就是自己绘图+调用系统打印函数,于是便有了以下操作 1.调用打印机设置 如果你想在打印前设置打印机属性(或者切换打印机),请务必添加这段代码,否则电脑会直接按照预设的设置进行打印(打印机 ...

  7. android checkbox自定义(文字位置、格式等)

    第一种:在原生中只调整显示位置等: <CheckBox android:id="@+id/checkBox8" android:layout_width="wrap ...

  8. java生成带文字的图片_Java在背景图片上面加文字或者文字自动生成图片

    正巧遇到一个项目需要图片合成,查阅了网上许多资料之后整理了一份生成图片的工具类,代码如下:package org.yygzs.acker.util; import java.io.IOExceptio ...

  9. android qq图片分享到朋友圈,Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博...

    转载自:https://www.liangzl.com/get-article-detail-18749.html 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP ...

最新文章

  1. java 做计算器 百度云_用Java做一个简单的计算器
  2. R 语言学习过程全记录 ~
  3. java 用于xcopy复制_java调用copy复制子文件夹及文件到指定目录(非xcopy)
  4. learn python app v3_‎App Store 上的“Learn Python and Scratch”
  5. WPF 记一个Popup踩坑记录
  6. csv导入mysql_京东金融数据分析:MySQL+HIVE的结合应用案例详解【附全代码】
  7. 设计模式之不简单的工厂模式(三)
  8. jquery获取div/div之间的内容.text() 和 .html()区别
  9. Google浏览器代理设置
  10. Visual Studio 2017 编译Clang
  11. 头条、滴滴、百度实习面试试题及面试总结
  12. Sublime Text SFTP 注册码
  13. 关于opencv中的imread()函数声明
  14. win10系统的qq无网络连接网络连接到服务器,Win10能上qq打不开网页_Win10能上qq不能上网怎么办?-192路由网...
  15. solidworks出专利图小技巧
  16. 投票服务器维护时间,【维护】4月1日官方维护公告(正式服)
  17. CURA软件 3D打印切片软件 初次设置界面取消(忘记设置)后怎么再次进行设置
  18. 读《当众讲话诀窍》-殷亚敏 (2)
  19. 线性代数 李永乐强化班
  20. base64加密原理详解

热门文章

  1. 物联网传输技术——ZigBee协议概论
  2. 萌新的Zigbee学习日记(3.4) 协议栈串口
  3. 【计算机网络-7】IPv6协议
  4. linux扫描磁盘变化命令,Linux quotacheck命令:扫描文件系统并建立Quota记录文件
  5. 9月8日阿里巴巴杭州举办“世界级”年会
  6. SpringBoot-Spring profile多环境logback日志配置
  7. 考拉海购offer入手,分享一波面经(网易内推技术岗)。
  8. 【Day3.2】坐在铁轨边午餐
  9. 债券定价模型与价值影响因素分析
  10. C++stl 向量,链表,栈,队列(vector, list, stack, queue)