Android仿QQ在状态栏显示登录状态效果

运行本实例,将显示一个用户登录界面,输入用户名(hpuacm)和密码(1111)后,单击"登录"按钮,将弹出如下图所示的选择登录状态的列表对话框,

单击代表登录状态的列表项,该对话框消失,并在屏幕的左上角显示代表登录状态的通知(如图)

过一段时间后该通知消失,同时在状态栏上显示代表该登录状态的图标(如图)

将状态栏下拉可以看到状态的详细信息(如图)

单击"更改登录状态"按钮,将显示通知列表。单击"退出"按钮,可以删除该通知。

具体实现方法:

此处是一个登陆界面
res/layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:id="@+id/tableLayout1"
 android:gravity="center_vertical"
 android:background="#000000"
 android:stretchColumns="0,3"
 >
 <!-- 第一行 -->
 <TableRow android:id="@+id/tableRow1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView/>
  <TextView android:text="用户名"
   android:id="@+id/textView1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textSize="24px"
   android:textColor="#FFFFFF"/>
  <EditText android:id="@+id/editView1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="#FFFFFF"
   android:minWidth="200px"/>
  <TextView/>
 </TableRow>
 <!-- 第二行 -->
 <TableRow android:id="@+id/tableRow2"
  android:layout_marginTop="10px"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView/>
  <TextView android:text="密 码:"
   android:id="@+id/textView2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textSize="24px"
   android:textColor="#FFFFFF"/>
  <EditText android:id="@+id/editView2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="#FFFFFF"
   android:textSize="24px"
   android:inputType="textPassword"/>
  <TextView/>
 </TableRow>
 <!-- 第三行 -->
 <TableRow android:id="@+id/tableRow3"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView/>
  <Button android:text="登录"
   android:id="@+id/button1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
  <Button android:text="退出"
   android:id="@+id/button2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
  <TextView/>
 </TableRow>
</TableLayout> 

效果如图

编写用于布局列表项内容的XML布局文件items.xml,在该文件中,采用水平线形布局管理器,并在该布局管理器中添加ImageView组件和一个TextView组件,分别用于显示列表项中的图标和文字。
res/layout/items.xml:

<?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:id="@+id/image"
  android:paddingLeft="10px"
  android:paddingTop="20px"
  android:paddingBottom="20px"
  android:adjustViewBounds="true"
  android:maxWidth="72px"
  android:maxHeight="72px"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>
 <TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="10px"
  android:layout_gravity="center"
  android:id="@+id/title"/>
</LinearLayout> 

MainActivity:

package com.example.test; 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; 

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleAdapter;
import android.widget.TableRow; 

public class MainActivity extends Activity {
 //第一个通知的ID
 final int NOTIFYID_1=123;
 //用户名
 private String user="匿名";
 //定义通知管理器对象
 private NotificationManager notificationManager;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main); 

  //获取通知管理器,用于发送通知
  notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  Button button1=(Button)findViewById(R.id.button1);//获取登录按钮
  //为登录按钮添加单击事件监听
  button1.setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View view) {
     EditText etUser=(EditText)findViewById(R.id.editView1);
    if(!"".equals(etUser.getText())){
     user=etUser.getText().toString();
    }
    sendNotification();//发送通知
   }
  }); 

  //获取退出按钮
  Button button2=(Button)findViewById(R.id.button2);
  //为退出按钮添加单击事件监听器
  button2.setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View view) {
     notificationManager.cancel(NOTIFYID_1);
    //让布局中的第一行显示
    ((TableRow)findViewById(R.id.tableRow1)).setVisibility(View.VISIBLE);
    //让布局中的第二行显示
    ((TableRow)findViewById(R.id.tableRow2)).setVisibility(View.VISIBLE);
    //改变"更改登录状态"按钮上显示的文字
    ((Button)findViewById(R.id.button1)).setText("登录");
   }
  });
 } 

 /*在sendNotification方法中,首先创建一个AlertDialog.Builder对象,并为其
  * 指定要显示的对话框的图标、标题等,然后创建两个用于保存列表项图片id和
  * 文字的数组,并将这些图片id和文字添加到List集合中,再创建一个SimpleAdapter
  * 简单适配器,并将该适配器作为Builder对象的适配器用于为列表对话框添加带
  * 图标的列表项,最后创建对话框并显示。*/
 //发送通知
 private void sendNotification() {
  Builder builder=new AlertDialog.Builder(MainActivity.this);
  builder.setIcon(R.drawable.in);//定义对话框的图标
  builder.setTitle("我的登录状态:");//定义对话框的标题
  final int[] imageId=new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3,
    R.drawable.img4};//定义并初始化保存图片id的数组
  //定义并初始化保存列表项文字的数组
  final String[] title=new String[]{"在线","隐身","忙碌中","离线"};
  //创建一个List集合
  List<Map<String,Object>> listItems=new ArrayList<Map<String,Object>>();
  //通过for循环将图片id和列表项文字放到Map中,并添加到List集合中
  for(int i=0;i<imageId.length;i++){
   Map<String,Object> map=new HashMap<String,Object>();
   map.put("image", imageId[i]);
   map.put("title",title[i]);
   listItems.add(map);
  }
  final SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,
    listItems,R.layout.item,new String[]{"title","image"},new int[]{R.id.title,R.id.image});
  builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 

   @Override
   public void onClick(DialogInterface dialog, int which) {
    Notification notify=new Notification();
    notify.icon=imageId[which];
    notify.tickerText=title[which];
    notify.when=System.currentTimeMillis();//设置发送时间
    notify.defaults=Notification.DEFAULT_SOUND;//设置默认声音
    //设置事件信息
    notify.setLatestEventInfo(MainActivity.this, user, title[which], null);
    //通过通知管理器发送通知
    notificationManager.notify(NOTIFYID_1,notify);
    //让布局中的第一行不显示
    ((TableRow)findViewById(R.id.tableRow1)).setVisibility(View.INVISIBLE);
    //让布局中的第二行不显示
    ((TableRow)findViewById(R.id.tableRow2)).setVisibility(View.INVISIBLE);
    //改变"登录"按钮上显示的文字
    ((Button)findViewById(R.id.button1)).setText("更改登录状态");
   }
  });
  builder.create().show();//创建对话框并显示
 }
} 

运行效果和开始描述的效果相同,实现成功!

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

您可能感兴趣的文章:

  • Android Studio实现第三方QQ登录操作代码
  • Android第三方登录之QQ登录
  • Android实现QQ登录功能
  • Android第三方登录之腾讯QQ登录的实例代码
  • Android QQ登录界面绘制代码
  • Android实现QQ登录界面遇到问题及解决方法
  • Android调用第三方QQ登录代码分享
(0)

相关推荐

  • Android实现QQ登录功能

    QQ登录是一个非常简单的一个第三方应用,现在,我们就来实现一个QQ登录 首先下载两个jar包   这里上传不了jar包,所以可以到我的github中下载工程中libs中的两个jar包 网址:https://github.com/chengzexiang/qqlogin 打代码前,先把这些东西写上: private static final String TAG = "MainActivity"; private static final String APP_ID = "11

  • Android第三方登录之腾讯QQ登录的实例代码

    布局文件 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录成功" android:textSize="25sp" android:layout_marginTop="100dp" /> 清单文件中的配置 <activity android:n

  • Android Studio实现第三方QQ登录操作代码

    来看看效果图吧     http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD 下载SDKJar包 接下来就可以 实现QQ登录了, 新建一个项目工程 ,然后把我们刚才下载的SDK解压将jar文件夹中的jar包拷贝到我们的项目libs中 导入一个下面架包就可以 项目结构如下 打开我们的清单文件Androidmanifest 在里面加入权限和注册Activity 如下 <?xml version="1.0" encoding

  • Android第三方登录之QQ登录

    本文实例为大家分享了Android第三方登录之QQ的具体代码,供大家参考,具体内容如下 第三方登录之QQ 代码区 public class MainActivity extends AppCompatActivity { private Button btn; private TextView tv; private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCr

  • Android调用第三方QQ登录代码分享

    本文为大家分享了调用QQ登录的相关代码,希望对大家有帮助,减少项目开发的时间,具体内容如下 1.去QQ开放平台注册帐号(http://open.qq.com/),为应用申请QQ的APP_ID , 并下载相关的jar包,放到工程的lib目录下. 2.在Manifest.xml里注册QQ相关的Activity,代码如下 <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOr

  • Android QQ登录界面绘制代码

    先看看效果图: 首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得到焦点并且有输入内容时) ---  这些问题都有一一解决 --- 以下是代码: 布局 fragment_main(问题2) <!-- android:focusable="true" android:focusableInTouchMode="true&qu

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

    先给大家炫下效果图: 首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得到焦点并且有输入内容时) ......... --- 这些问题都有一一解决 --- 以下是代码: 布局 fragment_main(问题2) <!-- android:focusable="true" android:focusableInTouchMode=&

  • Android仿QQ在状态栏显示登录状态效果

    运行本实例,将显示一个用户登录界面,输入用户名(hpuacm)和密码(1111)后,单击"登录"按钮,将弹出如下图所示的选择登录状态的列表对话框, 单击代表登录状态的列表项,该对话框消失,并在屏幕的左上角显示代表登录状态的通知(如图) 过一段时间后该通知消失,同时在状态栏上显示代表该登录状态的图标(如图) 将状态栏下拉可以看到状态的详细信息(如图) 单击"更改登录状态"按钮,将显示通知列表.单击"退出"按钮,可以删除该通知. 具体实现方法: 此处

  • Android仿QQ空间顶部条背景变化效果

    本文给大家分享仿QQ空间页面顶部条随界面滑动背景透明度变化的效果,这个效果在其他应用程序中也很常见,技能+1. 一.上代码,具体实现 笔者之前的文章第二部分总是二话不说,直接上代码,很干脆,其实更好的方式是引导读者思考:这个效果如何实现.前期做好效果的功能分析,才能读者更好的理解. QQ空间的这个页面其实并不复杂,我们看看QQ空间的演示界面: 可以看见,整个页面其实只有两个根元素,一个是ListView,一个是标题栏,前者可以上下滑动,给用户呈现内容:后者固定位置不动,类似于一个导航栏,左边一个

  • Android 自定View实现仿QQ运动步数圆弧及动画效果

    在之前的Android超精准计步器开发-Dylan计步中的首页用到了一个自定义控件,和QQ运动的界面有点类似,还有动画效果,下面就来讲一下这个View是如何绘制的. 1.先看效果图 2.效果图分析 功能说明:黄色的代表用户设置的总计划锻炼步数,红色的代表用户当前所走的步数. 初步分析:完全自定义View重写onDraw()方法,画圆弧. 3.画一个圆弧必备知识 在Canvas中有一个画圆弧的方法 drawArc(RectF oval, float startAngle, float sweepA

  • Android使用贝塞尔曲线仿QQ聊天消息气泡拖拽效果

    本文实例为大家分享了Android仿QQ聊天消息气泡拖拽效果展示的具体代码,供大家参考,具体内容如下 先画圆,都会吧.代码如下: public class Bezier extends View { private final Paint mGesturePaint = new Paint(); private final Path mPath = new Path(); private float mX1 = 100, mY1 = 150; private float mX2 = 300, m

  • Android仿QQ空间动态界面分享功能

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 和 模糊搜索,反复快速滑动仍然非常流畅. 缓存机制使得数据可在启动界面后瞬间加载完成. 动态详情界面MomentActivity支持 (取消)点赞.(删除)评论.点击姓名跳到个人详情 等. 只有1张图片时图片放大显示,超过1张则按九宫格显示. 用到的CommentContainerView和Mom

  • Android 仿QQ头像自定义截取功能

    看了Android版QQ的自定义头像功能,决定自己实现,随便熟悉下android绘制和图片处理这一块的知识. 先看看效果: 思路分析: 这个效果可以用两个View来完成,上层View是一个遮盖物,绘制半透明的颜色,中间挖了一个圆:下层的View用来显示图片,具备移动和缩放的功能,并且能截取某区域内的图片. 涉及到的知识点: 1.Matrix,图片的移动和缩放 2.Paint的setXfermode方法 3.图片放大移动后,截取一部分 编码实现: 自定义三个View: 1.下层View:ClipP

  • Android仿qq消息拖拽效果

    本文实例为大家分享了Android仿qq消息拖拽效果展示的具体代码,供大家参考,具体内容如下 这是一个仿qq消息拖拽效果,View和拖拽实现了分离,TextView.Button.Imageview等都可以实现相应的拖拽效果:在触发的地方调用 MessageBubbleView.attach(findViewById(R.id.text_view), new MessageBubbleView.BubbleDisappearListener() { @Override public void d

  • Android仿qq分组管理的第三方库

    本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下 下面先看效果 我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便. 下面直接上核心代码 首先定义分组的对象,相当于上面红色字体的对象,跟分组下每个item的对象: 创建分组的ViewHolder继承第三方库的ParentViewHolder,代码如下(由于父类没有无参构造,所以必须实现父类的一个有参构造,传入的参数相信大家也很清楚): /** * 分组的View

  • Android仿QQ长按删除弹出框功能示例

    废话不说,先看一下效果图,如果大家感觉不错,请参考实现代码: 对于列表来说,如果想操作某个列表项,一般会采用长按弹出菜单的形式,默认的上下文菜单比较难看,而QQ的上下文菜单就人性化多了,整个菜单给用户一种气泡弹出的感觉,而且会显示在手指按下的位置,而技术实现我之前是使用popupWindow和RecyclerView实现的,上面一个RecyclerView,下面一个小箭头ImageView,但后来发现没有必要,而且可定制化也不高,还是使用多个TextView更好一点. 我封装了一下,只需要一个P

  • android 仿QQ动态背景、视频背景的示例代码

    本文介绍了android 仿QQ动态背景.视频背景的示例代码,分享给大家,具体如下: 效果如下: 如上图类似效果图: 1, 自定义视频类 继承VideoView public class CustomVideoView extends VideoView { public CustomVideoView(Context context) { super(context); } public CustomVideoView(Context context, AttributeSet attrs)

随机推荐