亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android仿QQ登陸窗口實現原理

2020-04-11 12:36:59
字體:
來源:轉載
供稿:網友

今天根據騰訊qq,我們做一個練習,來學習如何制作一個漂亮的布局。首先看一下官方圖片

還是一個啟動畫面,之后進入登錄頁面,導航頁面就不介紹了,大家可以參考微信的導航頁面。首先程序進入SplashActivity,就是啟動頁面,Activity代碼如下:

復制代碼 代碼如下:

package com.example.imitateqq;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class SplashActivity extends Activity {

private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
startMainAvtivity();
}

private void startMainAvtivity() {
new Handler().postDelayed(new Runnable() {
public void run() {
intent=new Intent(SplashActivity.this,QQ.class);
startActivity(intent);
SplashActivity.this.finish();//結束本Activity
}
}, 1000);//設置執行時間
}
}

xml布局文件就是一個全屏的圖片,要注意的是設置android:scaleType ="matrix"這個屬性。不然不會全屏
復制代碼 代碼如下:

<? xml version= "1.0" encoding = "utf-8"?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:orientation= "vertical" >
< ImageView
android:layout_width ="match_parent"
android:layout_height ="match_parent"
android:scaleType ="matrix"
android:src ="@drawable/splash" />
</ LinearLayout>

過1秒之后轉入登陸頁面,從圖片我們可以看出,騰訊的UI做的還是相當美觀漂亮的,既簡潔又不失美觀。先分析一下這個登錄界面,從整體可以看出,根布局的背景色是藍色的,而那個QQ 2012 Android其實是一個圖片背景色和根布局的背景色一樣,這樣就不會有視覺偏差。下面就是兩個文本框EditText了,注意這里和官方給的不一樣,因為后面有一個小箭頭,當點擊這個箭頭時,會在第一個文本框的下面顯示已經輸入的qq號碼,在qq號碼的后面還有刪除qq信息的按鈕。這個地方需要注意一下。再往下就是登陸Button以及那連個“記住密碼”和“注冊新賬號”比較簡單,注意位置的安排即可。最后就是最下面的“更多登陸選項”,當點擊的時候會向上彈出一些內容,其實就是一個隱藏的布局,當點擊上面的時候,使下面隱藏的布局顯示。當然也可以使用滑動抽屜來做,但是相對來說比較麻煩。下面看一下xml代碼,相信大家就會一路了然。
復制代碼 代碼如下:

< RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android"
xmlns:tools= "http://schemas.android.com/tools"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:background= "@drawable/login_bg" >

< ImageView
android:id ="@+id/loginbutton"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_centerHorizontal ="true"
android:layout_marginTop ="50dp"
android:src ="@drawable/login_pic" />

<LinearLayout
android:id ="@+id/input"
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:layout_below ="@id/loginbutton"
android:layout_marginLeft ="28.0dip"
android:layout_marginRight ="28.0dip"
android:background ="@drawable/login_input"
android:orientation ="vertical" >

< LinearLayout
android:layout_width ="fill_parent"
android:layout_height ="44.0dip"
android:background ="@drawable/login_input"
android:gravity ="center_vertical"
android:orientation ="horizontal" >

< EditText
android:id ="@+id/searchEditText"
android:layout_width ="0dp"
android:layout_height ="fill_parent"
android:layout_weight ="1"
android:background ="@null"
android:ems ="10"
android:imeOptions ="actionDone"
android:singleLine ="true"
android:textSize ="16sp" >

< requestFocus />
</ EditText>

< Button
android:id ="@+id/button_clear"
android:layout_width ="20dip"
android:layout_height ="20dip"
android:layout_marginRight ="8dip"
android:background ="@drawable/login_input_arrow"
android:visibility ="visible" />
</ LinearLayout>

< View
android:layout_width ="fill_parent"
android:layout_height ="1.0px"
android:layout_marginLeft ="1.0px"
android:layout_marginRight ="1.0px"
android:background ="#ffc0c3c4" />

< EditText
android:id ="@+id/password"
android:layout_width ="fill_parent"
android:layout_height ="44.0dip"
android:background ="#00ffffff"
android:gravity ="center_vertical"
android:inputType ="textPassword"
android:maxLength ="16"
android:maxLines ="1"
android:textColor ="#ff1d1d1d"
android:textColorHint ="#ff666666"
android:textSize ="16.0sp" />
</LinearLayout >

<Button
android:id ="@+id/buton1"
android:layout_width ="270dp"
android:background ="@drawable/chat_send_button_bg"
android:paddingTop ="5.0dip"
android:layout_height ="50dp"
android:layout_marginLeft ="28.0dip"
android:layout_marginRight ="28.0dip"
android:layout_marginTop ="12.0dip"
android:layout_below ="@+id/input"
android:gravity ="center"
android:textSize ="20dp"
android:text = "登錄" />

<RelativeLayout
android:id ="@+id/relative"
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:layout_alignLeft ="@+id/input"
android:layout_alignRight ="@+id/input"
android:layout_below ="@id/buton1" >

< CheckBox
android:id ="@+id/auto_save_password"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_alignParentLeft ="true"
android:background ="@null"
android:button ="@null"
android:checked ="true"
android:drawableLeft ="@drawable/checkbox_bg1"
android:drawablePadding ="4.0dip"
android:text = "記住密碼"
android:textColor ="#ffffffff"
android:textSize ="12.0sp" />

< Button
android:id ="@+id/regist"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_alignParentRight ="true"
android:background ="@drawable/login_reg_normal"
android:clickable ="true"
android:gravity ="left|center"
android:paddingLeft ="8.0dip"
android:paddingRight ="18.0dip"
android:text = "注冊新賬號"
android:textColor ="#ffffffff"
android:textSize ="12.0sp" />
</RelativeLayout >

<LinearLayout
android:id ="@+id/more_bottom"
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:layout_alignParentBottom ="true"
android:background ="@drawable/login_moremenu_back"
android:orientation ="vertical" >

<RelativeLayout
android:id ="@+id/input2"
android:layout_width ="fill_parent"
android:layout_height ="40dp"
android:background ="@drawable/login_moremenu_back"
android:orientation ="vertical" >

< ImageView
android:id ="@+id/more_image"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_centerVertical ="true"
android:layout_marginRight ="5.0dip"
android:layout_toLeftOf ="@+id/more_text"
android:clickable ="false"
android:src ="@drawable/login_more_up" />

< TextView
android:id ="@+id/more_text"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:layout_centerInParent ="true"
android:background ="@null"
android:gravity ="center"
android:maxLines ="1"
android:text = "更多登陸選項"
android:textColor ="#ffc6e6f9"
android:textSize ="14.0sp" />
</RelativeLayout >
<LinearLayout
android:id ="@+id/morehidebottom"
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:orientation ="vertical"
android:visibility ="gone" >

< View
android:layout_width ="fill_parent"
android:layout_height ="1.0px"
android:background ="#ff005484" />

< View
android:layout_width ="fill_parent"
android:layout_height ="1.0px"
android:background ="#ff0883cb" />

< LinearLayout
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:layout_marginLeft ="30.0dip"
android:layout_marginRight ="30.0dip"
android:layout_marginTop ="12.0dip"
android:orientation ="horizontal" >

< CheckBox
android:id ="@+id/hide_login"
android:layout_width ="1.0px"
android:layout_height ="wrap_content"
android:layout_weight ="2.0"
android:background ="@null"
android:button ="@null"
android:checked ="false"
android:drawableLeft ="@drawable/checkbox_bg1"
android:drawablePadding ="4.0dip"
android:text = "隱身登陸"
android:textColor ="#ffc6e6f9"
android:textSize ="12.0sp" />

< CheckBox
android:id ="@+id/silence_login"
android:layout_width ="1.0px"
android:layout_height ="wrap_content"
android:layout_weight ="1.0"
android:background ="@null"
android:button ="@null"
android:checked ="false"
android:drawableLeft ="@drawable/checkbox_bg1"
android:drawablePadding ="4.0dip"
android:text = "靜音登錄"
android:textColor ="#ffc6e6f9"
android:textSize ="12.0sp" />
</ LinearLayout>

< LinearLayout
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:layout_marginBottom ="18.0dip"
android:layout_marginLeft ="30.0dip"
android:layout_marginRight ="30.0dip"
android:layout_marginTop ="18.0dip"
android:orientation ="horizontal" >

< CheckBox
android:id ="@+id/accept_accounts"
android:layout_width ="1.0px"
android:layout_height ="wrap_content"
android:layout_weight ="2.0"
android:background ="@null"
android:button ="@null"
android:checked ="true"
android:drawableLeft ="@drawable/checkbox_bg1"
android:drawablePadding ="4.0dip"
android:singleLine ="true"
android:text = "允許手機/電腦同時在心線"
android:textColor ="#ffc6e6f9"
android:textSize ="12.0sp" />

< CheckBox
android:id ="@+id/accept_troopmsg"
android:layout_width ="1.0px"
android:layout_height ="wrap_content"
android:layout_weight ="1.0"
android:background ="@null"
android:button ="@null"
android:checked ="true"
android:drawableLeft ="@drawable/checkbox_bg1"
android:drawablePadding ="4.0dip"
android:text = "接受群消息"
android:textColor ="#ffc6e6f9"
android:textSize ="12.0sp" />
</ LinearLayout>
</ LinearLayout>

</LinearLayout >

</ RelativeLayout>

各個組件的使用沒有問題,關鍵是如何設置他們的屬性,來獲得一個比較美觀的效果,大家可以參考這個例子,來做一下練習,來強化UI的設計。從這個例子中就可以學到很多東西,比如ViwGroup的使用(如何槍套),background的設置,例如同時使用兩個Edittext,設置android:background ="@null"設置為空的時候就不會產生間隔了。這個要自己多做設計,時間長了就會有感悟了。最后看一下MainActivity的代碼,布局簡單

復制代碼 代碼如下:

package com.example.imitateqq;

import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class QQ extends Activity implements OnClickListener{

private Button login_Button;
private View moreHideBottomView,input2;
private ImageView more_imageView;
private boolean mShowBottom = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qq);
initView();
}

private void initView() {
login_Button=(Button) findViewById(R.id.buton1);
login_Button.setOnClickListener(this);

moreHideBottomView=findViewById(R.id.morehidebottom);
more_imageView=(ImageView) findViewById(R.id.more_image);

input2=findViewById(R.id.input2);
input2.setOnClickListener( this);
}

public void showBottom(boolean bShow){
if(bShow){
moreHideBottomView.setVisibility(View.GONE);
more_imageView.setImageResource(R.drawable.login_more_up);
mShowBottom = true;
}else{
moreHideBottomView.setVisibility(View.VISIBLE);
more_imageView.setImageResource(R.drawable.login_more);
mShowBottom = false;
}
}

public void onClick(View v) {
switch(v.getId())
{
case R.id.input2:
showBottom(!mShowBottom);
break;
case R.id.buton1:
showRequestDialog();
break;
default:
break;
}
}

private Dialog mDialog = null;
private void showRequestDialog()
{
if (mDialog != null)
{
mDialog.dismiss();
mDialog = null;
}
mDialog = DialogFactory.creatRequestDialog(this, "正在驗證賬號...");
mDialog.show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_qq, menu);
return true;
}
}

最后效果如下:


總結:本文可以作為一個UI練習Demo,大家可以自己獨立去寫,有問題的可以留下郵箱我給你發一下源碼作為參考。下一篇將寫主頁面的實現,歡迎大家關注。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人一区二区在线| 国产情人节一区| 欧美xxxx做受欧美.88| 一个人看的www久久| 成人黄色在线播放| 欧美性69xxxx肥| 亚洲一区二区三区xxx视频| 久久久久国产精品免费网站| 久久国产精品久久久久久| 91在线观看免费高清| 欧美激情第1页| 国产精品视频久久久久| 中文字幕日韩精品有码视频| 亚洲欧洲免费视频| 日韩在线激情视频| 久久久久久久色| 日韩在线视频播放| 午夜精品一区二区三区av| 日韩中文字幕精品| 日韩精品欧美国产精品忘忧草| 日韩欧美主播在线| 一本色道久久88综合日韩精品| 姬川优奈aav一区二区| 一区三区二区视频| 欧美成人午夜剧场免费观看| 亚洲国产91精品在线观看| 午夜精品三级视频福利| 日韩电影在线观看永久视频免费网站| 欧美第一黄色网| 国产精品视频免费在线| 久久久久久久电影一区| 久久99精品久久久久久噜噜| 欧美视频13p| 亚洲精品97久久| 国产精品91视频| 久久琪琪电影院| 色诱女教师一区二区三区| 日韩av网站大全| 韩国精品美女www爽爽爽视频| 欧美丰满片xxx777| 91精品成人久久| 亚洲成人久久久久| 欧美福利在线观看| 久久久久国产精品一区| 日本19禁啪啪免费观看www| 2018日韩中文字幕| 在线免费观看羞羞视频一区二区| 亚洲人成在线一二| 国产视频精品免费播放| 不用播放器成人网| 国产婷婷成人久久av免费高清| 欧美激情极品视频| 在线视频日韩精品| 亚洲香蕉在线观看| 九色91av视频| 亚洲国产成人精品久久久国产成人一区| 懂色av影视一区二区三区| 黑人与娇小精品av专区| 精品日韩视频在线观看| 精品亚洲男同gayvideo网站| 九色91av视频| 中文字幕亚洲欧美在线| 亚洲欧美一区二区三区在线| 欧美亚洲视频一区二区| 成人中心免费视频| 亚洲精品成人久久久| 久久久久久999| 国产精品一区二区久久久| 国产午夜精品视频免费不卡69堂| 日韩在线中文视频| 国产国语videosex另类| 日本高清+成人网在线观看| 国产+成+人+亚洲欧洲| 日韩毛片中文字幕| 国产精品美女免费视频| 中文字幕亚洲图片| 久久久久99精品久久久久| 俺也去精品视频在线观看| 欧美视频免费在线观看| 最新69国产成人精品视频免费| 欧美日韩亚洲国产一区| 欧美亚州一区二区三区| 美日韩精品免费观看视频| 91影视免费在线观看| 亚洲性日韩精品一区二区| 国产精品1234| 91在线免费观看网站| 国内精品模特av私拍在线观看| 日韩av在线高清| 日本久久中文字幕| 午夜免费久久久久| 国产精品一区电影| 深夜福利一区二区| 亚洲人成电影网站色www| 亚洲嫩模很污视频| 亚洲一区二区三区乱码aⅴ| 日韩欧美精品网站| 欧美一级片一区| 欧美另类交人妖| 欧美激情一级欧美精品| 国产精品久久久久久久久粉嫩av| 7777免费精品视频| 中文字幕亚洲一区| 国产香蕉一区二区三区在线视频| 欧美激情综合亚洲一二区| 亚洲精品永久免费精品| 久久免费福利视频| 亚洲欧美制服第一页| 中文字幕视频一区二区在线有码| 国产精品免费福利| 亚洲精品久久久久久久久久久久久| 91网在线免费观看| 欧美在线日韩在线| 欧美日韩午夜视频在线观看| 欧美亚洲国产成人精品| 亚洲精品动漫久久久久| 国产综合福利在线| 国产精品电影在线观看| 亚洲第一网站免费视频| 欧美性xxxx极品hd欧美风情| 欧美日韩黄色大片| 日韩高清免费在线| 日韩av电影在线免费播放| 国产免费久久av| 欧美黑人一级爽快片淫片高清| 亚洲精品国精品久久99热| 日韩中文字幕在线精品| 欧美精品videosex极品1| 欧美国产激情18| 国产亚洲一区二区在线| 欧美午夜精品久久久久久浪潮| 综合国产在线视频| 影音先锋欧美在线资源| 国产成人av网址| 九九热视频这里只有精品| 色伦专区97中文字幕| 亚洲图片欧洲图片av| 77777亚洲午夜久久多人| 午夜精品三级视频福利| 欧美丰满片xxx777| 精品国产一区二区三区久久久狼| 欧美专区第一页| 日韩在线免费av| 久久精品成人一区二区三区| 久久理论片午夜琪琪电影网| 日韩在线观看av| 亚洲欧美日韩精品久久奇米色影视| 日韩欧美一区二区三区久久| 不卡av日日日| 欧美区在线播放| 91豆花精品一区| 亚洲专区国产精品| 日韩精品极品在线观看| 久久久91精品| 国产亚洲美女精品久久久| 色婷婷亚洲mv天堂mv在影片| 国产精品视频成人| 欧美日韩亚洲成人| 色无极亚洲影院| 国产精品爱啪在线线免费观看| 国产成人综合一区二区三区| 欧美一级视频免费在线观看| 亚洲肉体裸体xxxx137| 欧美激情一区二区三级高清视频|