自定义Tabhost里的TabWidget布局

  自定义Tabhost里的TabWidget布局 收藏

    大家都知道Tabhost中Tabwidget的布局是图标在上,文字在下的垂直布局。比如通讯录的布局。

自定义Tabhost里的TabWidget布局_第1张图片

这种布局在手机上的竖屏上用得最多,但在横屏则显得水平分布得不够紧凑。如何实现自定义的布局呢?

首先要理解Tabwidget.

TabWidget 理解:
1. TabWidget 为 horizontal 的 LinearLayout
2. 且 其包含的标签又是一个RelativeLayout
3. 每个标签RelativeLayout 里面包含2个View: TextView ImageView

有了这个理解,可以估计得到

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="horizontal"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <RelativeLayout  
  8.     android:orientation="vertical"  
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="wrap_content">  
  11.     <ImageView  />  
  12.     <TextView  />  
  13. </RelativeLayout>  
  14. <RelativeLayout  
  15.     android:orientation="vertical"  
  16.     android:layout_width="fill_parent"  
  17.     android:layout_height="wrap_content">  
  18.     <ImageView  />  
  19.     <TextView  />  
  20. </RelativeLayout>  
  21. ...多个RelativeLayout  
  22. </LinearLayout>  

有了这个布局,就可以自定义自己的布局了,以图片在左,文字在右为例。

  1. private void addToTabHost(String name, int image, int number) {  
  2.     // TODO Auto-generated method stub  
  3.     LinearLayout ll = (LinearLayout) mTabHost.getChildAt(0);  
  4.     TabWidget tw = (TabWidget) ll.getChildAt(0);  
  5.     RelativeLayout rl = (RelativeLayout) tw.getChildAt(number);  
  6.     rl.addView(composeLayout(name, image), new LinearLayout.LayoutParams(  
  7.             LinearLayout.LayoutParams.FILL_PARENT,  
  8.             LinearLayout.LayoutParams.FILL_PARENT));  
  9. }  
  10. private View composeLayout(String name, int image) {  
  11.     LinearLayout layout = new LinearLayout(this);  
  12.     layout.setGravity(Gravity.CENTER);  
  13.     layout.setOrientation(LinearLayout.HORIZONTAL);  
  14.     ImageView iv = new ImageView(this);  
  15.     iv.setImageResource(image);  
  16.     layout.addView(iv, new LinearLayout.LayoutParams(  
  17.             LinearLayout.LayoutParams.WRAP_CONTENT,  
  18.             LinearLayout.LayoutParams.FILL_PARENT));  
  19.     TextView tv = new TextView(this);  
  20.     tv.setGravity(Gravity.CENTER);  
  21.     tv.setSingleLine(true);  
  22.     tv.setPadding(10000);  
  23.     tv.setTextSize(18);  
  24.     tv.setText(name);  
  25.     layout.addView(tv, new LinearLayout.LayoutParams(  
  26.             LinearLayout.LayoutParams.WRAP_CONTENT,  
  27.             LinearLayout.LayoutParams.FILL_PARENT));  
  28.     return layout;  
  29. }  
 

这样就实现了图片在左,文字在右的布局。

效果图:

你可能感兴趣的:(tabwidget)