Android仿qq顶部消息栏效果
作者:cf8833 发布时间:2021-10-28 13:52:57
标签:android,消息栏
android仿照qq的顶部栏效果,主要就是利用fragment manager把fragment设置显示内容
(1)在activity_main.xml布局中添加控件
<?xml version="1.0" encoding="utf-8"?>
<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">
<LinearLayout
android:id="@+id/ll_qqtop"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:gravity="center"
android:background="@color/whites">
<LinearLayout
android:id="@+id/common_constact"
android:layout_height="40dp"
android:layout_width="150dp"
android:orientation="horizontal"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true">
<Button
android:id="@+id/constact_group"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:padding="5dp"
android:textSize="16sp"
android:button="@null"
android:checked="true"
android:background="@drawable/qq_contact_group"
android:textColor="@drawable/qq_constact_font"
android:text="消息"/>
<Button
android:button="@null"
android:id="@+id/constact_all"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="16sp"
android:padding="5dp"
android:background="@drawable/qq_contact_all"
android:textColor="@drawable/qq_constact_font"
android:text="电话"/>
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/id_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/ll_qqtop" />
</RelativeLayout>
(2)在drawable中添加样式文件,包括字体颜色和背景
2.1.在drawable文件夹中新建一个文件:qq_contact_group.xml,这个是左边按钮的背景样式xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"><shape>
<corners android:bottomLeftRadius="5dp" android:bottomRightRadius="0dp" android:topLeftRadius="5dp" android:topRightRadius="0dp" />
<solid android:color="@color/blue" />
<stroke android:width="1dp" android:color="@color/blue" />
</shape>
</item>
<item android:state_pressed="true"><shape>
<corners android:bottomLeftRadius="5dp" android:bottomRightRadius="0dp" android:topLeftRadius="5dp" android:topRightRadius="0dp" />
<solid android:color="@color/whites" />
<stroke android:width="1dp" android:color="@color/whites" />
</shape>
</item>
<item><shape>
<corners android:bottomLeftRadius="5dp" android:bottomRightRadius="0dp" android:topLeftRadius="5dp" android:topRightRadius="0dp" />
<solid android:color="@color/whites" />
<stroke android:width="1dp" android:color="@color/blue" />
</shape>
</item>
</selector>
2.2在drawable文件夹中新建一个文件:qq_contact_all.xml,这个是右边按钮的背景样式xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"><shape>
<corners android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp" android:topLeftRadius="0dp" android:topRightRadius="5dp" />
<solid android:color="@color/blue" />
<stroke android:width="1dp" android:color="@color/blue" />
</shape>
</item>
<item android:state_pressed="true"><shape>
<corners android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp" android:topLeftRadius="0dp" android:topRightRadius="5dp" />
<solid android:color="@color/blue" />
<stroke android:width="1dp" android:color="@color/blue" />
</shape>
</item>
<item><shape>
<corners android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp" android:topLeftRadius="0dp" android:topRightRadius="5dp" />
<solid android:color="@color/whites" />
<stroke android:width="1dp" android:color="@color/blue" />
</shape>
</item>
</selector>
3.在drawable文件夹中新建一个文件:qq_constact_font.xml,这个是两个按钮的文字样式xml,不选中为白色,选中为蓝色
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:color="@color/whites"/>
<item android:state_enabled="false" android:color="@color/whites"/>
<item android:color="@color/blue"/>
</selector>
(3)在MainActivity中设置按钮的选中情况,并且在fragmentManager中调用fragment
public class MainActivity extends Activity implements View.OnClickListener {
//参考网址:https://blog.csdn.net/u010585448/article/details/48543883
private Button title_left_btn , title_right_btn;
/**
* Fragment管理器
*/
private android.app.FragmentManager mFragmentManager;
private FragmentTransaction mTransaction;
/**
* 两个Fragment
*/
private LeftFragment mLFragment ;
private RightFragment mRFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
// TODO Auto-generated method stub
title_left_btn = (Button)findViewById(R.id.constact_group);
title_right_btn = (Button)findViewById(R.id.constact_all);
title_left_btn.setOnClickListener(this);
title_left_btn.performClick();//模拟点击事件,使左边按钮被点击
mFragmentManager = getFragmentManager();
mTransaction = mFragmentManager.beginTransaction();
mLFragment = new LeftFragment();
mTransaction.replace(R.id.id_content, mLFragment);
mTransaction.commit();
title_right_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.constact_group:
if(title_left_btn.isEnabled()){
title_left_btn.setEnabled(false);
title_right_btn.setEnabled(true);
}
mFragmentManager = getFragmentManager();
mTransaction = mFragmentManager.beginTransaction();
if(mLFragment == null){
mLFragment = new LeftFragment();
}
mTransaction.replace(R.id.id_content, mLFragment);
mTransaction.commit();
break;
case R.id.constact_all:
if(title_right_btn.isEnabled()){
title_left_btn.setEnabled(true);
title_right_btn.setEnabled(false);
}
mFragmentManager = getFragmentManager();
mTransaction = mFragmentManager.beginTransaction();
if(mRFragment == null){
mRFragment = new RightFragment();
}
mTransaction.replace(R.id.id_content, mRFragment);
mTransaction.commit();
break;
}
}
}
最后,简单贴一下fragment吧
public class LeftFragment extends android.app.Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.left_fragment, container , false);
}
}
实现效果图:
总结
以上所述是小编给大家介绍的Android仿qq顶部消息栏效果网站的支持!
来源:https://blog.csdn.net/cf8833/article/details/79880857


猜你喜欢
- C# 中可以将类、结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可。1. 什么是局部类型?C# 2.0 引入
- 本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理。分享给大家供大家参考。具体分析如下:Timer类:设置一个定时器,定时执行用户
- 对已有的apk文件进行重新打包,前面 Android签名机制:生成keystore、签名、查看签名信息 已经介绍了。本文介绍另外两种需求。使
- 1、冒泡排序排序原理:相邻两个元素比较,如果前者比后者大,则交换两个元素。每执行一次,都会确定一个最大值,其位置就固定了,下一次就不需要再参
- 本文实例为大家分享了Java实现FTP上传与下载的具体代码,供大家参考,具体内容如下JAVA操作FTP服务器,只需要创建一个FTPClien
- 背景我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 2.3 w 多条!!!简直让人欲
- 前言之前写过一篇关于配置中心对配置内容加密解密的介绍:《Spring Cloud构建微服务架构:分布式配置中心(加密解密) 》。在这篇文章中
- 序言:事件:此web项目的功能及其简单,就是有客户端来访问redis序列号服务时发送jison报文,项目已经在测试环境成功运行2周了,具体的
- 在实际业务中,当后台数据发生变化,客户端能够实时的收到通知,而不是由用户主动的进行页面刷新才能查看,这将是一个非常人性化的设计。有没有那么一
- 这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 在使用微服务中,单体事务注解@Transactional 就不适用了,需要采用分布式事务解决方案,本文介绍分布式事务Seata的安装。Sea
- 本文实例为大家分享了Android Studio实现弹窗设置的具体代码,供大家参考,具体内容如下弹窗能很好的显示当前处理事情的状态,那么这里
- 同线程回收对象上一小节剖析了从recycler中获取一个对象, 这一小节分析在创建和回收是同线程的前提下, recycler是如何进行回收的
- 举个例子Map < String , Object > jsonMap = new HashMap< String , O
- 时间轴,顾名思义就是将发生的事件按照时间顺序罗列起来,给用户带来一种更加直观的体验。京东和淘宝的物流顺序就是一个时间轴,想必大家都不陌生,如
- 本篇介绍了SpringBoot 缓存(EhCache 2.x 篇),分享给大家,具体如下:SpringBoot 缓存在 spring Boo
- 本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下一、自定义Ch
- ionic App 解决android端在真机上 tab处于顶部的Bug在app.js 页面中添加以下代码.config(function(
- 多线程run方法中直接调用service业务类应注意Java多线程run方法里边使用service业务类会产生java.lang.NullP
- 抽像类: public abstract class AbUserAll &nbs