开发者

Custom tab in android - getting error while using "setIndicator"

i am trying to create a custom tab in my android app and i got some sample codes but that code is showing errors in setIndicator method...here is my code

error i am getting is - The method setIndicator(CharSequence) in the type TabHost.TabSpec is not applicable for the arguments (TextView)

package com.myapp;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TabHost.TabContentFactory;
import android.widget.TabHost.TabSpec;

//Custom Tabs
public class MyActivity extends Activity {

int tabHeight = 40;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
LinearLayout main = new LinearLayout(this);
main.setOrientation(LinearLayout.VERTICAL);
setContentView(main);

TabHost tabs = new TabHost(this);
tabs.setId(android.R.id.tabhost);
main.addView(tabs);

TabWidget tabWidget = new TabWidget(this);
tabWidget.setId(android.R.id.tabs);
tabs.addView(tabWidget);

FrameLayout tabContent = new FrameLayout(this);
tabContent.setId(android.R.id.tabcontent);
tabContent.setPadding(0, tabHeight, 0, 0);
tabs.addView(tabContent);

TextView content = new TextView(this);
content.setText("This is the Frame Content");
content.setId(100);
tabs.setup();

TabSpec tspec1 = tabs.newTabSpec("Tab1");
tspec1.setIndicator(makeTabIndicator("One"));
tspec1.setContent(new PreExistingViewFactory(content));
tabs.addTab(tspec1);

TabSpec tspec2 = tabs.newTabSpec("Tab2");
tspec2.setIndicator(makeTabIndicator("Two"));
tspec2.setContent(new PreExistingViewFactory(content));
tabs.addTab(tspec2);

TabSpec tspec3 = tabs.newTabSpec("Tab3");
tspec3.setIndicator(makeTabIndicator("Three"));
tspec3.setContent(new PreExistingViewFactory(content));
tabs.addTab(tspec3);

}

private TextView makeTabIndicator(String text){

TextView tabView = new TextView(this);
LayoutParams lp3 = new LayoutParams(LayoutParams.WRAP_CONTENT, tabHeight, 1);
lp3.setMargins(1, 0, 1, 0);
tabView.setLayoutParams(lp3);
tabView.setText(text);
tabView.setTextColor(Color.WHITE);
tabView.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
tabView.setBackgroundDrawable( getResources().getDrawable(R.drawable.tab_indicator));
tabView.setPadding(13, 0, 13, 0);
return tabView;

}



class PreExistingViewFactory implements TabContentFactory{

private final View preExisting;
protected PreExistingViewFactory(View view){
preExisting = view;
}

public View createTabContent(String tag) {
r开发者_Python百科eturn preExisting;
}

}

}

anybody pls help me to fix this issue ...

thanx in advance .. kris


Unfortunately the method setIndicator(View view) only works for Android 1.6 and up (version 4). If you are supporting Android 1.5 (version 3) you can only use a String/CharSequence as an indicator using the setIndicator(CharSequence label).

See the reference: http://developer.android.com/reference/android/widget/TabHost.TabSpec.html#setIndicator

Notice that the method setIndicator(View view) is "Since: API Level 4"


Use the following code for tabs in android

Java File

public class Main extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main1);

        TabHost tabHost = getTabHost(); // The activity TabHost
        TabHost.TabSpec spec; // Reusable TabSpec for each tab
        Intent intent; // Reusable Intent for each tab

        // Create an Intent to launch an Activity for the Movies tab.
        intent = new Intent().setClass(this, BarActivity.class);
        // Initialise a TabSpec for the Movies tab and add it to the TabHost.
        spec = tabHost.newTabSpec("Nights").setIndicator("Nights").setContent(intent);
        tabHost.addTab(spec);

        // Do the same things for the Theatres tab.
        intent = new Intent().setClass(this, BarActivity.class);
        spec = tabHost.newTabSpec("Weeks").setIndicator("Weeks").setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, BarActivity.class);
        spec = tabHost.newTabSpec("Months").setIndicator("Months").setContent(intent);
        tabHost.addTab(spec);
        getTabHost().getTabWidget().getChildAt(0).setLayoutParams(new 
                LinearLayout.LayoutParams(100,50)); 
        getTabHost().getTabWidget().getChildAt(1).setLayoutParams(new 
                LinearLayout.LayoutParams(100,50)); 
        getTabHost().getTabWidget().getChildAt(2).setLayoutParams(new 
                LinearLayout.LayoutParams(100,50)); 
        tabHost.setCurrentTab(0);
    }
}

and main1.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">
    </FrameLayout>
</LinearLayout>
</TabHost>


I've found this tutorial very good:

http://kpbird.blogspot.com/2011/05/androidbottom-tabbar-control.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜