当前位置:管家婆资料大全 > 关于管家婆 > 【管家婆一句话赢钱资料】自定义空数据提示界

【管家婆一句话赢钱资料】自定义空数据提示界

文章作者:关于管家婆 上传时间:2019-09-09

管家婆一句话赢钱资料 1

叁个简短的切换加载中,空页面,出错页面和剧情页面包车型大巴布局。思路很简短自定义布局承袭Framelayout,默许第四个子View为StateView,首个子view为LoadingView,第三个子布局为EmptyView。暗中认可分界面加载完成后逃匿全体顾客自定义布局。只呈现以上在那之中三个搭架子。具体见图。github地址https://github.com/Hemumu/LoadingLayout

管家婆一句话赢钱资料 2

demo.gif

首要就三个类就消除了,很轻松实用。新建贰个类LoadingLayout承袭Framelayout,重写它的构造方法。这里得到四个自定义参数,那八个参数主倘使为着让顾客自定义StateView,LoadingView,EmptyView。并通过LayoutInflater的inflater方法把它加入到LoadingLayout中。此处注意的是inflater第七个参数,true表示加载布局并参预第二参数的ViewGroup中,false表示只加载布局,假如第八个参数是false那么第二个参数就能够是null

public LoadingLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.LoadingLayout, 0, 0);
        try {
            mStateView = a.getResourceId(R.styleable.LoadingLayout_stateView, R.layout.loadstate_layout);
            mLoadingView = a.getResourceId(R.styleable.LoadingLayout_loadingView, R.layout.loading_layout);
            mEmptyView = a.getResourceId(R.styleable.LoadingLayout_loadingView, R.layout.empty_layout);
            LayoutInflater inflater = LayoutInflater.from(getContext());
            inflater.inflate(mStateView, this, true);
            inflater.inflate(mLoadingView, this, true);
            inflater.inflate(mEmptyView, this, true);
        } finally {
            a.recycle();
        }
    }

此间大家重写View的onFinishInflate方法,onFinishInflate 会在当View中具有的子控件均被映射成xml后触发,换句话说正是布局文件被加载成功后回调的。在onFinishInflate方法中貌似适合做初阶化view,大家在此情势中我们遮掩所以子View

/**
* 布局加载完成后隐藏所有View
*/
@Override
protected void onFinishInflate() {
        super.onFinishInflate();
        for (int i = 0; i < getChildCount() - 1; i++) {
            getChildAt(i).setVisibility(GONE);
        }
    }

接下去大家看多个情景View,其实比异常粗略暴力的笔触,因为我们在构造方法中依此出席了mStateView,mLoadingView,mEmptyView。那么第0个子view正是StateView第3个子view就是LoadingView第二个子view就是EmptyView。提供多个例外的格局来呈现区别的状态

    /**
     * State View
     */
    public void showState() {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            //第0个子view为StateView
            if (i == 0) {
                child.setVisibility(VISIBLE);
            } else {
                child.setVisibility(GONE);
            }
        }
    }

    /**
     * Empty view
     */
    public void showEmpty() {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            //第2个子view为EmptyView
            if (i == 2) {
                child.setVisibility(VISIBLE);
            } else {
                child.setVisibility(GONE);
            }
        }
    }


    /**
     * Loading view
     */
    public void showLoading() {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            //第1个子view为LoadingView
            if (i == 1) {
                child.setVisibility(VISIBLE);
            } else {
                child.setVisibility(GONE);
            }
        }
    }

再者提供了私下认可的三种布局,StateView布局为下图所示

管家婆一句话赢钱资料 3

state_view.png

升迁扩展的来得情势,可以修改图片和文字,当然后边早已说过了您能够自定义放肆会见包车型地铁布局

    /**
     *
     * @param tips
     */
    public void showState(String tips) {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            if (i == 0) {
                child.setVisibility(VISIBLE);
                ((TextView) child.findViewById(R.id.load_state_tv)).setText(tips + "");
            } else {
                child.setVisibility(GONE);
            }
        }
    }

    /**
     * @param stateId
     * @param tips
     */
    public void showState(int stateId, String tips) {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            if (i == 0) {
                child.setVisibility(VISIBLE);
                ((ImageView) child.findViewById(R.id.load_state_img)).setImageResource(stateId);
                ((TextView) child.findViewById(R.id.load_state_tv)).setText(tips + "");
            } else {
                child.setVisibility(GONE);
            }
        }
    }

同样的LoadingView和EmptyView也可以有默许的布局样式(下图),客户也能够自定义,提供了相应的诀窍

管家婆一句话赢钱资料 4

loading_view.png

管家婆一句话赢钱资料 5

empty_view.png

   /**
     * Empty view
     *
     * @param text
     */
    public void showEmpty(String text) {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            if (i == 2) {
                child.setVisibility(VISIBLE);
                ((TextView) child.findViewById(R.id.empty_text)).setText(text + "");
            } else {
                child.setVisibility(GONE);
            }
        }
    }

   /**
     * Loadign view
     * @param text
     */
    public void showLoading(String text) {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            if (i == 1) {
                child.setVisibility(VISIBLE);
                ((TextView) child.findViewById(R.id.loading_text)).setText(text + "");
            } else {
                child.setVisibility(GONE);
            }
        }
    }

私下认可提供了为EmptyView和StateView设置点击事件的不二诀要,点击的范围是漫天view

    /**
     * 设置Empty点击事件
     * @param listener
     */
    public void setEmptyClickListener(final OnClickListener listener) {
        if( listener!=null )
            findViewById(R.id.state_retry2).setOnClickListener(listener);
    }

    /**
     * 设置State点击事件
     * @param listener
     */
    public void setStateClickListener( OnClickListener listener ){
        if(listener!=null)
            findViewById(R.id.state_retry).setOnClickListener(listener);
    }

透过调用setEmptyClickListener和setStateClickListener处管事人件的回调,这里思念到自定义的三种情景的View里面可能须求安装点击事件,或然设置文本和图片,提供了以下措施来修改自定义的状态view的公文图片和增多事件

 /**
     * 设置自定义布局的点击事件
     * @param resoureId
     * @param listener
     */
    public void setViewOncClickListener(int resoureId,OnClickListener listener) {
        findViewById(resoureId).setOnClickListener(listener);
    }

    /**
     * 设置自定义布局的view文本
     * @param resoureId
     * @param text
     */
    public void setViewText(int resoureId,String text){
        ((TextView)findViewById(resoureId)).setText(text);
    }

    /**
     * 设置自定义布局的image
     * @param resoureId
     * @param img
     */
    public void setViewImage(int resoureId,int img ){
        ((ImageView)findViewById(resoureId)).setImageResource(img);
    }

三种情形的view都以当下LoadingLayout的子view所以能够由此findViewById间接得到。

最终叁个主意便是showContent,很轻松便是突显了除三种意况外的装有view。不过在写的时候因为LoadingLayout是持续FrameLayout所以建议用三个viewGroup包裹你的布局内容,举个例子LinearLayout,RelativeLayout。

   /**
     * 展示内容
     */
    public void showContent() {
        for (int i = 0; i < this.getChildCount(); i++) {
            View child = this.getChildAt(i);
            if (i > 2 ) {
                child.setVisibility(VISIBLE);
            } else {
                child.setVisibility(GONE);
            }
        }
    }

本章属于第二种自定义控件,承袭已有控件,扩大其效能。

法斯特andrutils 是一套整理修改整合的android开采常用的工具类,常用的自定义view控件等。那样能够减去复制粘贴代码,进而裁减重复代码,也毫不为了二个常用的功效去谷歌(Google)百度,让代码更轻便,让开垦更连忙。同一时候愿意你的增进完美,让android开辟变得更简便。

使用

动用一级简单,直接看代码吧。布局文件

     <com.helin.loadinglayout.LoadingLayout
        android:id="@+id/loading_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ListView
            android:id="@+id/list_view"
            android:layout_width="match_parent"
            android:dividerHeight="2dp"
            android:layout_height="match_parent">
        </ListView>

    </com.helin.loadinglayout.LoadingLayout>

直白用LoadingLayout包裹你和煦的布局就行了,注意暗中认可是如何都未有的,须要怎么着处境一向show出来就行了。showLoading,showState(),showEmpty(),showContent。也能够自定义三种景况。

        app:emptyView="@layout/empty_layout"
        app:loadingView="@layout/loading_layout"
        app:stateView="@layout/loadstate_layout"

由此LoadingLayout的setViewOncClickListener设置任何view的点击事件。setViewText设置TextView的文件新闻,setViewImage设置ImageView的图样能源

//设置点击事件
mLoading.setViewOncClickListener(R.id.text_item, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"1111",Toast.LENGTH_SHORT).show();
            }
 });
//设置文本
mLoading.setViewText(R.id.text_item,"2222");
//设置图片资源
mLoading.setViewImage(R.id.img,R.drawable.test_img);

简简单单实用,有题目接待交换。the end!

注意:

github地址,感兴趣的话,不要紧点赞协助下个人博客

1.ListView的addHeaderView(view)/addFooterView(view)须要在ListView的setAdapter以前实施。

打完广告,走入正题

2.在onTouch伊芙nt中,倘诺重回值为true,表明当前事件被成本,重临值false,表达不花费该事件。

管家婆一句话赢钱资料 6不多说,先上图


在付出进度中,最常的便是数量和界面间的并行,举例无数据时的分界面展现,网络不通时的分界面显得,对于这么些不是正规的数目,大家都要做一些不行的呈现界面,并不是三个空白分界面,那样做一些非常分界面的拍卖,客商体验上会越来越好点。源码地址

步骤:

  1. 来得加载分界面
  2. 呈现失利分界面
  3. 可自定义空分界面

1.自定义RefreshListView承继ListView,重写其构造方法。在构造方法中initView()

代码有一点点多,就贴些关键的

2.给ListView增加头布局,并对头布局做相应的拍卖,依照下拉的图景分歧而改造头布局的UI

1)使用:addHeaderView(view);

2)依照改造HeaderView的paddingTop为-height隐蔽头布局。

mHeaderView = View.inflate(getContext(), R.layout.layout_header_view,null);

mHeaderView.measure(0,0);//传入0,表示根据Xml中安装的宽高实行度量

mHeaderViewHeight =mHeaderView.getMeasuredHeight();

mHeaderView.setPadding(0,-mHeaderViewHeight ,0,0);

addHeaderView(mHeaderView);


  • FEmptyView 继承 FrameLayout
  • FEmptyView里的习性

获取头布局的冲天必要留意:

此刻是无计可施赢获得头布局的冲天的,因为一步向页面在oncreate方法中findviewById找到控件,此时,自定义控件的构造函数就已经调用,initView方法即调用,而自定义控件的渲染是在onCreate()方法之后。此时利用mHeaderView.getMeasuredHeight()或许mHeaderView.getHeight()方法获得的高度值为0.

消除措施:在取得高度在此以前手动衡量一下控件的宽高。

mHeaderView.measure(0,0);//传入0,表示遵照Xml中安装的宽高举办衡量,(父View已经度量过子View之后,填0是指依照XML中设置的宽高进行度量,一般是传childView.getLayoutParams.width来进展衡量)

度量之后,使用mHeaderView.getMeasuredHeight()可以收获中度值。(getHeight是赢得mHeaderView真实展现在界面上的可观)


3)下拉时,通过不停的改动-paddingTop值来使头布局日趋突显出来。

a.监听ListView的触摸事件。重写onToucheEvent(),(不可能去除return的super.onTouch伊夫nt(ev),源码中ListView做了过多的拍卖,如若除去,则ListView不恐怕滑动。)看清滑动距离来判别头布局的偏移量。

管家婆一句话赢钱资料 7

分析

b.二种意况不会呈现头布局,第一种是disY<0表明显示屏在迈入滑动,第三种,第一条可知的条文position不为0,此时无需浮现头布局,那么就不须要设置padding值。

case MotionEvent.ACTION_DOWN:

//按下时获得按下Y坐标

    downY = ev.getY();

break;

case MotionEvent.ACTION_MOVE:

moveY = ev.getY();

    disY =moveY -downY;

    if(disY >0 && getFirstVisiblePosition() ==0){

mHeaderView.setPadding(0,(int)(-mHeaderViewHeight+disY),0,0);

    }

break;

c.下拉得了后(即头布局完全展现),需求将箭头更改为发展,並且退换文字下拉刷新为松手刷新。当paddingTop >= 0时,更新UI。

概念多少个int常量,记录头布局的情形:if paddingTop > = 0,表达头布局完全突显,那么此时头布局的情形应当为甩手刷新,状态记为1:REFLEASE_REFRESH 

万一paddingTop<0,表明头布局未全体显示,此时头布局为下拉刷新,状态记为0.还也有一种情形是正在刷新,状态记为0:PULL_TO_REFRESH

正值刷新:REFRESHING = 2;

代码方面,为了防止时时检查评定paddingTop(因为手指在显示屏上每三遍微小的移位都会调用ACTION_MOVE那么些意况下的代码,加多判别,只会在意况改换时步入实行if中退换动画、文字等代码),节约品质,能够把改换文字和卡通的动作从前拉长二个推断

if(paddingTop>=0&¤tState != REFLEASE_REFRESH){

.....//此处为转移动画和文字的代码:放手刷新状态,当前事态不为放手刷新状态时,才会跻身这里

}else if(paddingTop < 0 && currentSate != PULL_TO_REFRESH){

//同上,当前气象不为下来刷新状态时,才会踏向这里,假使情形已经是下来刷新状态,即便paddingTop<0,也不会进去这里。}

此处应该专心的是,若是在MOVE中增多了团结的事件,在MOVE中break前,增添return true;表示方今事变被我们管理并开支。

d.手指放手时的监听管理:

1.当手指放手时,头布局未完全呈现,即paddingTop<0,还未有转化成松手刷新图景,即眼下气象为下拉刷新PULL_TO_REFRESH,此时放手ListView应该是弹回去,即头布局隐蔽,把头布局的paddingTop设置为-measureHeight即可。

2.当手提式有线电电话机放手时,头布局已经完全展现,即paddingTop>=0,已经转化成放手刷新情形,即当前景观是REALEASE_REFRESH,此时松手,头布局paddingTop设置为0,而且上边的文字改造为正值刷新,iv隐蔽(遮盖以前要破除动画,不然不恐怕遮蔽),pb显示。

3.万一情形为正在刷新中,调控客商不能够拖拽,在ACTION_MOVE事件中,增添判定,要是是正在刷新,则执行父类对touch事件的管理。

if(current == REFRESHING){

//正在刷新时,不可能往下拖拽,推行父类的touch事件的管理方式,当头布局展现完全时,不可能拖拽

return super.onTouchEvent(ev);

}

效果图:

管家婆一句话赢钱资料 8

下拉刷新作用图

 private LinearLayout setdataLay;//设置数据布局 private View emptyView;//空布局 private ImageView emptyImg;//空布局的ImageView private TextView emptyTv;//空布局的TextView private Button emptyBt;//空布局的Button private Context context;

  • 为了自定义分界面可配置,增添自定义属性attrs

3.监听回调,当头布局意况为正值刷新时,须求报告外部,那时作者正在下拉刷新,外部须要调用相关办法开展下拉刷新。

a.在RefreshListView中定义一个接口OnRefreshListener,接口中增多方法onRefresh();

public interface OnRefreshListener{

             void onRefresh();

}

b.在RefreshListView中加多艺术setOnRefreshListener(OnRefreshListener listener),便于外面使用该接口,

public void setOnRefreshListener(OnRefreshListener listener){

this.listener = listener;

}

外部使用方式:此处在MAinActivity中

refreshListView.setOnRefreshListener(new OnRreshListener(){

onRefresh(){

//当RefreshListView的情况为正在刷新时,那么些地方的章程会被调用

}});

c.在自定义View中,在适度的义务调用onRefresh()方法,比如在那么些案例中,当客商手指抬起何况状态为正值刷新时,调用该办法,在自定义View中调用onRefresh(),实际上海外国语高校界的(这里是MainActivity中的onRefresh被调用),此时得以把自定义View中的有个别数据作为参数字传送递到分界面上。

管家婆一句话赢钱资料 9

d.下拉刷新:一般意况,下拉都以再一次加载一回数据。在这里模拟加载一条数据,首先加多到list中,再通报adapter更新数据就能够。刷新实现以后须求文告RefreshListView,把头布局收起来,因而在RefreshView中定义多个主意,completedRefresh(),在格局中改造当前场馆,隐敝头布局,更新UI。

管家婆一句话赢钱资料 10

举办下拉刷新

管家婆一句话赢钱资料 11

刷新完结之后改换布局

4.增加脚搭架子,上拉加载更加多。

a.增加脚布局并掩盖

mFooterView = View.inflate(getContext(), R.layout.layout_foot_view, null);

mFooterView.measure(0,0);

mFooterViewHeight =mFooterView.getMeasuredHeight();

mFooterView.setPadding(0,-mFooterViewHeight,0,0);

addFooterView(mFooterView);

b.增加onScrollListener,剖断滑动状态,固然滑动状态为空闲状态,并且滑动到终极二个条目款项时,呈现脚布局,跳到脚布局。

onScrollListener中的多少个艺术:onScrollStateChanged,当滑动状态退换时调用,滑动状态有三种分别是:

1.SCROLL_STATE_IDLE = 0 空闲状态,源码中的解释为:

The view is not scrolling. Note navigating the list using the trackball counts as being in the idle state since these transitions are not animated.

2.SCROLL_STATE_TOUCH_SCROLL = 1 客商在进展触摸滚动,源码中的解释为:

The user is scrolling using touch, and their finger is still on the screen

3.SCROLL_STATE_FLING = 2 滑翔状态 源码中的解释为:

The user had previously been scrolling using touch and had performed a fling. The animation is now coasting to a stop

客商滚动内容时,滚动状态变化的次第为:0 --> 1--> 2 --> 0,即悠闲-->顾客早先滑动显示屏-->客商手指离开荧屏但荧屏仍在滑行-->滑翔结束回到空闲状态

那儿亟待在滚动状态重新回到空闲时判定是或不是滚动到最后一条,滚动到最后一条即彰显脚布局:但是要留神,借使此刻早就正在加载,客商往上拉的时候照旧会实行这几行代码,再叁回开展加载更加的多的操作,为了幸免这种情况产生,能够增加一个boolean类型的变量,举行标志和判定。

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

//当滚动状态改换时调用,当用户滑到最后多少个同期滚动状态为空闲,getCount()获得的是adapter中的list中多少的总条数

       if(scrollState == SCROLL_STATE_IDLE && getLastVisiblePosition() == getCount() - 1&&!isLoadingMore){

               isLoadingMore= true;//标志为true,表达正在加载。

              //表达滚到最终一条,呈现脚布局

               mFooterView.setPadding(0,0,0,0);

               setSelection(getCount());//显示最终一条

}

c.接口回调

1.在OnRefreshListener中增添艺术,onLoadMore(),用于加载更繁多据。

管家婆一句话赢钱资料 12

添加onLoadMore方法

2.在RefreshListView中的脚布局出现时调用onLoadMore(),与下拉刷新一样,实际上onLoadMore()方法是在分界面中应用接口时被调用。

管家婆一句话赢钱资料 13

在分界面中张开加载越来越多的拍卖。

管家婆一句话赢钱资料 14

3.加载完了一样调用completedRefresh()方法,在措施中拍卖。判别是下拉刷新依然上拉加载更多。

管家婆一句话赢钱资料 15

管家婆一句话赢钱资料 16

成就效果图


恢宏内容:

<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="EmptyLayout"> <attr name="empty_layout" format="reference" />//空界面的layout文件 <attr name="empty_imageView" format="reference" />//空界面imageView的id <attr name="empty_textView" format="reference" />//空界面textView的id <attr name="empty_button" format="reference" />//空界面button的id <attr name="include_layout" format="reference" />//数据展示界面的layout文件 </declare-styleable></resources>

1.自定义ProgressBar:

xml中增加该属性:indeterminateDrawable Infiniti循环的drawable

该属性的值为shape。

<rotate xmlns:android=""

android:fromDegrees="0"

    android:toDegrees="360"

    android:pivotX="50%"

    android:pivotY="50%"

    >

<!--旋转动画中能够饱含shapeandroid:pivotX="二分之一" android:pivotY="二分之一" 相对于自身的主导地点android:pivotX="一半p" android:pivotY="二分一p" 相对于父控件的主干地点-->

<shape

        android:shape="ring"

        android:innerRadius="@dimen/dp_20"

        android:thickness="@dimen/dp_5"

        android:useLevel="true"

        android:innerRadiusRatio="2.5"

        android:thicknessRatio="10"

      >

<gradient android:startColor="#88E93751"

            android:centerColor="#33E93751"

            android:endColor="#00000000"

            android:type="sweep"/>

   <!--在颜f色值前面增加00-f 00纯透明,ff不透明

         sweep:扫描-->

<!--

          内半径innerRadius

          厚度thickness

          内圆半径比 innerRadiusRatio="2.5" 内圆半径与容器宽高比

          圆环厚度比 thicknessRatio="10" 圆环厚度与容器宽高比

          -->

</shape>

</rotate>

  • FEmptyView 开端化分界面布局

2.筋斗动画

头布局中箭头的团团转动画

//向下翻跟斗画

public static void RotateDown(View view){

RotateAnimation animation = new RotateAnimation(

180f,0f,

Animation.RELATIVE_TO_SELF, 0.5f,

Animation.RELATIVE_TO_SELF, 0.5f);

animation.setDuration(500);

animation.setFillAfter(true);

view.startAnimation(animation);

}

//向上翻转动画

public static void RotateUp(View view){

RotateAnimation animation = new RotateAnimation(

0f, 180f,

Animation.RELATIVE_TO_SELF, 0.5f,

Animation.RELATIVE_TO_SELF, 0.5f);

animation.setDuration(500);

animation.setFillAfter(true);

view.startAnimation(animation);

}

 private void initView(TypedArray array) { int emptyViewId = array.getResourceId(FResourcesUtils.getStyleable("EmptyLayout_empty_layout"), FResourcesUtils.getLayoutResources("f_empty_layout")); int emptyImgId = array.getResourceId(FResourcesUtils.getStyleable("EmptyLayout_empty_imageView"), FResourcesUtils.getIdResources("empty_img")); int emptyTvId = array.getResourceId(FResourcesUtils.getStyleable("EmptyLayout_empty_textView"), FResourcesUtils.getIdResources("empty_tv")); int emptyBtId = array.getResourceId(FResourcesUtils.getStyleable("EmptyLayout_empty_button"), FResourcesUtils.getIdResources("empty_bt")); int dataViewId = array.getResourceId(FResourcesUtils.getStyleable("EmptyLayout_include_layout"), 0); //获取空布局View emptyView = View.inflate(context, emptyViewId, null); //获取空布局的imageView emptyImg = (ImageView) emptyView.findViewById(emptyImgId); emptyTv =  emptyView.findViewById(emptyTvId); emptyBt =  emptyView.findViewById(emptyBtId); setdataLay = new LinearLayout;//先添加一个LinearLayout setdataLay.setOrientation(LinearLayout.VERTICAL); setdataLay.setVisibility; if (dataViewId != 0) { addChildViewid(dataViewId);//把数据界面添加到LinearLayout里 } addView(setdataLay); addView(emptyView); }
  • 暗中认可空分界面布局 有三个ImageView,叁个TextView,Button
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:gravity="center" android:orientation="vertical"> <ImageView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxHeight="200dp" android:maxWidth="200dp" /> <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:textSize="16sp" /> <Button android: android:layout_width="120dp" android:layout_height="40dp" android:layout_marginTop="6dp" /></LinearLayout>
  • FEmptyView 的一部分措施void loadding()//突显加载分界面void loaddingSuccess() 成功获取到数码把EmptyView遮掩void loaddingFail() 加载战败分界面...

简短了非常多措施,详细看源码

  • ImagView 回调为了更加好的显得ImagView 就写了个回调方法,自行消除ImagView的动画等
/** * ImagView 回调 */ public interface ImgCallBack { void setImg(ImageView img, int emptyType); }
  • emptyView 回调假设要做越来越深度自定义emptyView,这里也回到了emptyView,那样就足以博得全部emptyView的控件
/** * emptyView 回调 */ public interface ViewCallBack { void emptyViewCallBack(View view); }

率先种选用办法

  1. 在急需运用的xml增添
 <cn.hotapk.fastandrutils.widget.FEmptyView android: android:layout_width="match_parent" android:layout_height="match_parent" app:include_layout="@+layout/data_layout" />

FEmptyView 不能在xml下加子View只可以如此添增添少分界面

 app:include_layout="@+layout/data_layout"

在oncreat() 方法中

 empty_lay = (FEmptyView) findViewById(R.id.empty_lay); empty_lay.loadding("正在加载数据。。。"); empty_lay.loaddingFail("加载数据失败。。。", "点击刷新", new View.OnClickListener() { @Override public void onClick { loadding(); } }, new FEmptyView.ImgCallBack() { @Override public void setImg(ImageView img, int emptyType) { img.setBackgroundResource(R.mipmap.loaddingfail); if (img.getAnimation() != null) img.getAnimation().cancel;

其次种选用办法

<cn.hotapk.fastandrutils.widget.FEmptyView android: android:layout_width="match_parent" android:layout_height="match_parent"/>

FEmptyView 不能够在xml下加子View只可以在oncreat() 中那样添增添少分界面

 empty_lay.addChildView(childView);

事后的应用第一种

其三种选用办法

可自定义emptyView

 <cn.hotapk.fastandrutils.widget.FEmptyView android: android:layout_width="match_parent" android:layout_height="match_parent" app:empty_button="@+id/custom_empty_bt"//自定义layout的button的id app:empty_imageView="@+id/custom_empty_img"//自定义layout的imageView的id app:empty_textView="@+id/custom_empty_tv"//自定义layout的textView的id app:empty_layout="@+layout/custom_empty_layout"//自定义的空 layout界面 app:include_layout="@+layout/data_layout" />//展示数据的layout

FEmptyView 一样不能在xml下加子View不得不这么添扩张少分界面

 app:include_layout="@+layout/data_layout"

此后的施用同第一种

第各个选拔格局

可深度自定义emptyView

 <cn.hotapk.fastandrutils.widget.FEmptyView android: android:layout_width="match_parent" android:layout_height="match_parent" app:empty_layout="@+layout/custom_empty_layout"//自定义的空 layout界面 app:include_layout="@+layout/data_layout" />//展示数据的layout

深度自定义的话代码中会再次来到自定义的emptyView

 public View getEmptyView() { return emptyView; }

能够findViewById获取自定义的控件之后的行使同第一种大概

Android 自定义空数据提醒分界面 EmptyView 演说得了

本文由管家婆资料大全发布于关于管家婆,转载请注明出处:【管家婆一句话赢钱资料】自定义空数据提示界

关键词: