热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android仿微信界面的导航以及右上角菜单栏效果

这篇文章主要介绍了Android仿微信界面的导航以及右上角菜单栏效果,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧

下面是安卓开发仿微信界面的代码。

分为3步,

第一步是界面的编写;

第二步是导航界面;

第三步是右上角菜单栏。

开始第一步前先预览一下效果。

</p>
<p https://img.jbzj.com/file_images/article/201805/2018051414014512.jpg 

第一步,界面。

界面的思路是利用ViewPager+Fragment实现,所以activity_main.xml中添加一个ViewPager。顶部和底部include的顶部栏和底部栏后面再说。

MainActivity的界面activity_main.xml:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 
 
 
 
 


当然,要用到ViewPager+Fragment就要建立Fragment,如图我建了三个Fragment,这个可以根据需要自己创建。

这三个Fragment很类似,这里写出一个,其他以此类推。

package activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.chase.cn.money_of_my.R;
/**
 * Created by Chase on 2017/2/6.
 */
public class Fragment_tab01 extends Fragment {
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 View tab01 = inflater.inflate(R.layout.fragment_tab01_home,container,false);
 return tab01;
 }
}

此Fragment对应的xml文件:

<&#63;xml version="1.0" encoding="utf-8"&#63;>



现在回到MainActivity中:

package activity;
import ...
public class MainActivity extends FragmentActivity {
 private ViewPager mViewPager;
 private MyFragmentPagerAdapter mAdapter;
 private List fragmentList; //保存界面的view
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 StatusBarUtil.setWindowStatusBarColor(this, R.color.colorTitleGray);
 initViews();
 initDatas();
 }
 /**
 * 数据初始化
 */
 private void initDatas() {
 //fragment数据源
 fragmentList = new ArrayList();
 fragmentList.add(new Fragment_tab01());
 fragmentList.add(new Fragment_tab02());
 fragmentList.add(new Fragment_tab03());
 mAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);
 mViewPager.setAdapter(mAdapter);
 }
 /**
 * 初始化控件
 */
 private void initViews() {
 mViewPager = (ViewPager) findViewById(R.id.vp_mainvp);
 }
}

需要编写一个ViewPager的Adapter:

package utils;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;
/**
 * Created by Chase on 2017/2/6.
 */

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
 private List fragList;
 private List tabList;
 public MyFragmentPagerAdapter(FragmentManager fm, List fragList) {
 super(fm);
 this.fragList = fragList;
 }
 @Override
 public CharSequence getPageTitle(int position) {
 return tabList.get(position);
 }
 @Override
 public Fragment getItem(int position) {
 return fragList.get(position);
 }
 @Override
 public int getCount() {
 return fragList.size();
 }
}

现在三个Fragment已经添加到了MainActivity中,滑动ViewPager切换Fragment,同时底部的导航栏也会切换,在为ViewPager添加监听以前,先说说底部导航栏。

第二步,底部导航。

这个的切换其实就是切换准备好的png图片和改变文字的颜色。

下面是刚才导入的底部导航栏xml文件:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 
 
 
 


继续回到对应的MainActivity:并加入了按两次回退键退出程序。

package activity;
import ...
public class MainActivity extends FragmentActivity implements View.OnClickListener {
 private ViewPager mViewPager;
 private MyFragmentPagerAdapter mAdapter;
 private List fragmentList; //保存界面的view
 private FrameLayout fl_page_home, fl_page_budget, fl_page_more;
 private LinearLayout ll_taball;
 private Button bt_page_home, bt_page_budget, bt_page_more;
 private TextView tv_page_home;
 private TextView tv_page_budget;
 private TextView tv_page_more;
 private TextView tv_top_title;
 //onkeydown_
 private static boolean isQuit = false;
 private Timer timer = new Timer();
 //onResult的码
 private static final int addActivityRequestCodeOfPage2 = 0,addActivityRequestCodeOfPage1=1;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 StatusBarUtil.setWindowStatusBarColor(this, R.color.colorTitleGray);
 initViews();
 setViewPagerEvent();
 initEvents();
 initDatas();
 }
 @Override
 protected void onRestart() {
 super.onRestart();
 }
 /**
 * viewPager切换页面的事件
 */
 private void setViewPagerEvent() {
 //设置viewpager的page监听换bottom按钮颜色
 mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
 @Override
 public void onPageSelected(int position) {
 int currentItem = mViewPager.getCurrentItem();
 switch (currentItem) {
 case 0:
 resetImgAndTextColorAndButton(); bt_page_home.setBackgroundResource(R.drawable.home_pressed);
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("首页");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_main_top_menu);
 break;
 case 1:
 resetImgAndTextColorAndButton();
 bt_page_budget.setBackgroundResource(R.drawable.budget_pressed);
 tv_page_budget.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("记录");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_add_button);
 break;
 case 2:
 resetImgAndTextColorAndButton();
 bt_page_more.setBackgroundResource(R.drawable.more_pressed);
 tv_page_more.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("更多");
 bt_add.setVisibility(View.INVISIBLE);
 break;
 default:
 break;
 }
 }
 @Override
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 }
 @Override
 public void onPageScrollStateChanged(int state) {
 }
 });
 }
 /**
 * 数据初始化
 */
 private void initDatas() {
 //fragment数据源
 fragmentList = new ArrayList();
 fragmentList.add(new Fragment_tab01());
 fragmentList.add(new Fragment_tab02());
 fragmentList.add(new Fragment_tab03());
 mAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);
 mViewPager.setAdapter(mAdapter);
 }
 /**
 * 初始化事件
 */
 private void initEvents() {
 fl_page_home.setOnClickListener(this);
 fl_page_budget.setOnClickListener(this);
 fl_page_more.setOnClickListener(this);
 bt_add.setOnClickListener(this);
 }
 /**
 * 初始化控件
 */
 private void initViews() {
 mViewPager = (ViewPager) findViewById(R.id.vp_mainvp);
 //底部的布局
 fl_page_home = (FrameLayout) findViewById(R.id.fl_page_home);
 fl_page_budget = (FrameLayout) findViewById(R.id.fl_page_budget);
 fl_page_more = (FrameLayout) findViewById(R.id.fl_page_more);
 //底部的按钮
 bt_page_home = (Button) findViewById(R.id.bt_page_home);
 bt_page_budget = (Button) findViewById(R.id.bt_page_budget);
 bt_page_more = (Button) findViewById(R.id.bt_page_more);
 //按钮对应文字的颜色
 tv_page_home = (TextView) findViewById(R.id.tv_page_home);
 tv_page_budget = (TextView) findViewById(R.id.tv_page_budget);
 tv_page_more = (TextView) findViewById(R.id.tv_page_more);
 //顶部状态栏文字
 tv_top_title = (TextView) findViewById(R.id.tv_top_title);
 ll_taball = (LinearLayout) findViewById(R.id.ll_taball);
 //记一笔按钮
 bt_add = (Button) findViewById(R.id.bt_add);
 bt_add.setVisibility(View.VISIBLE);
 }
 /**
 * 点击下面的布局按钮事件
 *
 * @param v
 */
 @Override
 public void onClick(View v) {
 resetImgAndTextColorAndButton();
 switch (v.getId()) {
 /**
 * 底部导航栏按钮
 */
 case R.id.fl_page_home:
 mViewPager.setCurrentItem(0);//如果首页 切换首页
 bt_page_home.setBackgroundResource(R.drawable.home_pressed);//并将按钮颜色点亮
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("首页");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_main_top_menu);
 break;
 case R.id.fl_page_budget:
 mViewPager.setCurrentItem(1);
 bt_page_budget.setBackgroundResource(R.drawable.budget_pressed);
 tv_page_budget.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("记录");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_add_button);
 break;
 case R.id.fl_page_more:
 mViewPager.setCurrentItem(2);
 bt_page_more.setBackgroundResource(R.drawable.more_pressed);
 tv_page_more.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("更多");
 bt_add.setVisibility(View.INVISIBLE);
 break;
 default:
 break;
 }
 }
 /**
 * 设置所有图片暗色和文字
 */
 private void resetImgAndTextColorAndButton() {
 bt_page_home.setBackgroundResource(R.drawable.home);
 bt_page_budget.setBackgroundResource(R.drawable.budget);
 bt_page_more.setBackgroundResource(R.drawable.more);
 tv_page_home.setTextColor(Color.rgb(56, 56, 56));
 tv_page_budget.setTextColor(Color.rgb(56, 56, 56));
 tv_page_more.setTextColor(Color.rgb(56, 56, 56));
 }
 /**
 * 回退按钮两次退出
 */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK) {
 if (isQuit == false) {
 isQuit = true;
 ToastUtil.showToast(getApplicationContext(), "请按两次回退键退出", 3000);
 TimerTask task = null;
 task = new TimerTask() {
 @Override
 public void run() {
 isQuit = false;
 }
 };
 timer.schedule(task, 2000);
 } else {
 finish();
 System.exit(0);
 }
 }
 return true;
 }
@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == addActivityRequestCodeOfPage2) {
 mViewPager.setCurrentItem(1);
 bt_page_budget.setBackgroundResource(R.drawable.budget_pressed);
 tv_page_budget.setTextColor(Color.rgb(255, 209, 0));
 }else if (requestCode==addActivityRequestCodeOfPage1){
 bt_page_home.setBackgroundResource(R.drawable.home_pressed);
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 }
 }
}

最后加入的onActivityResult是对应如下情况,如果在某个Fragment中对应进去了其他的Activity时,返回以后导航栏是没有之前的显示的,所以如下就要返回原来的显示。

@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == addActivityRequestCodeOfPage2) {
 mViewPager.setCurrentItem(1);
 bt_page_budget.setBackgroundResource(R.drawable.budget_pressed);
 tv_page_budget.setTextColor(Color.rgb(255, 209, 0));
 }else if (requestCode==addActivityRequestCodeOfPage1){
 bt_page_home.setBackgroundResource(R.drawable.home_pressed);
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 }
 }

第三步,顶部右上角菜单。

之前导入顶部栏的xml文件:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 

对应菜单我们使用PopupWindow 。

package views;
import ...
/**
 * Created by Chase on 2017/2/23.
 */
public class TopPopWindow extends PopupWindow {
 private View mView;
 private LinearLayout ll_popmenu_record,ll_popmenu_book,ll_popmenu_search;
 public TopPopWindow(Activity paramActivity, View.OnClickListener paramOnClickListener,
 int paramInt1, int paramInt2){
 mView = LayoutInflater.from(paramActivity).inflate(R.layout.popwindow_topright, null);
 ll_popmenu_record = (LinearLayout) mView.findViewById(R.id.ll_popmenu_record);
 ll_popmenu_book = (LinearLayout) mView.findViewById(R.id.ll_popmenu_book);
 ll_popmenu_search = (LinearLayout) mView.findViewById(R.id.ll_popmenu_search);
 if (paramOnClickListener != null){
 //设置点击监听
 ll_popmenu_record.setOnClickListener(paramOnClickListener);
 ll_popmenu_book.setOnClickListener(paramOnClickListener);
 ll_popmenu_search.setOnClickListener(paramOnClickListener);
 setContentView(mView);
 //设置宽度
 setWidth(paramInt1);
 //设置高度
 setHeight(paramInt2);
 //设置显示隐藏动画
 setAnimationStyle(R.style.AnimTools);
 //设置背景透明
 setBackgroundDrawable(new ColorDrawable(0));
 }
 }
 }

编写PopupWindow 的xml:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
 
 
 
 
 
 
 
 
 
 
 
 
 

回到MainActivity:

package activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.chase.cn.money_of_my.R;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import utils.MyFragmentPagerAdapter;
import utils.StatusBarUtil;
import utils.ToastUtil;
import views.TopPopWindow;
public class MainActivity extends FragmentActivity implements View.OnClickListener {
 private ViewPager mViewPager;
 private MyFragmentPagerAdapter mAdapter;
 private List fragmentList; //保存界面的view
 private FrameLayout fl_page_home, fl_page_budget, fl_page_more;
 private LinearLayout ll_taball;
 private Button bt_page_home, bt_page_budget, bt_page_more;
 private Button bt_add;
 private TextView tv_page_home;
 private TextView tv_page_budget;
 private TextView tv_page_more;
 private TextView tv_top_title;
 //onkeydown_
 private static boolean isQuit = false;
 private Timer timer = new Timer();
 //onResult的码
 private static final int addActivityRequestCodeOfPage2 = 0,addActivityRequestCodeOfPage1=1;
 private TopPopWindow topPopWindow;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 StatusBarUtil.setWindowStatusBarColor(this, R.color.colorTitleGray);
 initViews();
 setViewPagerEvent();
 initEvents();
 initDatas();
 }
 @Override
 protected void onRestart() {
 super.onRestart();
 }
 /**
 * viewPager切换页面的事件
 */
 private void setViewPagerEvent() {
 //设置viewpager的page监听换bottom按钮颜色
 mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
 @Override
 public void onPageSelected(int position) {
 int currentItem = mViewPager.getCurrentItem();
 switch (currentItem) {
 case 0:
 resetImgAndTextColorAndButton();
 bt_page_home.setBackgroundResource(R.drawable.home_pressed);
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("首页");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_main_top_menu);
 break;
 case 1:
 resetImgAndTextColorAndButton();
 bt_page_budget.setBackgroundResource(R.drawable.budget_pressed);
 tv_page_budget.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("记录");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_add_button);
 break;
 case 2:
 resetImgAndTextColorAndButton();
 bt_page_more.setBackgroundResource(R.drawable.more_pressed);
 tv_page_more.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("更多");
 bt_add.setVisibility(View.INVISIBLE);
 break;
 default:
 break;
 }
 }
 @Override
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 }
 @Override
 public void onPageScrollStateChanged(int state) {
 }
 });
 }
 /**
 * 数据初始化
 */
 private void initDatas() {
 //fragment数据源
 fragmentList = new ArrayList();
 fragmentList.add(new Fragment_tab01());
 fragmentList.add(new Fragment_tab02());
 fragmentList.add(new Fragment_tab03());
 mAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);
 mViewPager.setAdapter(mAdapter);
 }
 /**
 * 初始化事件
 */
 private void initEvents() {
 fl_page_home.setOnClickListener(this);
 fl_page_budget.setOnClickListener(this);
 fl_page_more.setOnClickListener(this);
 bt_add.setOnClickListener(this);
 }
 /**
 * 初始化控件
 */
 private void initViews() {
 mViewPager = (ViewPager) findViewById(R.id.vp_mainvp);
 //底部的布局
 fl_page_home = (FrameLayout) findViewById(R.id.fl_page_home);
 fl_page_budget = (FrameLayout) findViewById(R.id.fl_page_budget);
 fl_page_more = (FrameLayout) findViewById(R.id.fl_page_more);
 //底部的按钮
 bt_page_home = (Button) findViewById(R.id.bt_page_home);
 bt_page_budget = (Button) findViewById(R.id.bt_page_budget);
 bt_page_more = (Button) findViewById(R.id.bt_page_more);
 //按钮对应文字的颜色
 tv_page_home = (TextView) findViewById(R.id.tv_page_home);
 tv_page_budget = (TextView) findViewById(R.id.tv_page_budget);
 tv_page_more = (TextView) findViewById(R.id.tv_page_more);
 //顶部状态栏文字
 tv_top_title = (TextView) findViewById(R.id.tv_top_title);
 ll_taball = (LinearLayout) findViewById(R.id.ll_taball);
 //记一笔按钮
 bt_add = (Button) findViewById(R.id.bt_add);
 bt_add.setVisibility(View.VISIBLE);
 }
 /**
 * 点击下面的布局按钮事件
 *
 * @param v
 */
 @Override
 public void onClick(View v) {
 resetImgAndTextColorAndButton();
 switch (v.getId()) {
 /**
 * 底部导航栏按钮
 */
 case R.id.fl_page_home:
 mViewPager.setCurrentItem(0);//如果首页 切换首页
 bt_page_home.setBackgroundResource(R.drawable.home_pressed);//并将按钮颜色点亮
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("首页");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_main_top_menu);
 break;
 case R.id.fl_page_budget:
 mViewPager.setCurrentItem(1);
 bt_page_budget.setBackgroundResource(R.drawable.budget_pressed);
 tv_page_budget.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("记录");
 bt_add.setVisibility(View.VISIBLE);
 bt_add.setBackgroundResource(R.drawable.selector_add_button);
 break;
 case R.id.fl_page_more:
 mViewPager.setCurrentItem(2);
 bt_page_more.setBackgroundResource(R.drawable.more_pressed);
 tv_page_more.setTextColor(Color.rgb(255, 209, 0));
 tv_top_title.setText("更多");
 bt_add.setVisibility(View.INVISIBLE);
 break;
 /**
 * 记一笔按钮
 */
 case R.id.bt_add:
 if (mViewPager.getCurrentItem() == 1) {
 Intent intent_add_activity = new Intent(getApplicationContext(), AddRecorderActivity.class);
 startActivityForResult(intent_add_activity, addActivityRequestCodeOfPage2);
 } else {
 bt_page_home.setBackgroundResource(R.drawable.home_pressed);//并将按钮颜色点亮
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 showTopRightPopMenu();
 }
 break;
 /**
 * popwindow引入的方法的onclick的listener引入到this
 * popwindow的点击事件
 */
 case R.id.ll_popmenu_record:
 Intent intent_add_activity = new Intent(getApplicationContext(), AddRecorderActivity.class);
 startActivityForResult(intent_add_activity,addActivityRequestCodeOfPage1);
 topPopWindow.dismiss();
 break;
 case R.id.ll_popmenu_book:
 ToastUtil.showSucceccToast(getApplicationContext(), "success12", 3000);
 break;
 case R.id.ll_popmenu_search:
 ToastUtil.showSucceccToast(getApplicationContext(), "success13", 3000);
 break;
 default:
 break;
 }
 }
 /**
 * 显示右上角popup菜单
 */
 private void showTopRightPopMenu() {
 if (topPopWindow == null) {
 //(activity,onclicklistener,width,height)
 topPopWindow = new TopPopWindow(MainActivity.this, this, 360, 290);
 //监听窗口的焦点事件,点击窗口外面则取消显示
 topPopWindow.getContentView().setOnFocusChangeListener(new View.OnFocusChangeListener() {
 @Override
 public void onFocusChange(View v, boolean hasFocus) {
 if (!hasFocus) {
 topPopWindow.dismiss();
 }
 }
 });
 }
 //设置默认获取焦点
 topPopWindow.setFocusable(true);
 //以某个控件的x和y的偏移量位置开始显示窗口
 topPopWindow.showAsDropDown(bt_add, 0, 0);
 //如果窗口存在,则更新
 topPopWindow.update();
 }
 /**
 * 设置所有图片暗色和文字
 */
 private void resetImgAndTextColorAndButton() {
 bt_page_home.setBackgroundResource(R.drawable.home);
 bt_page_budget.setBackgroundResource(R.drawable.budget);
 bt_page_more.setBackgroundResource(R.drawable.more);
 tv_page_home.setTextColor(Color.rgb(56, 56, 56));
 tv_page_budget.setTextColor(Color.rgb(56, 56, 56));
 tv_page_more.setTextColor(Color.rgb(56, 56, 56));
 }
 /**
 * 回退按钮两次退出
 */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK) {
 if (isQuit == false) {
 isQuit = true;
 ToastUtil.showToast(getApplicationContext(), "请按两次回退键退出", 3000);
 TimerTask task = null;
 task = new TimerTask() {
 @Override
 public void run() {
 isQuit = false;
 }
 };
 timer.schedule(task, 2000);
 } else {
 finish();
 System.exit(0);
 }
 }
 return true;
 }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == addActivityRequestCodeOfPage2) {
 mViewPager.setCurrentItem(1);
 bt_page_budget.setBackgroundResource(R.drawable.budget_pressed);
 tv_page_budget.setTextColor(Color.rgb(255, 209, 0));
 }else if (requestCode==addActivityRequestCodeOfPage1){
 bt_page_home.setBackgroundResource(R.drawable.home_pressed);
 tv_page_home.setTextColor(Color.rgb(255, 209, 0));
 }
 }
}

右上角的按钮还添加了功能,在不同的Fragment中,它的功能不同。

以上就算安卓模仿微信界面的步骤了。

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


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
author-avatar
友爱锦锦_950
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有