1. 程式人生 > >仿知乎app登入介面(Material Design設計框架拿來就用的TexnInputLayout)

仿知乎app登入介面(Material Design設計框架拿來就用的TexnInputLayout)

在我腦子裡還沒有Material Design這種概念,就我個人而言,PC端應用扁平化設計必須成為首選,手當其衝的兩款即時通訊旺旺和QQ早就完成UI扁平化的更新,然而客戶端扁平化的設計本身就存在天生的缺陷,手指和滑鼠箭頭最大的區別是在於前者有溫度和感覺的,好吧,能不能不要亂扯,這和Material Design有毛關係嗎,的確沒有,我想表達的還是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

轉載隨意註明出處

相關推薦

仿app登入介面(Material Design設計框架TexnInputLayout)

在我腦子裡還沒有Material Design這種概念,就我個人而言,PC端應用扁平化設計必須成為首選,手當其衝的兩款即時通訊旺旺和QQ早就完成UI扁平化的更新,然而客戶端扁平化的設計本身就存在天生的缺陷,手指和滑鼠箭頭最大的區別是在於前者有溫度和感覺的,好吧,能不能不要亂

實現app的主介面效果

一、顯示效果 二、分析 很感謝軒轅的文章,學習了。實現這種效果先分析一下怎麼去實現。首先最上面的是一個自定義的ActionBar樣式。中間的側滑加主頁是利用DrawLayout控制元件來實現的。 這裡使用到ActionBar,為了向下相

APP登入介面(網頁仿製版)

//顯示登入視窗 function loginShow(o){ document.getElementById("move_div").style.display = "block"; docu

JAVA開源仿問答原始碼

專案說明 FlyCms 是一個類似知乎以問答為基礎的完全開源的JAVA語言開發的社交網路建站程式,基於 Spring Boot+Bootstrap3+MyBatis+MYSQL+Solr 應用架構,專注於社群內容的整理、歸類和檢索,它集合了問答,digg,wiki 等多個程式的優點,幫助

Tesseract:識別網站登入驗證碼

機器視覺 從 Google 的無人駕駛汽車到可以識別假鈔的自動售賣機,機器視覺一直都是一個應用廣 泛且具有深遠的影響和雄偉的願景的領域。 我們將重點介紹機器視覺的一個分支:文字識別,介紹如何用一些 Python庫來識別和使用線上圖片中的文字。

python 跨app發私信以及Python專欄30萬戶資訊爬取

import requests class SendMsg: def __init__(self): self.url='https://www.zhihu.com/api/v4/messages' #要傳送的資訊 self.data={'co

jjyq app登入介面報:“內容型別不支援”???

1.在 app上進行登入操作,成功。 2.通過fiddler抓包得到jjyq登入介面的url、param、header。 3.在pycharm中使用requests發起請求,執行報錯:內容型別不支援? import requests Logger=My_Log() class

Kotlin實現仿底部導航欄顯示隱藏效果Behavior

        最開始遇見這個問題我的第一想法是給recyclerview新增滑動監聽,然後再給底部導航新增顯示隱藏動畫,可是這麼做很不優雅,一旦recyclerview不止一個就需要給每個都新增一遍監聽(雖然同樣的程式碼cv就行了),這絕不是一個優秀程式設計師的追求。所以就

Python-requests-模擬登入

繼續我的python爬蟲旅程,開始寫部落格的時候,說一天一篇,真的只是動動嘴皮子,做起來還真的難,其實是自己給自己找理由… 不管怎樣,今天來更新一篇,寫個知乎的模擬登入,感覺最開始學習爬蟲的時候,大家都期盼著可以寫那種需要登入的網站,或者有各種驗證碼的,那時

基於Material Design設計的分享文字圖片的APP

寫在前面:這個專案是自己當時為了準備面試而做的,由於時間匆忙,水平有限,專案多多少少存在一些問題。程式碼的整潔性與複用性,以及整體架構的搭建都不盡人意,大家看看裡面的一些效果就好。 Material Design–Google在I/O 2014上推出了

【2018.05.11】python3.6+selenium 自動登入+驗證碼 問題

時隔這麼多年,驗證碼問題我解決了,這裡也能寫下,我就是懶得寫。哈哈   #coding = utf-8 ''' 自動登入知乎 出現了驗證碼的問題,待解決...... ''' import time from selenium import webdriver driver = w

scrapy模擬登入和cookie登入

模擬登入# -*- coding: utf-8 -*- import scrapy from scrapy import cmdline #from scrapy.spiders import CrawlSpider import scrapy from scrap

仿日報(3)_MainActivity分析

MainActivity分析 1、結構 2、介面分析 首先第一張圖片是主頁面,是一個Fragment。第二張圖片是左側滑選單,是一個ListView。整體介面是使用MaterialUI中的DrawableLayout佈局。關於Drawa

【專案原始碼】- 【模仿日報二】吐血高仿日報

對之前的模仿做品進行了改善改善。。。再改善。。。(僅供學習) 多說無益。。。。上圖才是王道: 這個東西越模仿發現他的東西就越多,離上次的模仿時間已經過去好久了,這一版本的介面看似好很多,但還是

仿廣告效果

先放一張知乎的廣告截圖: 說下我的實現吧,主要利用RecyclerView,在需要出現廣告的時候,將這個item透明化,顯示 ImageView 就達到這種效果了。最主要是這個RecyclerView的分隔條,用了個三方的才最終達到理想的效果。 可能還是會和原知乎有點

【iOS】仿日報,RxSwift-Part2-詳情頁的搭建

前言 在上一篇,我們搭建了首頁。而這篇,我們將開始搭建話題詳情頁。 分析 還是先來看下演示gif { "body": "<div class=\"main-wrap content-wrap\">\n<div cla

仿日報(1)_緒論

匯入庫與專案結構分析 1、匯入庫 開源的迷人之處正在於“不用重複的造輪子”,使用開源庫能夠一定程度上加快我們開發的速度,推進軟體開發更快的發展。 在筆者的專案中使用了以下幾個開源庫 compile 'com.android.support:desig

仿內容廣告欄 WindowImageView

作者 | Bleoo 地址 | http://www.jianshu.com/p/8c14fa566c52 宣告 | 本文是 Bleoo 原創,已獲授權釋出,未經原作者允許請勿轉載 前言 前幾天看到知乎裡的雙11廣告有這麼一個效果,就決定仿一個出來。 專案地址在 https://github.

vue低仿日報

概述 一個基於vue的仿知乎日報的前端專案。 關於知乎日報: 知乎日報是一款擁有千萬使用者的資訊類客戶端,每日提供來自知乎社群的精選問答,還有國內一流媒體的專欄特稿。 主要功能 每天更新好文章,包括權威的時事解讀、有趣的生活建議   更符合使

微信小程式日記——高仿日報(上)

該小程式的作者是Oopsguy,我也參與小功能的開發和完善,希望大家能支援一下 本人對知乎日報是情有獨鍾,看我的部落格和github就知道了,寫了幾個不同技術型別的知乎日報APP 要做微信小程式首先要對html,css,js有一定的基礎,還有對微信小