{"id":23897995,"url":"https://github.com/byteszero/imfreamwork","last_synced_at":"2025-10-29T22:42:00.114Z","repository":{"id":30039112,"uuid":"33588186","full_name":"BytesZero/imFreamwork","owner":"BytesZero","description":"im的主界面框架","archived":false,"fork":false,"pushed_at":"2015-04-08T06:46:51.000Z","size":1196,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-04T17:19:21.350Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BytesZero.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-08T06:10:23.000Z","updated_at":"2016-07-14T09:00:10.000Z","dependencies_parsed_at":"2022-09-07T18:12:10.597Z","dependency_job_id":null,"html_url":"https://github.com/BytesZero/imFreamwork","commit_stats":null,"previous_names":["byteszero/imfreamwork"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BytesZero%2FimFreamwork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BytesZero%2FimFreamwork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BytesZero%2FimFreamwork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BytesZero%2FimFreamwork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BytesZero","download_url":"https://codeload.github.com/BytesZero/imFreamwork/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240286506,"owners_count":19777354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-04T17:19:28.880Z","updated_at":"2025-10-29T22:41:55.090Z","avatar_url":"https://github.com/BytesZero.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# imFreamwork\nim的主界面框架\n\n\n![](https://github.com/yy1300326388/imFreamwork/blob/master/image/device-2015-04-08-141210.png)\n\n- xml布局\n\n```java\n\u003cLinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\" \u003e\n\n    \u003candroid.support.v4.view.ViewPager\n        android:id=\"@+id/main_viewpager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:layout_weight=\"1\"\n        android:background=\"#FFFFFF\" \u003e\n    \u003c/android.support.v4.view.ViewPager\u003e\n\n    \u003cLinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"56dp\"\n        android:orientation=\"horizontal\" \u003e\n        \n        \u003cImageView\n            android:id=\"@+id/tab_img_message\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:src=\"@drawable/tab_message\"\n            android:padding=\"@dimen/tab_padding\"/\u003e\n        \u003cImageView\n            android:id=\"@+id/tab_img_contacts\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:src=\"@drawable/tab_contacts\"\n            android:padding=\"@dimen/tab_padding\"/\u003e\n        \u003cImageView\n            android:id=\"@+id/tab_img_detail\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:src=\"@drawable/tab_detail\"\n            android:padding=\"@dimen/tab_padding\"/\u003e\n        \n    \u003c/LinearLayout\u003e\n\n\u003c/LinearLayout\u003e\n```\n\n\u003e 主要布局就是ViewPager+LinearLayout，支持了左右滑动切换以及点击切换\n\n- MainActivity\n\n```java\npackage com.example.viewpager.main;\n\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport com.example.viewpager.ContactActivity;\nimport com.example.viewpager.DetailActivity;\nimport com.example.viewpager.MessageActivity;\nimport com.example.viewpager.R;\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.os.Bundle;\nimport android.support.v4.app.Fragment;\nimport android.support.v4.app.FragmentActivity;\nimport android.support.v4.app.FragmentManager;\nimport android.support.v4.app.FragmentPagerAdapter;\nimport android.support.v4.view.ViewPager;\nimport android.support.v4.view.ViewPager.OnPageChangeListener;\nimport android.util.Log;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.widget.ImageView;\nimport android.widget.Toast;\n\n@SuppressLint(\"NewApi\")\npublic class MainActivity extends FragmentActivity implements OnClickListener,OnPageChangeListener {\n\t//initView\n\tprivate ViewPager mViewPager;\n\tprivate ImageView tab_img_message,tab_img_contacts,tab_img_detail;\n\t//initData\n\tImageView[] tabs;\n\tList\u003cFragment\u003e fTabs = new ArrayList\u003cFragment\u003e();\n\tprivate FragmentPagerAdapter mAdapter;\n\t\n\t@Override\n\tprotected void onCreate(Bundle savedInstanceState) {\n\t\tsuper.onCreate(savedInstanceState);\n\t\tsetContentView(R.layout.activity_main);\n\t\tinitView();\n\t\tinitData();\n\t}\n\t\n\t/**\n\t * 初始化界面\n\t */\n\tvoid initView(){\n\t\tmViewPager=(ViewPager) findViewById(R.id.main_viewpager);\n\t\tmViewPager.setOnPageChangeListener(this);\n\t\tinitTab();\n\t};\n\t/**\n\t * 初始化界面\n\t */\n\tvoid initTab(){\n\t\ttab_img_message=(ImageView) findViewById(R.id.tab_img_message);\n\t\ttab_img_message.setOnClickListener(this);\n\t\ttab_img_contacts=(ImageView) findViewById(R.id.tab_img_contacts);\n\t\ttab_img_contacts.setOnClickListener(this);\n\t\ttab_img_detail=(ImageView) findViewById(R.id.tab_img_detail);\n\t\ttab_img_detail.setOnClickListener(this);\n\t\ttabs=new ImageView[3];\n\t\ttabs[0]=tab_img_message;\n\t\ttabs[1]=tab_img_contacts;\n\t\ttabs[2]=tab_img_detail;\n\t\ttabs[0].setSelected(true);\n\t}\n\t\n\t/**\n\t * 初始化数据\n\t */\n\tprivate void initData() {\n\t\t// TODO Auto-generated method stub\n\t\t\n\t\t//设置三个界面\n\t\tfTabs.add(new MessageActivity());\n\t\tfTabs.add(new ContactActivity());\n\t\tfTabs.add(new DetailActivity());\n\t\tmAdapter = new FragmentPagerAdapter(getSupportFragmentManager())\n\t\t{\n\n\t\t\t@Override\n\t\t\tpublic int getCount()\n\t\t\t{\n\t\t\t\treturn fTabs.size();\n\t\t\t}\n\n\t\t\t@Override\n\t\t\tpublic Fragment getItem(int position)\n\t\t\t{\n\t\t\t\treturn fTabs.get(position);\n\t\t\t}\n\t\t};\n\t\tmViewPager.setAdapter(mAdapter);\n\t\t\n\t}\n\n\t//tab的点击事件\n\t@Override\n\tpublic void onClick(View v) {\n\t\t// TODO Auto-generated method stub\n\t\tint vid=v.getId();\n\t\tswitch (vid) {\n\t\tcase R.id.tab_img_message:\n\t\t{\n\t\t\tselectedTab(0);\n\t\t\tbreak;\n\t\t}\n\t\tcase R.id.tab_img_contacts:\n\t\t{\n\t\t\tselectedTab(1);\n\t\t\tbreak;\n\t\t}\n\t\tcase R.id.tab_img_detail:\n\t\t{\n\t\t\tselectedTab(2);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\t\n\t\t\tbreak;\n\t\t}\n\t}\n\t/**\n\t * 选择了那一项\n\t * @param select\n\t */\n\tvoid selectedTab(int select){\n\t\tfor (int i = 0; i \u003c 3; i++) {\n\t\t\tif(i==select){\n\t\t\t\ttabs[i].setSelected(true);\n\t\t\t\tmViewPager.setCurrentItem(select, false);\n\t\t\t}else{\n\t\t\t\ttabs[i].setSelected(false);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//viewpager 界面改变\n\t@Override\n\tpublic void onPageScrollStateChanged(int position) {\n\t\t// TODO Auto-generated method stub\n\t\t\n\t}\n\n\t@Override\n\tpublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {\n\t\t// TODO Auto-generated method stub\n\t\t\n\t}\n\n\t@Override\n\tpublic void onPageSelected(int position) {\n\t\t// TODO Auto-generated method stub\n\t\t//界面发生改变时选择当前页面\n\t\tselectedTab(position);\n\t}\n\t\n\t\n\t\n}\n\n```\n\n\u003e 这里一定要继承自FragmentActivity\n\n- 子项Activity\n\n```java\npackage com.example.viewpager;\n\nimport android.os.Bundle;\nimport android.support.v4.app.Fragment;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.View.OnClickListener;\nimport android.view.ViewGroup;\nimport android.webkit.WebView.FindListener;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\n\npublic class MessageActivity extends Fragment {\n\tTextView tv_message;\n\n\t//创建view\n\t@Override\n\tpublic View onCreateView(LayoutInflater inflater, ViewGroup container,\n\t\t\tBundle savedInstanceState) {\n\t\t// TODO Auto-generated method stub\n\t\treturn inflater.inflate(R.layout.activity_message, container, false);\n\t}\n\t\n\t//创建布局\n\t@Override\n\tpublic void onActivityCreated(Bundle savedInstanceState) {\n\t\t// TODO Auto-generated method stub\n\t\tsuper.onActivityCreated(savedInstanceState);\n\t\tinitView();\n\t}\n\t\n\tprivate void initView() {\n\t\t// TODO Auto-generated method stub\n\t\ttv_message=(TextView) getView().findViewById(R.id.message_tv_message);\n\t\ttv_message.setOnClickListener(new OnClickListener() {\n\t\t\t\n\t\t\t@Override\n\t\t\tpublic void onClick(View v) {\n\t\t\t\t// TODO Auto-generated method stub\n\t\t\t\tToast.makeText(getActivity(), \"点击了message\", Toast.LENGTH_SHORT).show();\n\t\t\t}\n\t\t});\n\t}\n\n}\n\n```\n\u003e 这里一定要继承自Fragment，并且原来onCreate(Bundle savedInstanceState)中的代码在onActivityCreated(Bundle savedInstanceState)中写，用法完全一样\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbyteszero%2Fimfreamwork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbyteszero%2Fimfreamwork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbyteszero%2Fimfreamwork/lists"}