Fragment仿qq界面
来源:互联网 发布:奥鹏网络研修总结作业 编辑:程序博客网 时间:2024/04/30 02:07
概述
翻译:碎片
优点:适用于不同的屏幕尺寸和分辨率的UI布局,提高了代码的重用率。
创建
1.通过xml文件
— 1.创建main布局
<?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" > <fragment android:id="@+id/center_fragment" android:name="com.example.fragmenttest.FragmentCenter" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="5" > </fragment> <fragment android:id="@+id/bottom_fragment" android:name="com.example.fragmenttest.FragmentBottom" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > </fragment></LinearLayout>
— 2.定义两个fragment类
public class FragmentCenter extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.center_fragment, container, false); return view; }}
public class FragmentBottom extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.bottom_fragment, container,false); return view; }}
注意:这里的两个布局文件R.layout.center_fragment
和R.layout.bottom_fragment
是自定义的普通的布局文件
— 3.MainActivity
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}
2.通过java代码动态创建
@SuppressLint("NewApi") public class FragmentTest2Activity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_test2); //获取碎片管理器 FragmentManager fragmentManager = getFragmentManager(); //碎片的显示需要使用FragmentTransaction类操作 FragmentTransaction transaction = fragmentManager.beginTransaction(); //获取屏幕管理器和默认的显示 Display display = getWindowManager().getDefaultDisplay(); if(display.getWidth() > display.getHeight()){ //判断横屏 FragmentCenter fragmentCenter = new FragmentCenter(); //获取java类 transaction.replace(android.R.id.content, fragmentCenter); }else { FragmentBottom fragmentBottom = new FragmentBottom(); transaction.replace(android.R.id.content, fragmentBottom); } transaction.commit(); //使用FragmentTransaction必须要commit }}
fragment仿qq界面(fragment的切换)
MainActivity中的相关代码
功能:
— 1、创建fragment
— 2、点击相应的按钮时,会切换不同的fragment(在切换的过程中,首先需要判断该fragment是隐藏了还是没有创建过;如果是隐藏了就直接show,如果没有创建过就new,最后调用fragmentTransaction.commit();进行切换
)
public class MainActivity extends Activity implements View.OnClickListener { private ImageView contactImage; private ImageView msgImage; private ImageView trendImage; private ImageView title_head; private TextView title_center; private Button title_button; private ContactFragment contactFragment; private MsgFragment msgFragment; private TrendFragment trendFragment; private FragmentManager fragmentManager; private FragmentTransaction fragmentTransaction; //表示是哪个Fragment int fragment_tag = 0; //默认是消息 static final int FRAGMENT_TAB_MSG = 0; static final int FRAGMENT_TAB_CONTACT = 1; static final int FRAGMENT_TAB_PLUGIN = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initViews(); fragmentManager = getFragmentManager(); // 第一次启动时选中第0个tab setTabSelection(0); } private void initViews() { //消息 contactImage = (ImageView) findViewById(R.id.tab_contact); //联系人 msgImage = (ImageView) findViewById(R.id.tab_conversation); //动态 trendImage = (ImageView) findViewById(R.id.tab_plugin); //标题栏 title_head = (ImageView) findViewById(R.id.title_head); title_center = (TextView) findViewById(R.id.title_center); title_button = (Button) findViewById(R.id.title_button); contactImage.setOnClickListener(this); msgImage.setOnClickListener(this); trendImage.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tab_conversation: // 当点击了消息tab时,选中第1个tab setTabSelection(0); break; case R.id.tab_contact: // 当点击了联系人tab时,选中第2个tab setTabSelection(1); break; case R.id.tab_plugin: // 当点击了动态tab时,选中第3个tab setTabSelection(2); break; default: break; } } /** * 根据传入的index参数来设置选中的tab页。 * * @param index 每个tab页对应的下标。0表示消息,1表示联系人,2表示动态 */ private void setTabSelection(int index) { // 开启一个Fragment事务 fragmentTransaction = fragmentManager.beginTransaction(); // 先隐藏掉所有的Fragment,以防止有多个Fragment显示在界面上的情况 hideFragments(fragmentTransaction); /*-------------------------------------------------- * 改变底层栏(bottom panel) * 改变标题栏 *-------------------------------------------------*/ switch (index) { case 0: // 当点击了消息tab时,改变控件的图片和文字颜色 //“消息” msgImage.setImageResource(R.drawable.skin_tab_icon_conversation_selected); //normal contactImage.setImageResource(R.drawable.skin_tab_icon_contact_normal);trendImage.setImageResource(R.drawable.skin_tab_icon_plugin_normal); //标记为“消息”的fragment fragment_tag = FRAGMENT_TAB_MSG; break; case 1: //联系人contactImage.setImageResource(R.drawable.skin_tab_icon_contact_selected); //消息和动态 normal msgImage.setImageResource(R.drawable.skin_tab_icon_conversation_normal);trendImage.setImageResource(R.drawable.skin_tab_icon_plugin_normal); //标记为“联系人”的fragment fragment_tag = FRAGMENT_TAB_CONTACT; break; case 2: //动态 trendImage.setImageResource(R.drawable.skin_tab_icon_plugin_selected); //normal contactImage.setImageResource(R.drawable.skin_tab_icon_contact_normal); msgImage.setImageResource(R.drawable.skin_tab_icon_conversation_normal); fragment_tag = FRAGMENT_TAB_PLUGIN; //标记为“动态”的fragment break; } //切换fragment switchFragment(fragment_tag); } private void switchFragment(int tag) { /*-------------------------------------------------- * Fragment不存在则新建 *-------------------------------------------------*/ Fragment fragment = null; if (tag == FRAGMENT_TAB_MSG) { //不存在则新建 if (msgFragment == null) { msgFragment = new MsgFragment(); } fragment = msgFragment; } else if (tag == FRAGMENT_TAB_CONTACT) { if (contactFragment == null) { contactFragment = new ContactFragment(); } fragment = contactFragment; } else if (tag == FRAGMENT_TAB_PLUGIN) { if (trendFragment == null) { trendFragment = new TrendFragment(); } fragment = trendFragment; } /*-------------------------------------------------- * 显示或者绑定Fragment * 1.如果隐藏,则显示 * 2.如果第一次使用,add *-------------------------------------------------*/ if (fragment != null) { if (fragment.isHidden()) { fragmentTransaction.show(fragment); } else if (!fragment.isAdded()) { fragmentTransaction.add(R.id.content, fragment, tag + ""); } } //不为空,切换 if (fragmentTransaction != null && !fragmentTransaction.isEmpty()) { fragmentTransaction.commit(); } } /** * 将所有的Fragment都置为隐藏状态。 * * @param transaction 用于对Fragment执行操作的事务 */ private void hideFragments(FragmentTransaction transaction) { if (contactFragment != null) { transaction.hide(contactFragment); } if (msgFragment != null) { transaction.hide(msgFragment); } if (trendFragment != null) { transaction.hide(trendFragment); } }}
fragment中的相关代码与Activity中的代码类似(要注意有的地方需要用到getActivity()获得context)
0 0
- Fragment仿qq界面
- Viewpaper Fragment RadioButton 仿QQ主界面
- Fragment应用实战:仿qq主界面
- 仿QQ主界面Fragment简单应用
- Android 仿QQ主界面 Fragment + FrameLayout
- 仿QQ界面切换简单实现-ViewPager、Fragment
- 仿QQ聊天界面基本的Fragment用法。
- 仿QQ界面
- 仿腾讯QQ界面
- 仿qq登录界面
- 仿qq界面
- 仿qq登陆界面
- android 仿QQ界面
- 仿qq聊天界面
- Android 安卓 fragment+viewpager 仿qq界面 实现点击菜单切换界面+滑动切换viewpager切换界面
- Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)
- Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)
- 转载作者yanzi1225627 Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)
- 数据质量提升必达之路
- Android Studio中使用git将项目推送到github
- upper_bound()返回值 lower_bound()返回值
- iOS网络编程 get post 区别
- Ubuntu X64 系统安装配置编录
- Fragment仿qq界面
- java定义二维数组的几种写法(转)
- windows+python3.5环境下安装selenium后无法导入webdriver的解决方法
- 关于UISearchDisplayController的一些使用经验分享
- ThinkPHP3.1快速入门(2)数据CURD
- 说说最近
- 图论 生成树 POJ 1287 Networking(prim)( Kruskal)
- 51NOD1459 迷宫游戏(dij算法变形)
- HDU5441 并查集+(按大小)预处理