今天无意之中看到了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); } } }