最近研究了一下Contacts源码,仿照上面自己写了一个TabHostTest程序,现整理如下:
main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> </LinearLayout> </TabHost>
inner.xml文件:
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" /> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </TabHost>
Main.java (主Activity类):
package com.android.test; import android.app.Activity; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.provider.CallLog.Calls; import android.provider.Contacts.Intents.UI; import android.view.Window; import android.widget.TabHost; public class Main extends TabActivity implements TabHost.OnTabChangeListener { private static final int TAB_INDEX_DIALER = 0; private static final int TAB_INDEX_CALL_LOG = 1; private static final int TAB_INDEX_CONTACTS = 2; private static final int TAB_INDEX_FAVORITES = 3; private TabHost mTabHost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Intent intent = getIntent(); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); mTabHost = getTabHost(); mTabHost.setOnTabChangedListener(this); // Setup the tabs setupDialerTab(); setupCallLogTab(); setupContactsTab(); setupFavoritesTab(); setCurrentTab(intent); } public void onTabChanged(String tabId) { Activity activity = getLocalActivityManager().getActivity(tabId); if (activity != null) { activity.onWindowFocusChanged(true); } } private void setupCallLogTab() { // Force the class since overriding tab entries doesn't work Intent intent = new Intent("com.android.phone.action.RECENT_CALLS"); intent.setClass(this, Inner.class); mTabHost.addTab(mTabHost.newTabSpec("call_log") .setIndicator("通话记录", getResources().getDrawable(R.drawable.ic_tab_unselected_recent)) .setContent(intent)); } private void setupDialerTab() { Intent intent = new Intent("com.android.phone.action.TOUCH_DIALER"); intent.setClass(this, Inner.class); mTabHost.addTab(mTabHost.newTabSpec("dialer") .setIndicator("拨号", getResources().getDrawable(R.drawable.ic_tab_unselected_dialer)) .setContent(intent)); } private void setupContactsTab() { Intent intent = new Intent(UI.LIST_DEFAULT); intent.setClass(this, Main.class); mTabHost.addTab(mTabHost.newTabSpec("contacts") .setIndicator("通讯录", getResources().getDrawable(R.drawable.ic_tab_unselected_contacts)) .setContent(intent)); } private void setupFavoritesTab() { Intent intent = new Intent(UI.LIST_STREQUENT_ACTION); intent.setClass(this, Inner.class); mTabHost.addTab(mTabHost.newTabSpec("favorites") .setIndicator("收藏", getResources().getDrawable(R.drawable.ic_tab_unselected_starred)) .setContent(intent)); } /** * Sets the current tab based on the intent's request type * * @param intent Intent that contains information about which tab should be selected */ private void setCurrentTab(Intent intent) { // Dismiss menu provided by any children activities Activity activity = getLocalActivityManager(). getActivity(mTabHost.getCurrentTabTag()); if (activity != null) { activity.closeOptionsMenu(); } // Tell the children activities that they should ignore any possible saved // state and instead reload their state from the parent's intent intent.putExtra("", true); // Choose the tab based on the inbound intent String componentName = intent.getComponent().getClassName(); if (getClass().getName().equals(componentName)) { if (false) { //in a call, show the dialer tab(which allows going back to the call) mTabHost.setCurrentTab(TAB_INDEX_DIALER); } else if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) { // launched from history (long-press home) --> nothing to change } else if (true) { // The dialer was explicitly requested mTabHost.setCurrentTab(TAB_INDEX_DIALER); } } } }
Inner.java类:
package com.android.test; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.view.Window; import android.widget.TabHost; import android.widget.TabWidget; import android.widget.TextView; public class Inner extends TabActivity implements TabHost.OnTabChangeListener { private static final int TAB_INDEX_ALL = 0; private static final int TAB_INDEX_MISSED = 1; private static final int TAB_INDEX_OUTGOING = 2; private static final int TAB_INDEX_RECEIVED = 3; private TabHost mTabHost; private TabWidget mTabWidget; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.inner); mTabHost = getTabHost(); mTabHost.setOnTabChangedListener(this); setupTabs(); mTabWidget = mTabHost.getTabWidget(); mTabWidget.setStripEnabled(false); for (int i = 0; i < mTabWidget.getChildCount(); i++) { TextView tv = (TextView) mTabWidget.getChildAt(i).findViewById( android.R.id.title); tv.setTextColor(this.getResources().getColorStateList( android.R.color.white)); tv.setPadding(0, 0, 0,(int) tv.getTextSize()); tv.setText("Tab" + i); mTabWidget.getChildAt(i).getLayoutParams().height =(int ) (3* tv.getTextSize()); mTabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg); } } public void onTabChanged(String tabId) { } private void setupTabs() { mTabHost.addTab(mTabHost.newTabSpec("all").setIndicator( getString(R.string.inner)).setContent( new Intent(this, Other.class))); mTabHost.addTab(mTabHost.newTabSpec("Missed").setIndicator( getString(R.string.inner)).setContent( new Intent(this, Other.class))); mTabHost.addTab(mTabHost.newTabSpec("Outgoing").setIndicator( getString(R.string.inner)).setContent( new Intent(this, Other.class))); mTabHost.addTab(mTabHost.newTabSpec("Received").setIndicator( getString(R.string.inner)).setContent( new Intent(this, Other.class))); } }
效果图如下:
以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍vue component组件使用方法详解,包括了vue component组件使用方法详解的使用技巧和注意事项,需要的朋友参考一下 什么是组件 按照惯例,引用Vue官网的一句话: 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件
本文向大家介绍JS组件Bootstrap Table使用方法详解,包括了JS组件Bootstrap Table使用方法详解的使用技巧和注意事项,需要的朋友参考一下 最近客户提出需求,想将原有的管理系统,做下优化,通过手机也能很好展现,想到2个方案: a方案:保留原有的页面,新设计一套适合手机的页面,当手机访问时,进入m.zhy.com(手机页面),pc设备访问时,进入www.zhy.com(pc页
本文向大家介绍JS组件Bootstrap Select2使用方法详解,包括了JS组件Bootstrap Select2使用方法详解的使用技巧和注意事项,需要的朋友参考一下 在介绍select组件的时候,之前分享过一篇JS组件中bootstrap multiselect两大组件较量的文章,这两个组件的功能确实很强大,本文分享下select组件的一些用法和特性。 一些通用的单选、多选、分组等功能这里就
本文向大家介绍vue拖拽组件使用方法详解,包括了vue拖拽组件使用方法详解的使用技巧和注意事项,需要的朋友参考一下 前言 pc端开发需要拖拽组件完成列表的顺序交换,一般移动端的UI组件会包含,但是我在用的iview并没有此功能的组件,于是手写一个,实现起来很简单。效果图如下: 可以拖拽完成新排序,点击某一项可以触发相关事件. 关于拖拽 drag & drop 拖放(Drag 和 drop)是 HT
本文向大家介绍bootstrap switch开关组件使用方法详解,包括了bootstrap switch开关组件使用方法详解的使用技巧和注意事项,需要的朋友参考一下 bootstrap中文网上有这么一个bootstrap-switch组件,很实用,看demo学习并记录一下。 Bootstrap-Switch源码地址:https://github.com/nostalgiaz/bootstrap-
本文向大家介绍Vue.js路由组件vue-router使用方法详解,包括了Vue.js路由组件vue-router使用方法详解的使用技巧和注意事项,需要的朋友参考一下 使用Vue.js + vue-router 创建单页应用是非常简单的。只需要配置组件和路由映射,然后告诉 vue-router 在哪里渲染即可。 一、普通方式基本例子: 二、块化机制编程基本例子,以在vue-cli中的使用方法为例