Android清空编辑框内容功能的实现实例代码

 更新时间:2017年7月6日 23:19  点击:1539
本文介绍了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版本号到底是多少呢?

20170609_074034_886

此前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。

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    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 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
  • Android开发中布局中的onClick简单完成多控件时的监听的利与弊

    本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20
  • C#实现图片放大功能的按照像素放大图像方法

    这篇文章主要介绍了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