Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create custom api for tabhost and tabwidget?

I have created scrollable tab bar, using tabhost, tabwidget, and horizontalscrollbar which is layout_gravity is bottom. Now, i want to create custom API for that, so any one can use the api change the textsize, height, width etc..,according their reqiurment.

Tabbar.java

package com.tabbar.project;

import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TabHost;

public class Tabbar extends TabActivity {  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   
        Resources res = getResources();

        // TabHost will have Tabs
        TabHost tabHost = getTabHost();


        /* TabSpec used to create a new tab. 
         * By using TabSpec only we can able to setContent to the tab.
         * By using TabSpec setIndicator() we can set name to tab. 
         * TabSpec setContent() is used to set content for a particular tab.*/

        //adding tabbar items
        TabHost.TabSpec spec;   
        Intent intent;
        intent = new Intent().setClass(this, FirstActivity.class);
        spec = tabHost.newTabSpec("first").setIndicator("Contact", res.getDrawable(R.drawable.contact_img)).setContent(intent);
        tabHost.addTab(spec);



        intent = new Intent().setClass(this, SecondActivity.class);
        spec = tabHost.newTabSpec("second").setIndicator("Dial",  res.getDrawable(R.drawable.dial_img)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, ThirdActivity.class);
        spec = tabHost.newTabSpec("third").setIndicator("Movie", res.getDrawable(R.drawable.movie_img)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, FourthActivity.class);
        spec = tabHost.newTabSpec("fourth").setIndicator("gellary", res.getDrawable(R.drawable.gellary_img)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, FifthActivity.class);
        spec = tabHost.newTabSpec("fifth").setIndicator("Opera", res.getDrawable(R.drawable.opera_img)).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, SixthActivity.class);
        spec = tabHost.newTabSpec("sixth").setIndicator("Contacts", res.getDrawable(R.drawable.contact_img)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, SeventhActivity.class);
        spec = tabHost.newTabSpec("seventh").setIndicator("Dial",  res.getDrawable(R.drawable.dial_img)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, EightActivity.class);
        spec = tabHost.newTabSpec("eight").setIndicator("Movie", res.getDrawable(R.drawable.movie_img)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, NinthActivity.class);
        spec = tabHost.newTabSpec("ninth").setIndicator("Gellary", res.getDrawable(R.drawable.gellary_img)).setContent(intent);
        tabHost.addTab(spec);


        intent = new Intent().setClass(this, TenthActivity.class);
        spec = tabHost.newTabSpec("tenth").setIndicator("Opera", res.getDrawable(R.drawable.opera_img)).setContent(intent);
        tabHost.addTab(spec);

        // set the width of tab 
        for(int i=0;i<tabHost.getTabWidget().getChildCount();i++){
             tabHost.getTabWidget().getChildAt(i).getLayoutParams().width = 64;
        }



        //provide a method/function for setting height
       // set the Height of tab 
        for(int i=0;i<tabHost.getTabWidget().getChildCount();i++){
         tabHost.getTabWidget().getChildAt(i).getLayoutParams().height = 60;
       }

        // set the background color of tab (#50000000-transparent,#7392B5) 
         for(int i=0;i<tabHost.getTabWidget().getChildCount();i++){
             tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#50000000")); 
         }

         //tabHost.getTabWidget().getChildAt(0).;
         tabHost.setCurrentTab(0);
    }


}

main.xml

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp"   
        android:background="@drawable/zero"   
         >
          <TabHost android:id="@android:id/tabhost" xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="fill_parent" 
                 android:layout_height="fill_parent"
                 android:visibility="visible">

            <HorizontalScrollView
            android:layout_width="wrap_content" 
            android:layout_height="fill_parent"
            android:scrollbars="none">   

                 <TabWidget android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:id="@android:id/tabs"
                            android:layout_gravity="bottom"
                            android:tabStripEnabled="false"
                            />


                 </HorizontalScrollView> 

                <FrameLayout android:layout_width="match_parent"
                             android:layout_height="match_parent"
                              android:id="@android:id/tabcontent"/> 

        </TabHost>  


</LinearLayout>
like image 433
manoj Avatar asked Nov 14 '22 16:11

manoj


1 Answers

Firstly, decide what list of features you want to support. It seems like you have some ideas already. Then create public methods in your Tabbar class that allow people to customize it.

An idea could be

public void setTabHeight(int dip) {
    //Code to set tab height goes here
}

Then people can have access to your Tabber and the functions you want them to have.

The amount of functionality and the generality of Tabbar's use will be up to your imagination and design skills.

like image 56
Mike T Avatar answered Dec 17 '22 02:12

Mike T