Android实现自定义带文字和图片的Button
项目中的需求往往十分怪异,例如在按钮文字的左边加一个图标,这样按钮内部既有文字又有图片,乍看之下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相关推荐
- 【Android】Android实现自定义带文字和图片的Button
在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就是利用系统自带的Button来实现,这种方式代码量最 ...
- Android 中自定义View 裁剪扇形图片
Android 中自定义View 裁剪扇形图片 当需要裁剪图片为扇形区域时,使用Canvas.clipPath(path)方法可以裁剪为扇形区域 ps:此方法会导致绘制图片边缘有锯齿,暂无解决方法(知 ...
- 使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图
本文借助vs2005中自带的FileUpload控件实现图片文件的上传并生成缩略图. 实现过程:选择图片上传成功后,取得已经存在服务器的文件生成缩略图,并且判断是否是图片类型的文件,这个的判断可以在程 ...
- Android之自定义带圆角的水纹波效果
1 需求 自定义带圆角的水温波效果 2 代码实现 bg_navigation_ripple.xml <?xml version="1.0" encoding="ut ...
- HTML学生个人网站作业设计:宠物网站设计——狗狗 带文字滚动 图片滚动 带视频 带音乐 带留言表单
Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 宠物网页设计 | 保护动物网页 | 鲸鱼海豚主题 | 保护大象 | 等网站的设计与制作 | ...
- C#实现自定义打印文字和图片
C#中打印其实就是自己绘图+调用系统打印函数,于是便有了以下操作 1.调用打印机设置 如果你想在打印前设置打印机属性(或者切换打印机),请务必添加这段代码,否则电脑会直接按照预设的设置进行打印(打印机 ...
- android checkbox自定义(文字位置、格式等)
第一种:在原生中只调整显示位置等: <CheckBox android:id="@+id/checkBox8" android:layout_width="wrap ...
- java生成带文字的图片_Java在背景图片上面加文字或者文字自动生成图片
正巧遇到一个项目需要图片合成,查阅了网上许多资料之后整理了一份生成图片的工具类,代码如下:package org.yygzs.acker.util; import java.io.IOExceptio ...
- android qq图片分享到朋友圈,Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博...
转载自:https://www.liangzl.com/get-article-detail-18749.html 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP ...
最新文章
- java 做计算器 百度云_用Java做一个简单的计算器
- R 语言学习过程全记录 ~
- java 用于xcopy复制_java调用copy复制子文件夹及文件到指定目录(非xcopy)
- learn python app v3_App Store 上的“Learn Python and Scratch”
- WPF 记一个Popup踩坑记录
- csv导入mysql_京东金融数据分析:MySQL+HIVE的结合应用案例详解【附全代码】
- 设计模式之不简单的工厂模式(三)
- jquery获取div/div之间的内容.text() 和 .html()区别
- Google浏览器代理设置
- Visual Studio 2017 编译Clang
- 头条、滴滴、百度实习面试试题及面试总结
- Sublime Text SFTP 注册码
- 关于opencv中的imread()函数声明
- win10系统的qq无网络连接网络连接到服务器,Win10能上qq打不开网页_Win10能上qq不能上网怎么办?-192路由网...
- solidworks出专利图小技巧
- 投票服务器维护时间,【维护】4月1日官方维护公告(正式服)
- CURA软件 3D打印切片软件 初次设置界面取消(忘记设置)后怎么再次进行设置
- 读《当众讲话诀窍》-殷亚敏 (2)
- 线性代数 李永乐强化班
- base64加密原理详解
热门文章
- 物联网传输技术——ZigBee协议概论
- 萌新的Zigbee学习日记(3.4) 协议栈串口
- 【计算机网络-7】IPv6协议
- linux扫描磁盘变化命令,Linux quotacheck命令:扫描文件系统并建立Quota记录文件
- 9月8日阿里巴巴杭州举办“世界级”年会
- SpringBoot-Spring profile多环境logback日志配置
- 考拉海购offer入手,分享一波面经(网易内推技术岗)。
- 【Day3.2】坐在铁轨边午餐
- 债券定价模型与价值影响因素分析
- C++stl 向量,链表,栈,队列(vector, list, stack, queue)