Android QQ登录界面绘制代码

先看看效果图:

首先过程中碰到的几个问题:

1、对 EditText 进行自定义背景

2、运行时自动 EditText 自动获得焦点

3、在获得焦点时即清空 hint ,而不是输入后清空

4、清空按钮的出现时机(在得到焦点并且有输入内容时)

---  这些问题都有一一解决 ---

以下是代码:

布局 fragment_main(问题2)

<!-- android:focusable="true"
   android:focusableInTouchMode="true"
   把EditText默认的行为截断了! -->
<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="#ECEDF1"
  android:focusable="true"
  android:focusableInTouchMode="true"
  tools:context="com.dragon.android.qqlogin.MainActivity$PlaceholderFragment" >

  <ImageView
    android:id="@+id/imageView1"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="40dp"
    android:src="@drawable/a" />   

  <EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/imageView1"
    android:ems="10"
    android:background="@drawable/bg_edittext"
    android:inputType="textPersonName"
    android:gravity="center"
    android:textColor="#6A6A6C"
    android:hint="@string/inaccount"
    android:textColorHint="#ECEDDD">
  </EditText>

  <EditText
    android:id="@+id/editText2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/editText1"
    android:ems="10"
    android:background="@drawable/bg_edittext"
    android:inputType="textPassword"
    android:gravity="center"
    android:textColor="#6A6A6C"
    android:hint="@string/inpwd"
    android:textColorHint="#ECEDDD" >
  </EditText>

  <Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_below="@id/editText2"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="10dp"
    android:background="@drawable/bg_button"
    android:text="@string/button"
    android:gravity="center"
    android:textColor="#F9FAFB" />

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:padding="10dp" >

    <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:text="@string/faillogin"
      android:textColor="#0EB1EF" />

    <TextView
      android:id="@+id/textView3"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="right"
      android:text="@string/regist"
      android:textColor="#0EB1EF" />
  </LinearLayout>

  <Button
    android:id="@+id/button2"
    android:layout_width="16dp"
    android:layout_height="16dp"
    android:layout_alignTop="@id/editText1"
    android:layout_marginTop="15dp"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp"
    android:background="@drawable/clear"
    android:visibility="invisible" />

  <Button
    android:id="@+id/button3"
    android:layout_width="16dp"
    android:layout_height="16dp"
    android:layout_alignTop="@id/editText2"
    android:layout_marginTop="15dp"
    android:layout_alignLeft="@+id/button2"
    android:background="@drawable/clear"
    android:visibility="invisible" />

</RelativeLayout>

Button 和 EditText 的背景(问题1)

1.bg_button

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

  <stroke android:width="1px" android:color="#00ACED" />

  <solid android:color="#00ACED" />

  <corners android:radius="10dp" />

</shape>

2.bg_edittext

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

  <stroke android:width="1px" android:color="#ECEDF1" />

  <solid android:color="#F9FAFB" />

  <corners android:radius="10dp" />

  <padding
    android:top="10dp"
    android:bottom="10dp"/>

</shape>

3.strings

<?xml version="1.0" encoding="utf-8"?>
<resources>

  <string name="app_name">qqloginnew</string>
  <string name="action_settings">Settings</string>
  <string name="button">登录</string>
  <string name="faillogin">无法登录?</string>
  <string name="regist">新用户注册</string>
  <string name="inaccount">QQ号/手机号/邮箱</string>
  <string name="inpwd">密码</string>
  <string name="sucess">登录成功</string>

</resources>

MainActivity (问题3、4.....)

package com.dragon.android.qqloginnew;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
  private EditText editText1;
  private EditText editText2;
  // private Button button;
  private Button clearButton1;
  private Button clearButton2;

  // 得到strings中的属性
  // private String string2 = getResources().getString(R.string.inaccount);

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);

    editText1 = (EditText) findViewById(R.id.editText1);
    editText2 = (EditText) findViewById(R.id.editText2);

    // button = (Button) findViewById(R.id.button1);
    clearButton1 = (Button) findViewById(R.id.button2);
    clearButton2 = (Button) findViewById(R.id.button3);

    // 对EditText进行焦点变更监听
    editText1.setOnFocusChangeListener(new EditTextListener(clearButton1));
    editText2.setOnFocusChangeListener(new EditTextListener(clearButton2));

    // 对清空按钮进行点击监听
    clearButton1.setOnClickListener(new ClearButtonListener());
    clearButton2.setOnClickListener(new ClearButtonListener());

    // 对EditText进行编辑监听
    editText1.addTextChangedListener(new MyEditTextWatcher(editText1));
    editText2.addTextChangedListener(new MyEditTextWatcher(editText2));
  }

  /**
   * 对EditText的内容进行实时监控
   *
   * @author Auser
   *
   */
  class MyEditTextWatcher implements TextWatcher {
    private CharSequence temp;
    private EditText editText;

    public MyEditTextWatcher(EditText editText) {
      this.editText = editText;
    }

    @Override
    // int start开始的位置, int count被改变的旧内容数, int after改变后的内容数量
    public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
      // 这里的s表示改变之前的内容,通常start和count组合,可以在s中读取本次改变字段中被改变的内容。而after表示改变后新的内容的数量。
    }

    @Override
    // int start开始的位置, int before改变前的内容数量, int count新增量
    public void onTextChanged(CharSequence s, int start, int before,
        int count) {
      // 这里的s表示改变之后的内容,通常start和count组合,可以在s中读取本次改变字段中新的内容。而before表示被改变的内容的数量。
      temp = s;
    }

    @Override
    // 表示最终内容
    public void afterTextChanged(Editable s) {
      if (temp.length() > 0) {
        // 设置清空按钮为可见
        if (editText == editText1) {
          clearButton1.setVisibility(View.VISIBLE);
        } else if (editText == editText2) {
          clearButton2.setVisibility(View.VISIBLE);
        }
      } else {
        // 设置清空按钮不可见
        if (editText == editText1) {
          clearButton1.setVisibility(View.INVISIBLE);
        } else if (editText == editText2) {
          clearButton2.setVisibility(View.INVISIBLE);
        }
      }
    }
  }

  /**
   * 清空按钮点击事件
   *
   * @author
   *
   */
  class ClearButtonListener implements OnClickListener {

    @Override
    public void onClick(View view) {
      if (view == clearButton1) {
        editText1.setText("");
      } else if (view == clearButton2) {
        editText2.setText("");
      }
    }
  }

  /**
   * 焦点变更事件
   *
   * @author Auser
   *
   */
  class EditTextListener implements OnFocusChangeListener {
    private Button clear;

    public EditTextListener(Button clear) {
      this.clear = clear;
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
      EditText textView = (EditText) v;
      String hint;
      if (hasFocus) {
        // 当获取焦点时如果内容不为空则清空按钮可见
        if (!textView.getText().toString().equals("")) {
          clear.setVisibility(View.VISIBLE);
        }
        // if (textView == editText2) {
        // // 设置输入格式为不可见的密码格式
        // textView.setInputType(InputType.TYPE_CLASS_TEXT
        // | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        // }
        hint = textView.getHint().toString();
        // 给TextView添加额外的数据
        textView.setTag(hint);
        textView.setHint("");
      } else {
        // 当失去焦点时清空按钮不可见
        clear.setVisibility(View.INVISIBLE);
        // if (textView == editText2) {
        // // 设置输入格式为可见的密码格式
        // textView.setInputType(InputType.TYPE_CLASS_TEXT
        // | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
        // }
        // 取出之前添加的额外数据
        hint = textView.getTag().toString();
        textView.setHint(hint);
      }
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android开发中使用achartengine绘制各种图表的方法

    本文实例讲述了Android开发中使用achartengine绘制各种图表的方法.分享给大家供大家参考,具体如下: 1. ABarChart.java package com.anjoyo.achartengine; import java.util.Random; import org.achartengine.ChartFactory; import org.achartengine.chart.BarChart.Type; import org.achartengine.model.Cat

  • Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二.编写MyApplication类 public class MyApplication extends Application { private static MyApplication mInstance = null; public boolean m_bKeyRight = true; pu

  • 解决Android SurfaceView绘制触摸轨迹闪烁问题的方法

    本文分享了解决SurfaceView触摸轨迹闪烁问题的方法,供大家参考,具体内容如下 第一种解决SurfaceView触摸轨迹闪烁问题的方法: 由于SurfaceView使用双缓存机制,两张画布轮流显示到屏幕上.那么,要存储触摸轨迹并避免两张画布内容不一致造成的闪烁问题,完全可以利用保存绘制过程并不断重新绘制的方法解决闪烁,而且这样还顺带解决了多次试验中偶尔出现的因为moveTo()函数不能读取到参数执行默认设置(参数设为上次的触摸点)而出现的断线连接闪烁问题,详细代码如下: package c

  • Android开发笔记之:在ImageView上绘制圆环的实现方法

    绘制圆环其实很简单,有大概以下三种思路. 这里先说网上提到的一种方法.思路是先绘制内圆,然后绘制圆环(圆环的宽度就是paint设置的paint.setStrokeWidth的宽度),最后绘制外圆.请看核心源码: 复制代码 代码如下: <SPAN xmlns="http://www.w3.org/1999/xhtml">package yan.guoqi.rectphoto;import android.content.Context;import android.graph

  • Android listView 绘制表格实例详解

    Android  listView 绘制表格 效果图: 二,创建步骤: 1,创建布局: activity_main中的布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:

  • Android编程绘制圆形图片的方法

    本文实例讲述了Android编程绘制圆形图片的方法.分享给大家供大家参考,具体如下: 效果图如下: 第一步:新建RoundView自定义控件继承View package com.rong.activity; import com.rong.test.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.grap

  • Android中使用ListView绘制自定义表格技巧分享

    先上一下可以实现的效果图  要实现的效果有几方面 1.列不固定:可以根据数据源的不同生成不同的列数 2.表格内容可以根据数据源的定义合并列 3.要填写的单元格可以选择自定义键盘还是系统键盘 奔着这三点,做了个简单的实现,把源码贴一下(因为该点是主界面中的一部分,不便于放整个Demo) 自定义适配器,CallBackInterface是自定义的回调接口,这里定义回调是因为数据输入时需要及时保存 复制代码 代码如下: public class SiteDetailViewAdapter extend

  • Android自定义View之继承TextView绘制背景

    本文实例为大家分享了TextView绘制背景的方法,供大家参考,具体内容如下 效果: 实现流程: 1.初始化:对画笔进行设置 mPaintIn = new Paint(); mPaintIn.setAntiAlias(true); mPaintIn.setDither(true); mPaintIn.setStyle(Paint.Style.FILL); mPaintIn.setColor(getResources().getColor(R.color.colorPrimary)); mPain

  • Android编程开发之在Canvas中利用Path绘制基本图形(圆形,矩形,椭圆,三角形等)

    本文实例讲述了Android编程开发之在Canvas中利用Path绘制基本图形的方法.分享给大家供大家参考,具体如下: 在Android中绘制基本的集合图形,本程序就是自定义一个View组件,程序重写该View组件的onDraw(Canvase)方法,然后在该Canvas上绘制大量的基本的集合图形. 直接上代码: 1.自定义的View组件代码: package com.infy.configuration; import android.content.Context; import andro

  • Android开发 OpenGL ES绘制3D 图形实例详解

    OpenGL ES是 OpenGL三维图形API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计. Ophone目前支持OpenGL ES 1.0 ,OpenGL ES 1.0 是以 OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础的.本文主要介绍利用OpenGL ES绘制图形方面的基本步骤. 本文内容由三部分构成.首先通过EGL获得OpenGL ES的编程接口;其次介绍构建3D程序的基本概念;最后是一个应用程序示例. OpenGL E

  • Android中使用achartengine生成图表的具体方法

    今天在做项目的时候用到了图表功能,记录下来 achartengine是google的一个开源项目,可以在https://code.google.com/p/achartengine/ 下载技术文档,jar包以及项目源代码 demo下载:https://code.google.com/p/achartengine/downloads/list 一.饼状图 新建工程,添加achartengine  jar包 PieChart.java 复制代码 代码如下: package com.meritit.f

随机推荐