在我脑子里还没有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. LINQ学习系列-----2.3 迭代器带来的延迟查询

    此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...

  2. Java 执行CMD/DOS

    最近在写一个自己的邮箱服务器里用到 监视及起/停 windows 中的服务,调查发现还是得用dos来做这些事情 说一下遭遇战的过程 首先是java里如何执行DOS命令,查到下记函数 Runtime.g ...

  3. SSM Spring+SpringMVC+mybatis+maven+mysql环境搭建

    SSM Spring+SpringMVC+mybatis+maven环境搭建 1.首先右键点击项目区空白处,选择new->other..在弹出框中输入maven,选择Maven Project. ...

  4. C# 中枚举的一点研究(跳过一些net坑的研究而已)

    之前一直使用Enum.Parse()将字符串转为枚举,没有深究,后面发现一个问题后对下面的Enum有了一个初步研究(.net 4.0).看下面代码. (留意,枚举类型是值类型,其值不能为Null,所以 ...

  5. GO学习——安装编译(1)

    学习网站列表: Golang官网:https://golang.org/ Golang标准库文档:https://golang.org/pkg Golang中文标准库文档:https://studyg ...

  6. 《RabbitMQ Tutorial》译文 第 2 章 工作队列

    源文来自 RabbitMQ 英文官网的教程(2.Work Queues),其示例代码采用了 .NET C# 语言. In the first tutorial we wrote programs to ...

  7. Android破解学习之路(二)——Android游戏 滚动的天空破解

    经过上一期的破解教程,相信大家跟我一样都是对破解是初入门,我们破解的目的是什么? 赚钱吗?百度上一大堆破解版的应用,破解的人有赚到钱吗?实实在在的说,其实也是方便自己而已. 玩个游戏,感觉过不去了,来 ...

  8. javascript算法题判断输入年份是否是闰年

    用户输入一个年份,判断这个年是否是闰年.判断闰年条件:① 非整百年数除以4,无余为闰,有余不闰:② 整百年数除以400,无余为闰,有余不闰.比如:2000年,整百数年,就要用②公式,除以400,无余数 ...

  9. Android注解方式实现表单校验

    在开发中总会遇到输入框的输入规则限制 比如 电话输入框电话号码的校验,密码规则的校验等 ,我们通常做法是提交操作时对每个输入框的输入内容进行校验,很多的if else ,代码看起来很乱,其实我们可以用 ...

  10. 3.python元组与列表

    Python的元组与列表类似,同样可通过索引访问,支持异构,任意嵌套.不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号. 创建元组 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开 ...