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
精彩评论