介绍与分析AS实现微信首页的流程,
并附有源码链接: 码云
- AndroidStudio使用之仿微信首页界面
- (一)文件目录
- (二)界面分析
- 1.top.xml
- 2.bottom.xml
- 3.tab01.xml
- 4.activity_main.xml
- (三)动态切换
- 1.展示效果
- 2.功能分析
#关键代码
(三)动态切换 1.展示效果 2.功能分析
主要运用了fragment
Fragment的优势有以下几点:
模块化(Modularity):不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。
可重用(Reusability):多个Activity可以重用一个Fragment。
可适配(Adaptability):根据硬件的屏幕尺寸、方向等,能更方便地实现不同的布局,提升用户体验。
#关键代码
package com.example.wechat;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.View;
import android.app.FragmentManager;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.widget.ImageButton;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements View.OnClickListener{
private Fragment mTab01=new WechatFragment();
private Fragment mTab02=new friendFragment();
private Fragment mTab03=new contactFragment();
private Fragment mTab04=new settingsFragment();
private FragmentManager fm;
private LinearLayout mTabWechat;
private LinearLayout mTabFriend;
private LinearLayout mTabContact;
private LinearLayout mTabSettings;
private ImageButton mimgWechat;
private ImageButton mimgFriend;
private ImageButton mimgContact;
private ImageButton mimgSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initFragment();
initView();
selectfragment(0);
initEvent();
}
private void initEvent(){
mTabWechat.setOnClickListener(this);
mTabFriend.setOnClickListener(this);
mTabContact.setOnClickListener(this);
mTabSettings.setOnClickListener(this);
}
private void initFragment(){
fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.add(R.id.id_content,mTab01);
transaction.add(R.id.id_content,mTab02);
transaction.add(R.id.id_content,mTab03);
transaction.add(R.id.id_content,mTab04);
transaction.commit();
}
private void initView(){
mTabWechat = findViewById(R.id.id_tab_wechat);
mTabFriend = findViewById(R.id.id_tab_friend);
mTabContact = findViewById(R.id.id_tab_contact);
mTabSettings = findViewById(R.id.id_tab_settings);
mimgWechat = findViewById(R.id.id_tab_wechat_image);
mimgFriend = findViewById(R.id.id_tab_friend_image);
mimgContact = findViewById(R.id.id_tab_contact_image);
mimgSettings = findViewById(R.id.id_tab_settings_image);
}
private void hideFragment(FragmentTransaction transaction){
transaction.hide(mTab01);
transaction.hide(mTab02);
transaction.hide(mTab03);
transaction.hide(mTab04);
}
private void resetImgs(){
mimgWechat.setImageResource(R.drawable.tab_weixin_normal);
mimgFriend.setImageResource(R.drawable.tab_find_frd_normal);
mimgContact.setImageResource(R.drawable.tab_address_normal);
mimgSettings.setImageResource(R.drawable.tab_settings_normal);
}
private void selectfragment(int i){
FragmentTransaction transaction=fm.beginTransaction();
hideFragment(transaction);
switch (i){
case 0:
transaction.show(mTab01);
mimgWechat.setImageResource(R.drawable.tab_weixin_pressed);
break;
case 1:
transaction.show(mTab02);
mimgFriend.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case 2:
transaction.show(mTab03);
mimgContact.setImageResource(R.drawable.tab_address_pressed);
break;
case 3:
transaction.show(mTab04);
mimgSettings.setImageResource(R.drawable.tab_settings_pressed);
break;
default:
break;
}
transaction.commit();
}
public void onClick(View v){
resetImgs();
switch (v.getId()){
case R.id.id_tab_wechat:
selectfragment(0);
break;
case R.id.id_tab_friend:
selectfragment(1);
break;
case R.id.id_tab_contact:
selectfragment(2);
break;
case R.id.id_tab_settings:
selectfragment(3);
break;
}
}
}



