在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的缺陷,手指和鼠标箭头最大的区别是在于前者有温度和感觉的,这时候Material Design应运而生。

关于Material Design,材料设计你大概已经知道了,它介于拟物于扁平(qq,旺旺PC端应用)之间的设计。Material Design有着自己的目标,不仅仅为了好看整体而已,它要让不同设备的屏幕表现出一直、美观的视觉体验以及交互。主要包括的控件有TabLayout、TextInputLayout、SwitchCompat、Card、SnackBar、BottomSheet、Shadows、FloatingActionButton、RecycleView、NavigationView....

之前知乎app的登录界面好像是这个效果。这里我们就来体验一下TextInputLayout的具体效果:最终的效果图(在真机上有一定差距)如下:

这篇文章主要分为以下几个部分

  1. 首先通过nuget引入xamarin.android.design.widget
  2. TextInputLayout布局
  3. TextInputLayout文本框样式修改
  4. 通过单击事件验证TextInputLayout文本框错误的提示

nuget引入xamarin.android.design.widget

TextInputLayout是设计兼容包下的内容,Material Design仅支持android5.0及以上版本,当V7 AppCompat结合使用才能兼容到android2.1。在引入design包时将自动引入V7兼容包,就是引入Design即可如图:

TextInputLayout布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_primary">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="30dp"
android:paddingLeft="40dp"
android:paddingRight="40dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginBottom="50dp"
android:gravity="center"
android:text="登录"
android:textSize="40sp"
android:textColor="@color/color_white"/>
<android.support.design.widget.TextInputLayout
android:id="@+id/userNameContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tvTitle"
android:layout_marginTop="4dp">
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:id="@+id/userName"
android:inputType="textPassword"
android:textColor="@color/color_white"
android:textColorHint="@color/color_dedede"
android:hint="userName"/>
</android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout
android:id="@+id/passWordContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_below="@id/userNameContainer">
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:id="@+id/passWord"
android:inputType="textPassword"
android:textColor="@color/color_white"
android:hint="Password"/>
</android.support.design.widget.TextInputLayout>
<Button
android:id="@+id/MyButton"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@id/passWordContainer"
android:text="@string/Hello"/>
</RelativeLayout>
</LinearLayout>

注意的是TextInputLayout内只能放TextView控件,并且不能单独使用,只用布局就可以实现这种获取焦点hint上滑的动画效果。当然这和你的界面要求还是有一定差距的,所以这TextView的一些样式还需要自定义。

TextInputLayout文本框样式修改

上面布局的代码中可以发现,属性textColorHint 并没有效果,在style中设置才有效果。看一下Theme
  <style  name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorAccent">#ffffff</item>
<item name="android:textColorHint">@color/color_dedede</item>
<item name="colorControlNormal">@color/color_dedede</item>
<item name="colorControlActivated">@color/color_white</item>
</style>

?colorAccent 是哪里的颜色?是系统特定内容的颜色,类似的颜色statusBarColor、windowBackground,看这张图你就明白了



文本没有获取焦点的文字颜色:android:textColorHint
下划线没有获取焦点的颜色:colorControlNormal
下划线获取焦点的颜色:colorControlActivated
TextInputLayout取值:不需要通过获取TextView这样的string userNameText = userName.EditText.Text;

通过事件验证TextInputLayout文本框错误的提示

在客户端必须的做字段的验证,所以我们通过TextView的TextChanged事件和FoucsChange事件来看看。

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            TextInputLayout userName = FindViewById<TextInputLayout>(Resource.Id.userNameContainer);
            TextInputLayout passWord= FindViewById<TextInputLayout>(Resource.Id.passWordContainer);
            passWord.EditText.TextChanged += (s, e) =>
            {
                System.Diagnostics.Debug.WriteLine(e.Start);
                System.Diagnostics.Debug.WriteLine(e.Text);
                if (e.Start > 8)
                {
                    passWord.ErrorEnabled = true;
                    passWord.Error = "密码不能大于8位";
                }
                else
                {
                    passWord.ErrorEnabled = false;
                }
            };
            userName.EditText.FocusChange += (s, e) =>
            {
                if (!e.HasFocus)
                {
                    if (ValidateTel(userName.EditText.Text))
                    {
                        userName.ErrorEnabled = false;
                    }
                    else
                    {
                         userName.ErrorEnabled = true;
                        userName.Error = "userName不正确";
                    }
                }
            };
        }
        private bool ValidateTel(string tel)
        {
            string matchReg = "^1[3|4|5|7|8][0-9]{9}$";
            return System.Text.RegularExpressions.Regex.IsMatch(tel,matchReg);
        }

虽然你也可以在TextInputLayout自带的属性带实现这个效果,那样太死板了。如果你真的要写在Xml文件里你可以这样的,首先在根布局中添加   xmlns:app="http://schemas.android.com/apk/res-auto" 使用自带控件的属性。常见的属性:

app:errorEnabled="true"

app:counterEnabled="true"

app:counterMaxLength="4"
app:counterTextAppearance="@style/style1" 默认的文本框颜色和大小
app:counterOverflowTextAppearance="@style/style1" 超出计数默认的文本框颜色和大小。还有一些样式也可以通过TextInputlayout自带的属性设置

作者:张林

标题:仿知乎app登录界面(Material Design设计框架拿来就用TexnInputLayout

原文地址:http : //blog.csdn.net/kebi007/article/details/70470754

转载随意注明出处



仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)的更多相关文章

  1. Android Material Design-Creating Apps with Material Design(用 Material Design设计App)-(零)

    转载请注明出处:http://blog.csdn.net/bbld_/article/details/40400031 翻译自:http://developer.android.com/trainin ...

  2. 超实用!9个目前流行的MATERIAL DESIGN前端框架

    http://www.uisdc.com/material-design-frameworks-top-9 谷歌推出的Material Design风格已见有一些APP UI采用,视觉和交互体验都很棒 ...

  3. 轻量级 Material Design 前端框架 MDUI (纯html,css,与css框架跟react vue不冲突)

    MDUI 是一个轻量级的 Material Design 前端框架,对照着 Material Design 文档进行开发,争取 1:1 实现 Material Design 中的组件. 多主题支持 M ...

  4. 用户登录(Material Design + Data-Binding + MVP架构模式)实现

    转载请注明出处: http://www.cnblogs.com/cnwutianhao/p/6772759.html MVP架构模式 大家都不陌生,Google 也给出过相应的参考 Sample, 但 ...

  5. Android 使用Toolbar+DrawerLayout快速实现仿“知乎APP”侧滑导航效果

    在以前,做策划导航的时候,最常用的组件便是SlidingMenu了,当初第一次用它的时候觉得那个惊艳啊,体验可以说是非常棒. 后来,Android自己推出了一个可以实现策划导航的组件DrawerLay ...

  6. Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源码

    在android学习中,动作交互是软件中重要的一部分,其中的Scroller就是提供了拖动效果的类,在网上,比如说一些Launcher实现滑屏都可以通过这个类去实现.下面要说的就是上次Scroller ...

  7. Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源代码

    在android学习中,动作交互是软件中重要的一部分.当中的Scroller就是提供了拖动效果的类,在网上.比方说一些Launcher实现滑屏都能够通过这个类去实现.以下要说的就是上次Scroller ...

  8. Material UI – Material Design CSS 框架

    Material Design 是谷歌推出的全新的设计理念,采用大胆的色彩.流畅的动画播放,以及卡片式的简洁设计.Material Design 风格的设计拥有干净的排版和简单的布局,容易理解,内容才 ...

  9. .Net语言 APP开发平台——Smobiler学习日志:仿12306的APP登陆界面

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...

随机推荐

  1. azure备份虚拟机

    备份 azure虚拟机 提前创建了一个linux虚拟机,位置是chinaeast. 如果我们需要备份的虚拟机分别在中国东部和北部,那么需要在两个位置都创建备份库. 创建库 登录经典门户,新建-> ...

  2. 用Vim 加密文本

    Vim强大就在于 可以干任何想要做的事情,比如加密.Fedora 18上给大家做一个测试.首先安装 vim: sudo yum install vim -y然后检验模块是否有加密: vim --ver ...

  3. 【二十二】mysqli事务处理

    事务处理 事务基本原理 如果不开启事务,执行一条sql,马上会持久化数据.可见:默认的mysql对sql语句的执行是自动提交的! 如果开启了事务,就是关闭了自动提交的功能,改成了commit执行自动提 ...

  4. cinder存储节点 后端采用lvm、nfs安装配置

    #cinder存储节点 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #cinder存储节点 #cinder后端采 ...

  5. Python3_打开和运行方式

    蹬蹬蹬--第一次写博客,如有错误欢迎指正. Python很火,前几天也是因为需要装了一下,但是并没有用它,今天打开准备刚准备试下,才发现自己对这个软件一无所知,百度了一些资料发现并不能用才知道pyth ...

  6. Wannafly模拟赛5 A Split 暴力 二分加速

    你有一个大小为

  7. System.Security.Cryptography.RSA.FromXmlString 系统找不到指定的文件和X509读取证书文件系统找不到指定的文件异常

    前言: 最近公司增加服务器,在新增加的服务器中发现一些问题. 1.应用程序在读取证书文件中出现"系统找不到指定的文件."异常,但是已经确认证书文件存在.本地测试也可以读取,就在新增 ...

  8. 【JDK1.8】JDK1.8集合源码阅读——IdentityHashMap

    一.前言 今天我们来看一下本次集合源码阅读里的最后一个Map--IdentityHashMap.这个Map之所以放在最后是因为它用到的情况最少,也相较于其他的map来说比较特殊.就笔者来说,到目前为止 ...

  9. EntityFrameworkCore v1.1.1 问题汇总

    随着宇宙第一IDE的最新版本发布[2017/3/7],AspNetCore 和EntityFrameworkCore(团队)都发布了最新的代码. 不过在我看来,这些到还不是最重要的.最重要的是dotn ...

  10. Linux send和recv

    1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP ...