可以参考wangjinyu501的博客,地址:http://blog.csdn.net/wangjinyu501/article/details/8166389

效果如下:

android之模仿QQ登陆的布局实现_第1张图片

android之模仿QQ登陆的布局实现_第2张图片

[java] view plain copy
  1. packagecom.example.imitateqq;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.os.Handler;
  6. publicclassSplashActivityextendsActivity{
  7. privateIntentintent;
  8. @Override
  9. protectedvoidonCreate(BundlesavedInstanceState){
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.splash);
  12. startMainAvtivity();
  13. }
  14. privatevoidstartMainAvtivity(){
  15. newHandler().postDelayed(newRunnable(){
  16. publicvoidrun(){
  17. intent=newIntent(SplashActivity.this,QQ.class);
  18. startActivity(intent);
  19. SplashActivity.this.finish();//结束本Activity
  20. }
  21. },1000);//设置执行时间
  22. }
  23. }
xml布局文件就是一个全屏的图片,要注意的是设置 android:scaleType="matrix"这个属性。不然不会全屏 [html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <ImageView
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. android:scaleType="matrix"
  10. android:src="@drawable/splash"/>
  11. </LinearLayout>
过1秒之后转入登陆页面,从图片我们可以看出,腾讯的UI做的还是相当美观漂亮的,既简洁又不失美观。先分析一下这个登录界面,从整体可以看出,根布局的背景色是蓝色的,而那个QQ 2012 Android其实是一个图片背景色和根布局的背景色一样,这样就不会有视觉偏差。下面就是两个文本框EditText了,注意这里和官方给的不一样,因为后面有一个小箭头,当点击这个箭头时,会在第一个文本框的下面显示已经输入的qq号码,在qq号码的后面还有删除qq信息的按钮。这个地方需要注意一下。再往下就是登陆Button以及那连个“记住密码”和“注册新账号”比较简单,注意位置的安排即可。最后就是最下面的“更多登陆选项”,当点击的时候会向上弹出一些内容,其实就是一个隐藏的布局,当点击上面的时候,使下面隐藏的布局显示。当然也可以使用滑动抽屉来做,但是相对来说比较麻烦。下面看一下xml代码,相信大家就会一路了然。 [html] view plain copy
  1. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="@drawable/login_bg">
  6. <ImageView
  7. android:id="@+id/loginbutton"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_centerHorizontal="true"
  11. android:layout_marginTop="50dp"
  12. android:src="@drawable/login_pic"/>
  13. <LinearLayout
  14. android:id="@+id/input"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:layout_below="@id/loginbutton"
  18. android:layout_marginLeft="28.0dip"
  19. android:layout_marginRight="28.0dip"
  20. android:background="@drawable/login_input"
  21. android:orientation="vertical">
  22. <LinearLayout
  23. android:layout_width="fill_parent"
  24. android:layout_height="44.0dip"
  25. android:background="@drawable/login_input"
  26. android:gravity="center_vertical"
  27. android:orientation="horizontal">
  28. <EditText
  29. android:id="@+id/searchEditText"
  30. android:layout_width="0dp"
  31. android:layout_height="fill_parent"
  32. android:layout_weight="1"
  33. android:background="@null"
  34. android:ems="10"
  35. android:imeOptions="actionDone"
  36. android:singleLine="true"
  37. android:textSize="16sp">
  38. <requestFocus/>
  39. </EditText>
  40. <Button
  41. android:id="@+id/button_clear"
  42. android:layout_width="20dip"
  43. android:layout_height="20dip"
  44. android:layout_marginRight="8dip"
  45. android:background="@drawable/login_input_arrow"
  46. android:visibility="visible"/>
  47. </LinearLayout>
  48. <View
  49. android:layout_width="fill_parent"
  50. android:layout_height="1.0px"
  51. android:layout_marginLeft="1.0px"
  52. android:layout_marginRight="1.0px"
  53. android:background="#ffc0c3c4"/>
  54. <EditText
  55. android:id="@+id/password"
  56. android:layout_width="fill_parent"
  57. android:layout_height="44.0dip"
  58. android:background="#00ffffff"
  59. android:gravity="center_vertical"
  60. android:inputType="textPassword"
  61. android:maxLength="16"
  62. android:maxLines="1"
  63. android:textColor="#ff1d1d1d"
  64. android:textColorHint="#ff666666"
  65. android:textSize="16.0sp"/>
  66. </LinearLayout>
  67. <Button
  68. android:id="@+id/buton1"
  69. android:layout_width="270dp"
  70. android:background="@drawable/chat_send_button_bg"
  71. android:paddingTop="5.0dip"
  72. android:layout_height="50dp"
  73. android:layout_marginLeft="28.0dip"
  74. android:layout_marginRight="28.0dip"
  75. android:layout_marginTop="12.0dip"
  76. android:layout_below="@+id/input"
  77. android:gravity="center"
  78. android:textSize="20dp"
  79. android:text="登录"/>
  80. <RelativeLayout
  81. android:id="@+id/relative"
  82. android:layout_width="fill_parent"
  83. android:layout_height="wrap_content"
  84. android:layout_alignLeft="@+id/input"
  85. android:layout_alignRight="@+id/input"
  86. android:layout_below="@id/buton1">
  87. <CheckBox
  88. android:id="@+id/auto_save_password"
  89. android:layout_width="wrap_content"
  90. android:layout_height="wrap_content"
  91. android:layout_alignParentLeft="true"
  92. android:background="@null"
  93. android:button="@null"
  94. android:checked="true"
  95. android:drawableLeft="@drawable/checkbox_bg1"
  96. android:drawablePadding="4.0dip"
  97. android:text="记住密码"
  98. android:textColor="#ffffffff"
  99. android:textSize="12.0sp"/>
  100. <Button
  101. android:id="@+id/regist"
  102. android:layout_width="wrap_content"
  103. android:layout_height="wrap_content"
  104. android:layout_alignParentRight="true"
  105. android:background="@drawable/login_reg_normal"
  106. android:clickable="true"
  107. android:gravity="left|center"
  108. android:paddingLeft="8.0dip"
  109. android:paddingRight="18.0dip"
  110. android:text="注册新账号"
  111. android:textColor="#ffffffff"
  112. android:textSize="12.0sp"/>
  113. </RelativeLayout>
  114. <LinearLayout
  115. android:id="@+id/more_bottom"
  116. android:layout_width="fill_parent"
  117. android:layout_height="wrap_content"
  118. android:layout_alignParentBottom="true"
  119. android:background="@drawable/login_moremenu_back"
  120. android:orientation="vertical">
  121. <RelativeLayout
  122. android:id="@+id/input2"
  123. android:layout_width="fill_parent"
  124. android:layout_height="40dp"
  125. android:background="@drawable/login_moremenu_back"
  126. android:orientation="vertical">
  127. <ImageView
  128. android:id="@+id/more_image"
  129. android:layout_width="wrap_content"
  130. android:layout_height="wrap_content"
  131. android:layout_centerVertical="true"
  132. android:layout_marginRight="5.0dip"
  133. android:layout_toLeftOf="@+id/more_text"
  134. android:clickable="false"
  135. android:src="@drawable/login_more_up"/>
  136. <TextView
  137. android:id="@+id/more_text"
  138. android:layout_width="wrap_content"
  139. android:layout_height="wrap_content"
  140. android:layout_centerInParent="true"
  141. android:background="@null"
  142. android:gravity="center"
  143. android:maxLines="1"
  144. android:text="更多登陆选项"
  145. android:textColor="#ffc6e6f9"
  146. android:textSize="14.0sp"/>
  147. </RelativeLayout>
  148. <LinearLayout
  149. android:id="@+id/morehidebottom"
  150. android:layout_width="fill_parent"
  151. android:layout_height="wrap_content"
  152. android:orientation="vertical"
  153. android:visibility="gone">
  154. <View
  155. android:layout_width="fill_parent"
  156. android:layout_height="1.0px"
  157. android:background="#ff005484"/>
  158. <View
  159. android:layout_width="fill_parent"
  160. android:layout_height="1.0px"
  161. android:background="#ff0883cb"/>
  162. <LinearLayout
  163. android:layout_width="fill_parent"
  164. android:layout_height="wrap_content"
  165. android:layout_marginLeft="30.0dip"
  166. android:layout_marginRight="30.0dip"
  167. android:layout_marginTop="12.0dip"
  168. android:orientation="horizontal">
  169. <CheckBox
  170. android:id="@+id/hide_login"
  171. android:layout_width="1.0px"
  172. android:layout_height="wrap_content"
  173. android:layout_weight="2.0"
  174. android:background="@null"
  175. android:button="@null"
  176. android:checked="false"
  177. android:drawableLeft="@drawable/checkbox_bg1"
  178. android:drawablePadding="4.0dip"
  179. android:text="隐身登陆"
  180. android:textColor="#ffc6e6f9"
  181. android:textSize="12.0sp"/>
  182. <CheckBox
  183. android:id="@+id/silence_login"
  184. android:layout_width="1.0px"
  185. android:layout_height="wrap_content"
  186. android:layout_weight="1.0"
  187. android:background="@null"
  188. android:button="@null"
  189. android:checked="false"
  190. android:drawableLeft="@drawable/checkbox_bg1"
  191. android:drawablePadding="4.0dip"
  192. android:text="静音登录"
  193. android:textColor="#ffc6e6f9"
  194. android:textSize="12.0sp"/>
  195. </LinearLayout>
  196. <LinearLayout
  197. android:layout_width="fill_parent"
  198. android:layout_height="wrap_content"
  199. android:layout_marginBottom="18.0dip"
  200. android:layout_marginLeft="30.0dip"
  201. android:layout_marginRight="30.0dip"
  202. android:layout_marginTop="18.0dip"
  203. android:orientation="horizontal">
  204. <CheckBox
  205. android:id="@+id/accept_accounts"
  206. android:layout_width="1.0px"
  207. android:layout_height="wrap_content"
  208. android:layout_weight="2.0"
  209. android:background="@null"
  210. android:button="@null"
  211. android:checked="true"
  212. android:drawableLeft="@drawable/checkbox_bg1"
  213. android:drawablePadding="4.0dip"
  214. android:singleLine="true"
  215. android:text="允许手机/电脑同时在心线"
  216. android:textColor="#ffc6e6f9"
  217. android:textSize="12.0sp"/>
  218. <CheckBox
  219. android:id="@+id/accept_troopmsg"
  220. android:layout_width="1.0px"
  221. android:layout_height="wrap_content"
  222. android:layout_weight="1.0"
  223. android:background="@null"
  224. android:button="@null"
  225. android:checked="true"
  226. android:drawableLeft="@drawable/checkbox_bg1"
  227. android:drawablePadding="4.0dip"
  228. android:text="接受群消息"
  229. android:textColor="#ffc6e6f9"
  230. android:textSize="12.0sp"/>
  231. </LinearLayout>
  232. </LinearLayout>
  233. </LinearLayout>
  234. </RelativeLayout>
各个组件的使用没有问题,关键是如何设置他们的属性,来获得一个比较美观的效果,大家可以参考这个例子,来做一下练习,来强化UI的设计。从这个例子中就可以学到很多东西,比如ViwGroup的使用(如何枪套), background的设置,例如同时使用两个Edittext,设置 android:background = "@null"设置为空的时候就不会产生间隔了。这个要自己多做设计,时间长了就会有感悟了。最后看一下MainActivity的代码,布局简单 [java] view plain copy
  1. packagecom.example.imitateqq;
  2. importandroid.os.Bundle;
  3. importandroid.app.Activity;
  4. importandroid.app.Dialog;
  5. importandroid.view.Menu;
  6. importandroid.view.View;
  7. importandroid.view.View.OnClickListener;
  8. importandroid.widget.Button;
  9. importandroid.widget.ImageView;
  10. publicclassQQextendsActivityimplementsOnClickListener{
  11. privateButtonlogin_Button;
  12. privateViewmoreHideBottomView,input2;
  13. privateImageViewmore_imageView;
  14. privatebooleanmShowBottom=false;
  15. @Override
  16. publicvoidonCreate(BundlesavedInstanceState){
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_qq);
  19. initView();
  20. }
  21. privatevoidinitView(){
  22. login_Button=(Button)findViewById(R.id.buton1);
  23. login_Button.setOnClickListener(this);
  24. moreHideBottomView=findViewById(R.id.morehidebottom);
  25. more_imageView=(ImageView)findViewById(R.id.more_image);
  26. input2=findViewById(R.id.input2);
  27. input2.setOnClickListener(this);
  28. }
  29. publicvoidshowBottom(booleanbShow){
  30. if(bShow){
  31. moreHideBottomView.setVisibility(View.GONE);
  32. more_imageView.setImageResource(R.drawable.login_more_up);
  33. mShowBottom=true;
  34. }else{
  35. moreHideBottomView.setVisibility(View.VISIBLE);
  36. more_imageView.setImageResource(R.drawable.login_more);
  37. mShowBottom=false;
  38. }
  39. }
  40. publicvoidonClick(Viewv){
  41. switch(v.getId())
  42. {
  43. caseR.id.input2:
  44. showBottom(!mShowBottom);
  45. break;
  46. caseR.id.buton1:
  47. showRequestDialog();
  48. break;
  49. default:
  50. break;
  51. }
  52. }
  53. privateDialogmDialog=null;
  54. privatevoidshowRequestDialog()
  55. {
  56. if(mDialog!=null)
  57. {
  58. mDialog.dismiss();
  59. mDialog=null;
  60. }
  61. mDialog=DialogFactory.creatRequestDialog(this,"正在验证账号...");
  62. mDialog.show();
  63. }
  64. @Override
  65. publicbooleanonCreateOptionsMenu(Menumenu){
  66. getMenuInflater().inflate(R.menu.activity_qq,menu);
  67. returntrue;
  68. }
  69. }
总结:本文可以作为一个UI练习Demo,大家可以自己独立去写,有问题的可以留下邮箱我给你发一下源码作为参考。下一篇将写主页面的实现,欢迎大家关注。 代码下载地址: http://download.csdn.net/detail/wangjinyu501/5875407

更多相关文章

  1. Android实现图片的倒影效果分析
  2. android中获取一个xml布局中一个控件的宽高.
  3. android 加载图片轻松避免OOM(out of memory) 支持设置缓存大小,
  4. 下载显示网路图片的例子
  5. android 处理图片之--bitmap处理

随机推荐

  1. Android(安卓)中把Activity当作Dialog来
  2. How Android(安卓)Handles Touches
  3. Android:ThreadLearning1
  4. Android(安卓)CrashManager
  5. Android(安卓)Multi-Core Enable/Disable
  6. Android(安卓)Security Overview
  7. ContentProvider示例-Calendar Provider
  8. Android-GeoQuiz
  9. 摇一摇监听器
  10. android Handler消息处理源码剖析