生活随笔
收集整理的这篇文章主要介绍了
实现、设置-Android TabWidget-by小雨
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!
首先先看一个小例子,接着讲授理原
TabTest.java view plaincopy to clipboardprint? package org.hualang.tab; import android.app.Activity; import android.app.TabActivity; import android.graphics.Color; import android.os.Bundle; import android.widget.TabHost; import android.widget.Toast; import android.widget.TabHost.OnTabChangeListener; public class TabTest extends TabActivity { TabHost tabhost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tabhost = getTabHost(); tabhost.addTab(tabhost.newTabSpec("tab1") .setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1)) .setContent(R.id.text1)); tabhost.addTab(tabhost.newTabSpec("tab2") .setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2)) .setContent(R.id.text2)); tabhost.addTab(tabhost.newTabSpec("tab3") .setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3)) .setContent(R.id.text3)); tabhost.setBackgroundResource(R.drawable.bg0); tabhost.setCurrentTab(0); tabhost.setOnTabChangedListener(new OnTabChangeListener() { public void onTabChanged(String tabId) { Toast toast=Toast.makeText(getApplicationContext(), "现在是"+tabId+"签标", Toast.LENGTH_SHORT); toast.show(); } }); } }
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="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="选项卡1" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="选项卡2" /> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="选项卡3" /> </FrameLayout> </LinearLayout> </TabHost>
Android TabWidget的实现可以分为二种,一种是应用准标TabActivity实现,另外一种可以自定义方法实现,种这方法实现起来对相较比复杂,但对于要实现较比多元化的view是很好的,这里我们简略看下源码
一、通用做法
继承TabActivity,实现自己的TabActivity
[java] view plaincopy import android.app.Activity; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; public class TabWidgetDemo2 extends TabActivity implements OnTabChangeListener { private TabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tabwidgetdemo2); mTabHost = getTabHost(); mTabHost.setOnTabChangedListener(this); setupTab1(); setupTab2(); mTabHost.setCurrentTab(1); } private void setupTab2() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.setClass(this, TabWidget2.class); mTabHost.addTab(mTabHost.newTabSpec("TabWidget2") .setIndicator("TabWidget2",getResources().getDrawable(R.drawable.icon)) .setContent(intent)); } private void setupTab1() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.setClass(this, TabWidget1.class); mTabHost.addTab(mTabHost.newTabSpec("TabWidget1") .setIndicator("TabWidget1",getResources().getDrawable(R.drawable.icon)) .setContent(intent)); } public void onTabChanged(String tabId) { Activity activity = getLocalActivityManager().getActivity(tabId); if (activity != null) { activity.onWindowFocusChanged(true); } } }
二个tab对应的Activity,先看TabWidget1,这个类在第二种实现中还会用到,因此我们可以看到对Action的判断。
[java] view plaincopy import android.app.Activity; import android.content.Intent; import android.os.Bundle; import com.android.exampledemo.R; import com.android.exampledemo.util.DemoUtils; public class TabWidget1 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = this.getIntent(); if (intent.getAction().equals(Intent.ACTION_MAIN)){ setContentView(R.layout.tabwidgetdemo2_1); } else { setContentView(R.layout.tabwidget_1); DemoUtils.updateButtonBar((Activity)this,R.id.contactstab); } } }
再看一下TabWidget2,这个Activity我们在第二种实现方法中也会用到。
[java] view plaincopy import com.android.exampledemo.R; import com.android.exampledemo.util.DemoUtils; import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class TabWidget2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = this.getIntent(); if (intent.getAction().equals(Intent.ACTION_MAIN)){ setContentView(R.layout.tabwidgetdemo2_1); } else { setContentView(R.layout.tabwidget_2); DemoUtils.updateButtonBar((Activity)this,R.id.groupstab); } } }
最后就是各个Activity对应的layout
1.tabwidgetdemo2.xml
[xhtml] view plaincopy <?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="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="68dip" android:paddingLeft="1dip" android:paddingRight="1dip" android:paddingTop="4dip" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" /> </LinearLayout> </TabHost>
2.二个sub tab对应的layout
[xhtml] view plaincopy Layout1 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFF"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tab Widget first"> </TextView> </LinearLayout> Layout2 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFF"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tab Widget second"> </TextView> </LinearLayout>
方法2:
先创立一个Activity (TabWidgetDemo)
[c-sharp] view plaincopy 1.TabWidgetDemo.java import com.android.exampledemo.R; import com.android.exampledemo.util.DemoUtils; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; public class TabWidgetDemo extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences prefs = getSharedPreferences(getPackageName(), Context.MODE_PRIVATE); int activeTab = prefs.getInt("activetab", R.id.contactstab); if (activeTab != R.id.contactstab && activeTab != R.id.groupstab) { activeTab = R.id.contactstab; } DemoUtils.activateTab(this, activeTab); } } 2.DemoUtils import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.view.View; import android.widget.TabWidget; import com.android.exampledemo.R; public class DemoUtils { static int sActiveTabIndex = -1; public static void activateTab(Activity a,int active_id){ Intent intent = new Intent(Intent.ACTION_PICK); switch (active_id) { case R.id.contactstab: intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/tb_contacts"); break; case R.id.groupstab: intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/tb_groups"); break; default: return; } intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); a.startActivity(intent); a.finish(); a.overridePendingTransition(0,0); } public static void updateButtonBar(Activity a, int highlight) { final TabWidget ll = (TabWidget) a.findViewById(R.id.buttonbar); for (int i = ll.getChildCount() - 1; i >= 0; i--) { View v = ll.getChildAt(i); boolean isActive = (v.getId() == highlight); if (isActive) { ll.setCurrentTab(i); sActiveTabIndex = i; } v.setTag(i); v.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { int id = v.getId(); if (id == ll.getChildAt(sActiveTabIndex).getId()) { return; } activateTab((Activity)ll.getContext(),id ); ll.setCurrentTab((Integer) v.getTag()); }}); } } }
二个Tab sub activity前一方法中经已给出,这里我们只需要看一下layout的实现就能够了
1>buttonbar.xml
[xhtml] view plaincopy <?xml version="1.0" encoding="utf-8"?> <TabWidget xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/buttonbar" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/contactstab" android:focusable="true" android:drawableTop="@drawable/icon" android:background="@drawable/buttonbarbackground" android:text="Contacts" android:textColor="@color/tab_indicator_text" android:textAppearance="?android:attr/textAppearanceSmall" android:paddingTop="7dip" android:paddingBottom="2dip" android:gravity="center" android:layout_weight="1" android:layout_marginLeft="-3dip" android:layout_marginRight="-3dip" android:layout_width="match_parent" android:layout_height="84dip" android:singleLine="true" android:ellipsize="marquee" /> <TextView android:id="@+id/groupstab" android:focusable="true" android:drawableTop="@drawable/icon" android:background="@drawable/buttonbarbackground" android:text="Group" android:textColor="@color/tab_indicator_text" android:textAppearance="?android:attr/textAppearanceSmall" android:paddingTop="7dip" android:paddingBottom="2dip" android:gravity="center" android:layout_weight="1" android:layout_marginLeft="-3dip" android:layout_marginRight="-3dip" android:layout_width="match_parent" android:layout_height="84dip" android:singleLine="true" android:ellipsize="marquee" /> </TabWidget>
2>tabwidget_1.xml
[xhtml] view plaincopy <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <include layout="@layout/battonbar" /> <ExpandableListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:footerDividersEnabled="true" android:fadeScrollbars="true" android:drawSelectorOnTop="true"> </ExpandableListView> </LinearLayout>
3> tabwidget_2.xml
[xhtml] view plaincopy <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <include layout="@layout/battonbar" /> </LinearLayout>
文章结束给大家分享下程序员的一些笑话语录: 真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。
转载于:https://www.cnblogs.com/jiangu66/archive/2013/04/14/3020375.html
总结
以上是生活随笔为你收集整理的实现、设置-Android TabWidget-by小雨的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。