Android仿qq顶部消息栏效果

作者:cf8833 时间:2021-10-28 13:52:57 

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顶部消息栏效果

总结

以上所述是小编给大家介绍的Android仿qq顶部消息栏效果网站的支持!

来源:https://blog.csdn.net/cf8833/article/details/79880857

标签:android,消息栏
0
投稿

猜你喜欢

  • Java swing五子棋的实现方法

    2021-06-01 15:25:20
  • C#虚方法的声明和使用实例教程

    2022-09-26 16:07:55
  • LINQ基础之Intersect、Except和Distinct子句

    2022-01-19 00:46:13
  • java如何反编译jar包并修改class文件重新打包

    2021-09-20 05:24:26
  • java实现数字转换人民币中文大写工具

    2023-08-16 08:48:41
  • SpringMVC请求数据详解讲解

    2021-09-13 08:56:56
  • Java开发Oracle数据库连接JDBC Thin Driver 的三种方法

    2022-05-08 09:40:50
  • Kotlin可见性修饰符详解

    2023-02-28 22:36:18
  • C# ThreadPool之QueueUserWorkItem使用案例详解

    2022-08-10 03:49:30
  • java金钱处理方法实例详解

    2023-05-29 10:38:29
  • springboot整合腾讯云短信开箱即用的示例代码

    2023-04-02 06:06:38
  • Spring依赖注入的三种方式小结

    2022-08-09 15:56:41
  • 命令提示符编译java的方法(必看篇)

    2022-01-28 08:34:38
  • JVM(Java虚拟机)简介(动力节点Java学院整理)

    2023-11-25 06:12:12
  • mybatis-plus自动填充插入更新时间有8小时时差

    2021-07-26 07:18:40
  • springboot整合RabbitMQ 中的 TTL实例代码

    2022-04-18 03:12:34
  • Android编程解析XML文件的方法详解【基于XmlPullParser】

    2022-09-21 22:48:40
  • 实现分布式WebSocket集群的方法

    2021-06-12 22:55:10
  • Java实现inputstream流的复制代码实例

    2021-08-30 11:52:11
  • Java设计模式中的观察者模式

    2021-08-22 01:27:20
  • asp之家 软件编程 m.aspxhome.com