snackbar 、TextInputLayout、RecycleView 底部提示,登录注册界面,列表listview替代

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq998701/article/details/79882375

今天无意之中看到了design包里的几个控件,感觉还好,说不动用的上,简单记录分享下,说不定以后就用上咯。

开始前,先导入这个库,不要问为什么,东西都在里面封装好了,拿出来用的。

compile 'com.android.support:design:26.0.0-alpha1'

  1.snackbar 第一次看到这玩意就想到了吐司(Toast),但是功能和实现方式跟吐司还是不一样的。吐司只实现了简单的提示功能,snackbar实现了与用户的简单交互;可以自定义点击事件,和提示 内容,比如,,你请求网络数据的时候,网络挂了,你弹个snackbar和用户打个招呼,顺便告诉用户,你要是不死心,就旁边自己点击重刷下。好了不多说,自己根据需要使用吧。

    (1)简单封装了一个类,方便调用

public class SnackbarUtils {

    private static Snackbar snackbar;
    private static int actionColor;

    public static void setSnackbarActionColor(int color) {
        actionColor = color;
    }

    public static void showSnackBar(View view, String title, String btnTip, final View.OnClickListener clickListener) {
        if (snackbar == null) {
            snackbar = Snackbar.make(view, title, Snackbar.LENGTH_SHORT);
        }
        snackbar.setAction(btnTip, new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                clickListener.onClick(view);
            }
        });
        if(actionColor!=0){
            snackbar.setActionTextColor(actionColor);
        }
        snackbar.show();
    }

    public static void dismissSnack() {
        if (snackbar == null) {
            return;
        }
        snackbar.dismiss();
    }

}

(2)在activity里调用,btnClick自己写的按钮,测试用

btnClick.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SnackbarUtils.setSnackbarActionColor(getResources().getColor(R.color.colorPrimary));
      SnackbarUtils.showSnackBar(btnClick, "数据请求失败", "点击重试", new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Toast.makeText(MainActivity.this,"重试中、、",Toast.LENGTH_SHORT).show();
          }
      });
    }
});

2.TextInputLayout 是design包里的一个有点像是定制的登录注册控件,用了一下,感觉确实比自己写一个登录注册输入控件会友好很多,设置的提示文字,还有动画效果,可以自行看下。值得推荐。

<android.support.design.widget.TextInputLayout
    android:id="@+id/tlUserName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColorHint="@color/colorPrimary"
    android:layout_margin="10dp">

    <EditText
        android:id="@+id/etUserName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="账号" />


</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/tlPassword"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp">

    <EditText
        android:id="@+id/etPsw"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="密码" />


</android.support.design.widget.TextInputLayout>
(1)在使用activity中,使用的时候,TextInputLayout 有2个方法可以关注一下,这2个方法可以用于输入数据的校验,对用户还是很友好的。
tlUserName.setErrorEnabled(true);
tlUserName.setError("错误提示");

3.还有一个比较推荐的recycleView 替代listView是个不错的选择,性能比listview好很多,还支持多列显示。实用性比较好。

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycleView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

(1)要注意的是,recyleView 的divider线是需要自己在适配器的item布局里定义的,recycleView 本身没有这个属性。

(2)这些都是小事,主要看下recycleAdpter的适配器就好了。。大概就是下面这个样子了,根据的需求自己写内容。稍微会比listview的适配器复杂一丢丢。

public class GuRecycleViewAdapter extends RecyclerView.Adapter {
    private List<User> users;
    private Context context;
    private LayoutInflater inflater;

    public GuRecycleViewAdapter(Context context, List<User> users) {
        this.users = users;
        this.context = context;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.recycle_item, null,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        User user = users.get(position);
        ViewHolder viewholder = (ViewHolder) holder;
        viewholder.tvName.setText(user.getName());
        viewholder.tvAge.setText(user.getAge()+"");
    }

    @Override
    public int getItemCount() {
        return users.size();
    }

    private class ViewHolder extends RecyclerView.ViewHolder{
        TextView tvName;
        TextView tvAge;

        public ViewHolder(View itemView) {
            super(itemView);
            tvName= itemView.findViewById(R.id.tvName);
            tvAge= itemView.findViewById(R.id.tvAge);
        }
    }
}


猜你喜欢

转载自blog.csdn.net/qq998701/article/details/79882375