Android清空编辑框内容功能的实现实例代码
在项目开发中你肯定会遇到这样的需求,输入到EditText中的数据一个一个清理太麻烦了,需要有一个按钮直接能实现一次删除整个EditText控件中的数据,那么接下来我就给大家封装一个方法,有这样的需求直接调用就好了。话不多说,直接上代码:
代码如下 | 复制代码 |
/** *清空编辑框按钮 * @param editText 需要清空的EditText控件 * @param delImageView 清空数据的图片 */ protectedvoidclearEditText(finalEditText editText,finalImageView delImageView) { /文本框编辑的监听/ editText.addTextChangedListener(newTextWatcher() {
@Override publicvoidonTextChanged(CharSequence arg0,intarg1,intarg2,intarg3) { // TODO Auto-generated method stub
}
@Override publicvoidbeforeTextChanged(CharSequence arg0,intarg1,intarg2, intarg3) { // TODO Auto-generated method stub
}
@Override publicvoidafterTextChanged(Editable arg0) { // TODO Auto-generated method stub if(editText.getText().length()!=0){ delImageView.setVisibility(View.VISIBLE); }else{ delImageView.setVisibility(View.INVISIBLE); } } }); /**焦点变化监听**/ editText.setOnFocusChangeListener(newView.OnFocusChangeListener() { @Override publicvoidonFocusChange(View arg0,booleanarg1) { // TODO Auto-generated method stub if(editText.getText().length()!=0){ //删除图标显示 delImageView.setVisibility(View.VISIBLE); }else{ //删除图标隐藏 delImageView.setVisibility(View.INVISIBLE); } if(arg1){ //得到焦点 }else{ //失去焦点,删除图标隐藏 delImageView.setVisibility(View.INVISIBLE); } } }); //删除图标的点击监听事件 delImageView.setOnClickListener(newView.OnClickListener() {
@Override publicvoidonClick(View arg0) { // 执行清空EditText数据 editText.setText(""); } }); } |
结束,接下来根据需求在需要的地方进行调用就好。
Android O版本号到底是多少呢?Android O版本号确定为8.0。感兴趣的小伙伴们随小编进来看看吧现在对安卓系统下一个版本基本还是称呼为Android O,不过坊间已经将O这个代号和“奥利奥”对号入座了,不过有些认真的网友对其版本号非常执着,那么现在问题来了,Android O版本号到底是多少呢?
此前IDE工具曾有过相关暗示,称Android O版本号可能是7+,不过谷歌今天推出的最新Android O Beta3否认了前者的猜测,Android O的版本号为8.0。
现在只要更新了Android O Beta3,就可以在系统设置中“关于手机”界面查看得知,版本号显示为8.0,这样来看谷歌还是按照一年一个大版本更新的老习惯,因为去年主角是Android 7.0。
Android O带来了诸多重要更新,不过碎片化依然是头疼的老问题,谷歌即使最后推出正式版,估计还是有不少设备需要等待好几个时间,才能享受到最新固件。
本文介绍了android ViewPager实现滑动翻页效果实例代码,非常实用,有兴趣的同学可以参考一下
代码如下 | 复制代码 |
importandroid.content.Context; importandroid.support.v4.view.ViewPager; importandroid.util.AttributeSet; importandroid.view.View;
publicclassReadViewPagerextendsViewPager { publicReadViewPager(Context context) { super(context); }
publicReadViewPager(Context context, AttributeSet attrs) { super(context, attrs); setAnima(); }
publicvoidsetAnima() { setPageTransformer(true,newPageTransformer() { privatestaticfinalfloatMIN_SCALE =0.75f;
@Override publicvoidtransformPage(View view,floatposition) {
intpageWidth = view.getWidth(); intpageHeight =view.getHeight();
if(position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0);
} elseif(position <=0) { // [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1); view.setTranslationX(0); view.setScaleX(1); view.setScaleY(1); } elseif(position <=1) { // (0,1]
// Fade the page out. view.setAlpha(1- position); // // // Counteract the default slide transition // view.setAlpha(1); view.setTranslationX(pageWidth * -position); // // // Scale the page down (between MIN_SCALE and 1) floatscaleFactor = MIN_SCALE + (1- MIN_SCALE) * (1- Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); } }
}); } } |
核心代码是android官方demo,以上实现的是翻页效果是:上面一页被滑出界面时,下面一页慢慢显现,透明度慢慢加大,并且大小由小慢慢变大。
不过有一个奇怪的现象,当我做一个答题界面时,刚刚开始我采用ViewPager与View结合实现无限循环切换,并且采用上面的动画效果,可是每当我滑动到最后一张,也就是要开始新的一轮循环的时候,被滑出去的一页也会出现慢慢变透明的情况,而我用ViewPager结合Fragment实现无限循环切换的是就不会出现这种效果
如果想要实现仿造驾考宝典的翻页效果,只要把核心方法改为以下代码便可以了
代码如下 | 复制代码 |
setPageTransformer(true,newPageTransformer() { privatestaticfinalfloatMIN_SCALE =0.75f;
@Override publicvoidtransformPage(View view,floatposition) {
intpageWidth = view.getWidth(); intpageHeight =view.getHeight();
if(position < -1) {// [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0);
}elseif(position <=0) {// [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1); view.setTranslationX(0); view.setScaleX(1); view.setScaleY(1);
}elseif(position <=1) {// (0,1]
// Fade the page out. // view.setAlpha(1 - position); // // // Counteract the default slide transition view.setAlpha(1); view.setTranslationX(pageWidth * -position); // // // Scale the page down (between MIN_SCALE and 1) // float scaleFactor = MIN_SCALE // + (1 - MIN_SCALE) * (1 - Math.abs(position)); // view.setScaleX(scaleFactor); // view.setScaleY(scaleFactor);
}else{// (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); }
} }); |
下面我们来讲讲position参数:
position的可能性的值有:
[-Infinity,-1) 已经看不到了
(1,+Infinity] 已经看不到了
[-1,1]
重点看[-1,1]这个区间 , 其他两个的View都已经看不到了~~
假设现在ViewPager在A页现在滑出B页,则:
A页的position变化就是( 0, -1]
B页的position变化就是[ 1 , 0 ]
本文介绍了Android之Viewpager+Fragment实现懒加载示例的教程,非常实用,有兴趣的同学快来看看吧我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用。而ViewPager默认会缓存三页数据,即:Viewpager每加载一个Fragment,都会预先加载此Fragment左侧或右侧的Fragment。而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源,浪费用户流量不止,还造成卡顿,这样的结果,我们当然不会满意。那么,能不能做到当切换到这个fragment的时候,它才去初始化呢?答案就在Fragment里的setUserVisibleHint这个方法里。
该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法,即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。
代码如下:
代码如下 | 复制代码 |
packagecom.yctime.truelove.fragment;
importandroid.content.Context; importandroid.nfc.Tag; importandroid.os.Bundle; importandroid.support.annotation.Nullable; importandroid.support.v4.app.Fragment; importandroid.util.Log; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup;
/** * 基类Fragment */ publicabstractclassBaseFragmentextendsFragment {
protectedView mRootView; publicContext mContext; protectedbooleanisVisible; privatebooleanisPrepared; privatebooleanisFirst =true;
publicBaseFragment() { // Required empty public constructor }
@Override publicvoidsetUserVisibleHint(booleanisVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); // Log.d("TAG", "fragment->setUserVisibleHint"); if(getUserVisibleHint()) { isVisible =true; lazyLoad(); }else{ isVisible =false; onInvisible(); } }
@Override publicvoidonCreate(@NullableBundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity(); setHasOptionsMenu(true); // Log.d("TAG", "fragment->onCreate"); }
@Override publicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(mRootView ==null) { mRootView = initView(); } // Log.d("TAG", "fragment->onCreateView"); returnmRootView; }
@Override publicvoidonActivityCreated(@NullableBundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Log.d("TAG", "fragment->onActivityCreated"); isPrepared =true; lazyLoad(); }
protectedvoidlazyLoad() { if(!isPrepared || !isVisible || !isFirst) { return; } Log.d("TAG", getClass().getName() +"->initData()"); initData(); isFirst =false; }
//do something protectedvoidonInvisible() {
}
publicabstractView initView();
publicabstractvoidinitData();
} |
为了可复用,这里我新建了个BaseFragment,在basefragment,我增加了三个方法,一个是onVisiable,即fragment被设置为可见时调用,一个是onInvisible,即fragment被设置为不可见时调用。另外再写了一个lazyLoad的抽象方法,该方法在onVisible里面调用。
注意看这个方法:
代码如下 | 复制代码 |
protectedvoidlazyLoad() { if(!isPrepared || !isVisible || !isFirst) { return; } Log.d("TAG", getClass().getName() +"->initData()"); initData(); isFirst =false; } |
这里我们做了三个判断,判断isPrepared和isVisible和isFirst只有全为true,才去执行initData()方法加载网络(或本地)数据。
①isPrepared参数在系统调用onActivityCreated时设置为true,这时onCreateView方法已调用完毕(一般我们在这方法里执行findviewbyid等方法),确保 initData()方法不会报空指针异常。
②isVisible参数在fragment可见时通过系统回调setUserVisibileHint方法设置为true,不可见时为false,这是fragment实现懒加载的关键。
③isFirst确保ViewPager来回切换时BaseFragment的initData方法不会被重复调用,initData在该Fragment的整个生命周期只调用一次,第一次调用initData()方法后马上执行 isFirst = false。
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
用Intel HAXM给Android模拟器Emulator加速
Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20- 在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
Android开发中布局中的onClick简单完成多控件时的监听的利与弊
本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20- 这篇文章主要介绍了C#实现图片放大功能的按照像素放大图像方法,功能非常实用,需要的朋友可以参考下...2020-06-25
Ubuntu 系统下安装Android开发环境 Android Studio 1.0 步骤
Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,可以在Linux,Mac OS X,Window...2016-09-20