Android开发轻松实现带文字的图片按钮
imagebutton控件的用法

imagebutton控件的用法============一、概述----ImageButton控件是Android开发中常用的控件之一,它结合了Button控件和ImageButton控件的特点,可以在图片上实现点击事件。
本文将详细介绍ImageButton控件的用法,包括基本属性、事件处理和自定义样式等。
二、基本属性------* `id`:控件的唯一标识符,用于在XML布局文件或代码中引用该控件。
* `background`:设置控件的背景图片或Drawable对象。
* `src`:设置按钮的选中图片,即点击后的显示图片。
* `backgroundRes`和`backgroundState`:用于自定义背景样式,支持点击事件和长按事件。
三、事件处理------ImageButton控件支持点击事件、长按事件和滑动事件等。
可以通过为ImageButton控件绑定相应的事件监听器来实现。
以下是几个常用的监听器:* `OnClickListener`:点击事件监听器,用于处理点击事件。
* `OnLongClickListener`:长按事件监听器,用于处理长按事件。
* `OnScrollListener`:滑动事件监听器,用于处理滑动事件。
四、自定义样式-------ImageButton控件支持通过XML布局文件或代码自定义样式,包括背景图片、边框样式、圆角大小等。
可以通过设置`background`属性或使用`StateListAnimator`来实现自定义样式。
五、使用示例------以下是一个使用ImageButton控件的示例代码:```java// 创建一个ImageButton控件,设置背景图片和选中图片ImageButton imageButton = new ImageButton(this);imageButton.setBackgroundResource(R.drawable.button_background);imageButton.setImageResource(R.drawable.button_selected);// 绑定点击事件监听器,处理点击事件imageButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 点击事件的处理逻辑}});```六、总结----ImageButton控件是Android开发中常用的控件之一,通过设置基本属性和绑定相应的事件监听器,可以实现图片上的点击事件。
《Android应用程序设计》实验报告 (2)

实验1 搭建开发环境与第1个Android程序【实验目的】1.熟悉Android开发环境的搭建2.掌握用Eclipse开发Android程序的流程【实验内容】一、搭建Android开发环境按照下面的步骤,完成Android环境的搭建。
1.1 JDK的安装及配置1.根据电脑的系统位数安装软件包里的JDK,安装目录设置为d:\jdk1.x。
(d为你的安装盘,可以设为任意盘;x为你安装的jdk版本)2. WIN7系统环境变量设置(1)环境变量设置一(2)环境变量设置二(3)环境变量设置三(4)环境变量设置四1)创建新的环境变量。
名:JA V A_HOME,值:x:\jdk1.72)修改系统变量Path,在path变量值前添加这段:%JA V A_HOME%\bin;3)修改系统变量classpath,值为:.;%JA V A_HOME%\lib\dt.jar;%JA V A_HOME%\lib\tools.jar;(5)环境变量设置五1)测试开发环境。
在开始->搜索程序和文件里输入cmd.exe,打开cmd。
输入cd c:\ 命令进入c盘根目录。
2)在c盘根目录下使用记事本编写源文件,并存为java文件。
public class MyApp {public static void main (String[] args) {System.out.println(“我能学好Java语言!”);} }3)使用javac命令编译程序,在cmd命令行输入:javac MyApp.java生成class类型文件。
4)使用java命令运行程序,在cmd命令行输入:java MyApp如果在命令行显示结果“我能学好Java语言!”,则JDK环境配置成功。
1.2 Android SDK的安装及配置1. 解压adt-bundle-windows-x86_64-20131030.zip文件,里面的SDK是免安装版。
Android开发之EditText属性详解

Android开发之EditText属性详解1、EditText输入的文字为密码形式的设置(1)通过.xml里设置:把该EditText设为:android:password="true" // 以”.”形式显示文本(2)在代码里设置:通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码。
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//设置密码为不可见。
2、(1)EditText输入的文字为电话号码Android:phoneNumber=”true” //输入电话号码3、EditText字数限制的设置(1)在.xml中设置:android:maxLength=“50”(2)代码中设置:editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});4、EditText设置字体android:typeface="monospace" //设置字型。
字形有:normal, sans, serif,monospace5、EditText是否可编辑Android:editable // 是否可编辑6、在EditText中软键盘的调起、关闭(1)EditText有焦点(focusable为true)阻止输入法弹出editText=(EditText)findViewById(R.id.txtBody);editText.setOnTouchListener(new OnTouchListener(){public boolean onTouch(View v, MotionEvent event){editText.setInputType(InputType.TYPE_NULL); //关闭软键盘return false;}});(2)当EidtText无焦点(focusable=false)时阻止输入法弹出InputMethodManager imm =(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(editText.getWindowToken(),0);(3)调用数字键盘并设置输入类型和键盘为英文etNumber.setInputType(InputType.TYPE_CLASS_NUMBER); //调用数字键盘rlEditText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//设置输入类型和键盘为英文或者:android:inputType="textUri|textMultiLine"(4)android:focusable="false"//键盘永远不会弹出<activity android:name=".AddLinkman"android:windowSoftInputMode="adjustUnspecified|stateHidden"/>//不自动弹出键盘//关闭键盘(比如输入结束后执行)InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(etEditText.getWindowToken(), 0);//自动弹出键盘((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);etEditText.requestFocus();//让EditText获得焦点,但是获得焦点并不会自动弹出键盘7、android:layout_gravity和android:gravity的区别(1)android:layout_gravity是本元素对父元素的重力方向。
Android中ImageButton自定义按钮的按下效果的代码实现方法

【原创】Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
首先看看网上的2种方法:【以下为引用网络,来源:/thread-7931-1-1.html】使用Button时为了让用户有“按下”的效果,有两种实现方式:1.在代码里面。
view plaincopy to clipboardprint?imageButton.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_DOWN){//更改为按下时的背景图片v.setBackgroundResource(R.drawable.pressed);}else if(event.getAction() == MotionEvent.ACTION_UP){//改为抬起时的图片v.setBackgroundResource(R.drawable.released);}return false;}});imageButton.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_DOWN){//更改为按下时的背景图片v.setBackgroundResource(R.drawable.pressed);}else if(event.getAction() == MotionEvent.ACTION_UP){//改为抬起时的图片v.setBackgroundResource(R.drawable.released);}return false;}});imageButton.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_DOWN){//更改为按下时的背景图片v.setBackgroundResource(R.drawable.pressed);}else if(event.getAction() == MotionEvent.ACTION_UP){//改为抬起时的图片v.setBackgroundResource(R.drawable.released);}return false;}});imageButton.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_DOWN){//更改为按下时的背景图片v.setBackgroundResource(R.drawable.pressed);}else if(event.getAction() == MotionEvent.ACTION_UP){//改为抬起时的图片v.setBackgroundResource(R.drawable.released);}return false;}});2.用XML文件实现。
android应用开发帮助文档

本android帮助文档为在学习视频时自己制作比较混乱和粗糙,使用时查找第一页导航,再用word的查找功能进行查找导航页——基础说明——监听器的设置->创建监听器——调用android自带的短信发送功能——Activity的方法和生命周期(创建对话框风格的)——Activity的布局方法--LinearLayout线性--常用标签--TableLayout表格--GridView滑动表格--RelativeLayout相对布局——常用控件--除去title和全屏显示--EditText可输入文本框--RadioGroup和RadioButton单选按钮--Toast提示框--CheckBox多选按钮--ProgressBar进度条--ListView可选列表--MENU菜单控件的使用--Animation动画效果--4种动画效果--动画实现--JAVA中的实现--XMl文件中的实现-- Gallery (走马灯式的)移动选择控件--ImageSwitcher图片显示控件--ImageButton图片按钮控件--AlertDialog提示框——Handler的使用---线程--handler的简单应用--用handler更新ProgressBar进度条--handler与线程--线程之间的数据传递--Bundle对象(大量复杂数据) --Message对象(少量简单)--建立一个新的线程--HandlerThread类——SQLite的使用--SQLiteOpenHelper的方法注:带有下划线的是一些封装--代码的编写的可以直接调用的类,在”帮助文档的链接文件\封装的类”文件--封装的DatabaseHelper类夹中都有保存可以直接导入调用--主java文件--命令行的查询方法——文件下载--文件下载--步骤--在注册文件中注册权限--封装的HttpDownLoad类--在Activity中的调用--访问SDCARD --注册权限--封装的FileUtils类--在Activity文件中的调用——_XML文件的解析--SAX常用接口--XMl文件解析实例--实现ContentHandler接口的类--在Activity中的调用 XMl文件实例aaa.xml——广播机制--android中的广播机制--编写BroadcastReveicer类--创建包含BroadcastReveicer类的java文件--在onReceive中处理收到短消息的事件--AndroidManifest.XML注册文件中注册--代码当中进行注册--Activity中发送广播——WIFI--WIFI网卡的状态--操作WIFI网卡所需要的部分权限--改变WIFI网卡的状态——Socket编程--使用基于TCP协议的Socket--使用基于UDP协议的Socket——ServiceAndroid创建基础:src文件中为包类,其中用于建立activity的java文件res中drawable中为图片和标签layout中为布局文件,用于每个activity.java文件的标签布局AndroidManifest中为注册文件,每一个activity的建立都需要在其中注册代码的编写intent对象(用于在不同activity转换时的监听器设置)ponent name 指定activity2.Action 指定activity的作用3.Data 传送的数据类型4.Extras (额外)传送的键值对创建监听器的关键代码:(在第一个activity中)//创建一个Button监听器class myButtonListener implements OnClickListener{public void onClick(View v) {// TODO Auto-generated method stub//创建一个intent类Intent intent = new Intent();//创建一个键值对intent.putExtra("nexttext", "跳转成功");//创建关联intent.setClass(FirstActivity.this, SecondActivity.class);FirstActivity.this.startActivity(intent);}}在第一个activity中的转换关键标签上绑定监听器:(例在Button标签)(在onCreate中)//在Button上绑定监听器myButton.setOnClickListener(new myButtonListener());在第二个activity中的应用键值对(数据传递):(在onCreate中)//获取键值对Intent intent = getIntent();//获得键值对的值String text = intent.getStringExtra("nexttext");在Activity中调用android自带的短信发送功能的关键代码://调用短信发送功能class myButtonListener implements OnClickListener{public void onClick(View v) {// TODO Auto-generated method stub//发送号码Uri uri = Uri.parse("smsto://0800000123");Intent it = new Intent(Intent.ACTION_SENDTO,uri);//发送内容it.putExtra("sms_body", "the SMS text");startActivity(it);}}Activity的方法和生命周期:--onCreate 一个activity启动时运行(第一次)--onStart 当activity处于可见状态时运行--onResume 当activity可以得到用户焦点时(可以被操作)运行--onPause 当activity处于暂停状态时(例如弹出其他activity而原activity未被完全覆盖),可在此保存数据,以便此activity释放时恢复原状--onStop 当activity完全不可见时--onRestart 当activity未被销毁而在此被调用时--onDestory 当activity被销毁时当调用finish();语句时,Activity被销毁。
dev simplebutton的用法

dev simplebutton的用法SimpleButton是一个Android开发中的按钮控件,用来在用户界面中添加一个按钮并定义其功能和外观。
以下是SimpleButton的用法:1. 在XML布局文件中添加SimpleButton控件:```<android.widget.Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Click Me" />```2. 在Java代码中找到SimpleButton,并为其设置点击事件监听器:```Button button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 处理点击事件的代码}});```3. 根据需要为SimpleButton设置其他属性,如颜色、背景、文字等:```button.setTextColor(Color.RED); // 设置按钮文字颜色button.setBackgroundColor(Color.YELLOW); // 设置按钮背景色button.setText("New Button Text"); // 设置按钮文字```4. 处理SimpleButton的点击事件:```button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 处理点击事件的代码}});```以上是SimpleButton的基本用法,可以根据具体需求进行进一步的样式定义和功能添加。
Android开发带图标的按钮

Android开发带图标的按钮除了Android系统自带的Button按钮一万,还提供了带图标的按钮ImageButton。
要制作带图标的按钮,首先要在布局文件中定义ImageButton,然后通过setImageDrawable方法来设置要显示的图标。
注意:我们可以在布局文件中就直接设置按钮的图标,如android:src="@drawable/icon1"我们也可以在程序中设置自定义图标imgbtn3.setImageDrawable(getResources().getDrawable(R.drawable.icon2));我们还可以使用系统自带的图标imgbtn4.setImageDrawable(getResources().getDrawabl(android.R.drawable.sym_call_incoming)) ;设置完按钮的图标后,需要为按钮设置监听setOnClickListener,以此捕获事件并处理下面的例子讲述的是由4个图标按钮组成的布局,其中三个按钮的图标是自定义的,第四个按钮的图标是系统的,当点击按钮1的时候,弹出dialog,当点击按钮2的时候,点击确定后,可以将按钮2的图标变成按钮3的图标,当点击按钮3的时候,按钮3的图标变成了系统打电话的图标,点击按钮4,显示一个提示dialogjava代码:package org.loulijun.imagebutton;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.content.DialogInterface;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageButton;import android.widget.TextView;public class ImageButtonTest extends Activity {/** Called when the activity is first created. */TextView textview;ImageButton imgbtn1;ImageButton imgbtn2;ImageButton imgbtn3;ImageButton imgbtn4;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);textview=(TextView)findViewById(R.id.textview);//分别取得4个ImageButton对象imgbtn1=(ImageButton)findViewById(R.id.imagebutton1);imgbtn2=(ImageButton)findViewById(R.id.imagebutton2);imgbtn3=(ImageButton)findViewById(R.id.imagebutton3);imgbtn4=(ImageButton)findViewById(R.id.imagebutton4);//分别为ImageButton设置图标//imgbtn1已经在main.xml布局中设置了图标,所以就不在这里设置了(设置图标即可在程序中设置,也可在布局文件中设置)imgbtn2.setImageDrawable(getResources().getDrawable(R.drawable.icon));//在程序中设置图标imgbtn3.setImageDrawable(getResources().getDrawable(R.drawable.icon2));imgbtn4.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_call_incoming) );//设置系统图标//下面为各个按钮设置事件监听imgbtn1.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubDialog dialog=new AlertDialog.Builder(ImageButtonTest.this).setTitle("提示").setMessage("我是ImageButton1").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub//相应的处理操作}}).create();dialog.show();}});imgbtn2.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubDialog dialog=new AlertDialog.Builder(ImageButtonTest.this).setTitle("提示").setMessage("我是ImageButton2,我要使用ImageButton3的图标").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubimgbtn2.setImageDrawable(getResources().getDrawable(R.drawable.icon2));}}).create();dialog.show();}});imgbtn3.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubDialog dialog=new AlertDialog.Builder(ImageButtonTest.this).setTitle("提示").setMessage("我是ImageButton3,我想使用系统打电话的图标").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubimgbtn3.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_action_call));}}).create();dialog.show();}});imgbtn4.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubDialog dialog=new AlertDialog.Builder(ImageButtonTest.this).setTitle("提示").setMessage("我是使用的系统图标").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub//相应的处理操作}}).create();dialog.show();}});}}。
AndroidTextView实现多文本折叠、展开效果

AndroidTextView实现多⽂本折叠、展开效果背景在开发过程中,当我们的需求中包含说说或者评论等内容的展⽰时,我们都会考虑当内容太多时该如何显⽰。
当内容的字数太多,如果全部展⽰出来可能会影响体验效果,但是⼜不能只截取⼀部分内容进⾏展⽰,此时就需要考虑使⽤多⾏显⽰折叠的效果来实现。
效果图:使⽤1.布局⽂件调⽤<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.wiggins.expandable.widget.MoreLineTextViewandroid:id="@+id/tv_more_line_short"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:padding="@dimen/padding_small"app:clickAll="true"app:textColor="@color/red" /><View style="@style/spaceLine" /><com.wiggins.expandable.widget.expandable.ExpandableTextViewandroid:id="@+id/tv_expandable_short"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:ellipsize="end"android:padding="@dimen/padding_small"android:textColor="@color/blue"app:allClickable="false"app:contentTextColor="@color/blue"app:isDisplayIcon="false"app:maxCollapsedLines="4" /><View style="@style/spaceLine" /><com.wiggins.expandable.widget.MoreLineTextViewandroid:id="@+id/tv_more_line_long"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:padding="@dimen/padding_small"app:clickAll="true"app:textColor="@color/red" /><View style="@style/spaceLine" /><com.wiggins.expandable.widget.expandable.ExpandableTextViewandroid:id="@+id/tv_expandable_long"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:ellipsize="end"android:padding="@dimen/padding_small"android:textColor="@color/blue"app:allClickable="false"app:contentTextColor="@color/blue"app:isDisplayIcon="false"app:maxCollapsedLines="4" /></LinearLayout>2.Java⽂件调⽤private void initData() {mTvMoreLineShort.setText(Constant.content1);mTvExpandableShort.setText(Constant.content2);mTvMoreLineLong.setText(Constant.content3);mTvExpandableLong.setText(Constant.content4);}MoreLineTextView使⽤1.在attr.xml中定义属性<declare-styleable name="MoreTextStyle"><!--内容⼤⼩--><attr name="textSize" format="dimension" /><!--内容颜⾊--><attr name="textColor" format="color" /><!--内容默认最⼤⾏数--><attr name="maxLine" format="integer" /><!--展开/收起图标--><attr name="expandIcon" format="reference" /><!--展开/收起动画执⾏时间--><attr name="durationMillis" format="integer" /><!--可点击区域,默认展开/收起区域可点击--><attr name="clickAll" format="boolean" /></declare-styleable>2.是否显⽰折叠效果@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);// 如果没有变化,测量并返回if (!mRelayout || getVisibility() == View.GONE) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);return;}mRelayout = false;super.onMeasure(widthMeasureSpec, heightMeasureSpec);// 内容区域初始显⽰⾏⾼mTvContent.setHeight(mTvContent.getLineHeight() * (mMaxLine > mTvContent.getLineCount() ? mTvContent.getLineCount() : mMaxLine)); mLlExpand.post(new Runnable() {@Overridepublic void run() {// 是否显⽰折叠效果mLlExpand.setVisibility(mTvContent.getLineCount() > mMaxLine ? View.VISIBLE : View.GONE);}});}3.设置显⽰内容/*** @Description 设置显⽰内容*/public void setText(String str) {mRelayout = true;mTvContent.setText(str);setVisibility(TextUtils.isEmpty(str) ? View.GONE : View.VISIBLE);}4.展开/收起动画@Overridepublic void onClick(View v) {if (mTvContent.getLineCount() <= mMaxLine) {return;}isExpand = !isExpand;mTvContent.clearAnimation();final int deltaValue;final int startValue = mTvContent.getHeight();if (isExpand) {deltaValue = mTvContent.getLineHeight() * mTvContent.getLineCount() - startValue;//计算要展开⾼度RotateAnimation animation = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); animation.setDuration(mDurationMillis);animation.setFillAfter(true);mIvExpand.startAnimation(animation);mTvExpand.setText(getContext().getString(R.string.collapse));} else {deltaValue = mTvContent.getLineHeight() * mMaxLine - startValue;//为负值,收缩的⾼度RotateAnimation animation = new RotateAnimation(180, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); animation.setDuration(mDurationMillis);animation.setFillAfter(true);mIvExpand.startAnimation(animation);mTvExpand.setText(getContext().getString(R.string.expand));}Animation animation = new Animation() {protected void applyTransformation(float interpolatedTime, Transformation t) {//interpolatedTime:为当前动画帧对应的相对时间,值总在0-1之间,原始长度+⾼度差*(从0到1的渐变)即表现为动画效果mTvContent.setHeight((int) (startValue + deltaValue * interpolatedTime));}};animation.setDuration(mDurationMillis);mTvContent.startAnimation(animation);}ExpandableTextView使⽤1.在attr.xml中定义属性<declare-styleable name="ExpandableTextView"><!--内容默认最⼤⾏数,超过隐藏--><attr name="maxCollapsedLines" format="integer" /><!--展开/收起动画执⾏时间--><attr name="animDuration" format="integer" /><!--展开图⽚--><attr name="expandDrawable" format="reference" /><!--收起图⽚--><attr name="collapseDrawable" format="reference" /><!--内容颜⾊--><attr name="contentTextColor" format="color" /><!--内容⼤⼩--><attr name="contentTextSize" format="dimension" /><!--收起/展开颜⾊--><attr name="collapseExpandTextColor" format="color" /><!--收起/展开⼤⼩--><attr name="collapseExpandTextSize" format="dimension" /><!--收起⽂字--><attr name="textCollapse" format="string" /><!--展开⽂字--><attr name="textExpand" format="string" /><!--可点击区域,默认展开/收起区域可点击--><attr name="allClickable" format="boolean" /><!--是否显⽰展开/收起图标,默认显⽰--><attr name="isDisplayIcon" format="boolean" /><!--收起/展开位置,默认左边--><attr name="collapseExpandGrarity"><flag name="left" value="3" /><flag name="right" value="5" /></attr><!--收起/展开图标位置,默认右边--><attr name="drawableGrarity"><flag name="left" value="3" /><flag name="right" value="5" /></attr></declare-styleable>2.是否显⽰折叠效果@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// 如果没有变化,测量并返回if (!mRelayout || getVisibility() == View.GONE) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);return;}mRelayout = false;// Setup with optimistic case// i.e. Everything fits. No button neededmLlExpand.setVisibility(View.GONE);mTvContent.setMaxLines(Integer.MAX_VALUE);// Measuresuper.onMeasure(widthMeasureSpec, heightMeasureSpec);//如果内容真实⾏数⼩于等于最⼤⾏数,不处理if (mTvContent.getLineCount() <= mMaxCollapsedLines) {return;}// 获取内容tv真实⾼度(含padding)mTextHeightWithMaxLines = getRealTextViewHeight(mTvContent);// 如果是收起状态,重新设置最⼤⾏数if (mCollapsed) {mTvContent.setMaxLines(mMaxCollapsedLines);}mLlExpand.setVisibility(View.VISIBLE);// Re-measure with new setupsuper.onMeasure(widthMeasureSpec, heightMeasureSpec);if (mCollapsed) {// Gets the margin between the TextView's bottom and the ViewGroup's bottommTvContent.post(new Runnable() {@Overridepublic void run() {mMarginBetweenTxtAndBottom = getHeight() - mTvContent.getHeight();}});// 保存这个容器的测量⾼度mCollapsedHeight = getMeasuredHeight();}}3.设置显⽰内容/*** @Description 设置显⽰内容*/public void setText(CharSequence text) {mRelayout = true;mTvContent.setText(text);setVisibility(TextUtils.isEmpty(text) ? View.GONE : View.VISIBLE);}4.展开/收起动画@Overridepublic void onClick(View view) {if (mLlExpand.getVisibility() != View.VISIBLE) {return;}mCollapsed = !mCollapsed;// 修改收起/展开图标、⽂字setDrawbleAndText();// 保存位置状态if (mCollapsedStatus != null) {mCollapsedStatus.put(mPosition, mCollapsed);}// 执⾏展开/收起动画mAnimating = true;ValueAnimator valueAnimator;if (mCollapsed) {valueAnimator = new ValueAnimator().ofInt(getHeight(), mCollapsedHeight);} else {mCollapsedHeight = getHeight();valueAnimator = new ValueAnimator().ofInt(getHeight(), getHeight() + mTextHeightWithMaxLines - mTvContent.getHeight()); }valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {int animatedValue = (int) valueAnimator.getAnimatedValue();mTvContent.setMaxHeight(animatedValue - mMarginBetweenTxtAndBottom);getLayoutParams().height = animatedValue;requestLayout();}});valueAnimator.addListener(new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animator animator) {}@Overridepublic void onAnimationEnd(Animator animator) {// 动画结束后发送结束的信号,清除动画标志mAnimating = false;// 通知监听if (mListener != null) {mListener.onExpandStateChanged(mTvContent, !mCollapsed);}}@Overridepublic void onAnimationCancel(Animator animator) {}@Overridepublic void onAnimationRepeat(Animator animator) {}});valueAnimator.setDuration(mAnimationDuration);valueAnimator.start();}项⽬地址☞以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android开发轻松实现带文字的ImageButton
实际上,ImageButton是不能添加文字的。
要实现带文字的ImageButton的方法很多,这里仅列举一种方法:自定义一个继承自ImageButton的类,然后Override它的onDraw(Canvas canvas)方法。
具体步骤如下:
1)新建一个Android工程,例如工程名:TestImageButton。
怎么建工程?不用我多说了吧。
2)新建一个MyImageButton类,继承android.widget.ImageButton
3)为类MyImageButton添加成员函数,详细代码如下:
package ;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.ImageButton;
public class MyImageButton extends ImageButton {
public String text = null; //要显示的文字
public float textX,textY; //文本显示的坐标位置
public int color; //文字的颜色
public MyImageButton(Context context, AttributeSet attrs) { super(context,attrs);
textX=20;
textY=60;
}
//设置需要显示的文本
public void setText(String text){
this.text = text; //设置文字
}
//设置文本显示的颜色
public void setColor(int color){
this.color = color; //设置文字颜色
}
// 设置显示文本的X、Y坐标
public void setPosition(float XX,float YY){
t extX = XX;
t extY = YY;
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint paint=new Paint();
paint.setTextAlign(Paint.Align.CENTER);
paint.setColor(color);
canvas.drawText(text, textX, textY, paint); //绘制文字}
}
4)在布局文件中引用:
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#9CFFC1">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"/>
<.MyImageButton
a ndroid:id="@+id/button01"
a ndroid:layout_width="wrap_content"
a ndroid:layout_height="wrap_content"
a ndroid:layout_marginLeft="25dp"
a ndroid:background="@drawable/video1"/>
</LinearLayout>
5)在启动Activity的onCreate方法中添加文字
package ;
import .MyImageButton;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class TestImageButtonActivity extends Activity {
/** Called when the activity is first created. */
private MyImageButton button01=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.main);
button01= (MyImageButton)findViewById(R.id.button01);
button01.setText("视频文件1");
button01.textX =25;
button01.textY =65;
button01.setColor(Color.rgb(147, 48, 4));
}
}
最后,别忘了在工程目录testImageButton\res\drawable-hdpi下放置一个名为video1.png 的图片文件。
程序运行的效果如下:。