Android实现QQ登录界面遇到问题及解决方法_Android

先给大家炫下效果图:

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

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>
fragment_main

Button 和 EditText 的背景(问题1)

<?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>
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="#ECEDF1" />
 <solid android:color="#F9FAFB" />
 <corners android:radius="10dp" />
 <padding
  android:top="10dp"
  android:bottom="10dp"/>
</shape>
bg_edittext
<?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>
strings

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);
}
}
}
}

下篇文章给大家介绍Android实现QQ新用户注册界面遇到问题及解决方法,感兴趣的朋友可以参考下。

以上所述是小编给大家介绍的Android实现QQ登录界面遇到问题及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
QQ登录界面
java实现qq聊天界面、qt 实现qq登录界面、java实现qq登录界面、qt实现qq好友界面、wpf qq登录界面实现,以便于您获取更多的相关知识。

时间: 2024-09-27 21:16:42

Android实现QQ登录界面遇到问题及解决方法_Android的相关文章

Android实现QQ新用户注册界面遇到问题及解决方法_Android

在上篇文章给大家介绍了Android实现QQ登录界面遇到问题及解决方法,本篇文章继续给大家介绍有关android qq界面知识. 先给大家展示下效果图: 问题: 1.下拉列表(因为还没看到这里...) 2.标题栏显示问题 3.按钮的 Enable 设置 以下是代码: 布局 fragment_main(问题1) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools

Android开发中听筒无法播放音乐的解决方法_Android

本文实例讲述了Android开发中听筒无法播放音乐的解决方法.分享给大家供大家参考,具体如下: 这个问题让我蛋疼了,既然百度也木有资料. 耗时的主要原因是因为权限不足时,而没有终止程序,只用了一小行日志提醒,没有看到 用听筒播放很简单 AudioManager.setMode(AudioManager.MODE_IN_CALL) //设定为通话中即可 还是这一句代码的事,不过记得要加上权限 Android.permission.MODIFY_AUDIO_SETTINGS 不然会像我一样蛋疼半天

Android中EditText 设置 imeOptions 无效问题的解决方法_Android

有时候我们需要在EditText  输出完之后 需要在键盘出现 右下角变成"Go"或"前往 搜索时:通常我们需要设置Android:imeOptions属性.Android:imeOptions的值有actionGo. actionSend .actionSearch.actionDone等 但是今天我发现设置了无效  那是因为我设置了 android:maxLines="1" 解决方法 就是去掉 android:maxLines="1"

Android自定义照相机Camera出现黑屏的解决方法_Android

本文实例讲述了Android自定义照相机Camera出现黑屏的解决方法.分享给大家供大家参考,具体如下: 对于一些手机,像HTC,当自定义Camera时,调用Camera.Parameters的 parameters.setPreviewSize(width, height)方法时,如果width和height为奇数情况下,则会出现黑屏现象,解决办法可参考SDK提供的ApiDemos中关于Camera的 例子: List<Size> sizes = parameters.getSupporte

Android使用TextView,设置onClick属性无效的解决方法_Android

Android在布局文件中为View提供了onClick属性,使用方法如下: <TextView android:id="@+id/user" android:layout_width="@dimen/px_171" android:layout_height="fill_parent" android:onClick="iconClickListener" android:clickable="true&qu

android错误 aapt.exe已停止工作的解决方法_Android

在使用eclipse进行安卓java的编程的时候,有时候我们会遇到这样的问题:那就是无故弹出aapt.exe停止工作的提示,虽然程序不会崩溃,但是这个提示经常弹出很是烦人.今天,小编就来教大家aapt.exe停止工作如何解决 android异常--aapt.exe已停止工作 在android开发时,当build项目时,发生如下异常: aapt.exe已停止工作,其他无任何错误提示,发生这个错误一般是资源文件或是xml文件中有错误造成的. 解决方法: clean一下,可以发现console中会有错

Android中Activity启动默认不显示输入法解决方法_Android

checkbox控件时导致Activity启动默认不显示输入法. 网上很多资料说要放一个空的Linearlayout,完全是在误导大众, 正确的方法如下: Android Manifest对Activity做如下设置: 复制代码 代码如下: android:windowSoftInputMode="stateHidden"

Android Drawerlayout侧拉栏事件传递问题的解决方法_Android

先来看看错误分析: "在侧拉栏打开的时候出现了点击之后侧拉栏下面的页面也接收到了点击事件." 解决方案: rootDrawerlayout.setDrawerListener(new DrawerLayout.DrawerListener() { //当侧拉栏滑动的时候调用此方法 @Override public void onDrawerSlide(View drawerView, float slideOffset) { }//当侧拉栏打开的时候调用此方法 @Override pu

Android 5.0以上Toast不显示的解决方法_Android

原因分析 用户使用android 5.0以上的系统在安装APP时,将消息通知的权限关闭掉了.实际上用户本意只是想关闭Notification,但是Toast的show方法中有调用INotificationManager这个类,而这个类在用户关闭消息通知权限的同时被禁用了,所以我们的吐司无法显示. Toast.show() 效果图 自定义Toast(上)与Toast(下)比对 问题解决 既然系统不允许我们调用Toast,那么我们就自立门户--自己写一个Toast出来.我们总体的思路是:在Activ