I was create android application with tab and TabHost but users cant switch between tabs via swipe.
I use TabActivity for this app. Users most click on tabs for switch between tabs or activities.
MainActivity.Java :
public class MainActivity extends TabActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources ressources = getResources();
TabHost tabHost = getTabHost();
//Home Intent
Intent intentHome = new Intent().setClass(this, HomeActivity.class);
TabSpec tabSpedHome = tabHost
.newTabSpec("Home")
.setIndicator("",ressources.getDrawable(R.drawable.icon_home_config))
.setContent(intentHome);
//Search Intent
Intent intentSearch = new Intent().setClass(this, SearchActivity.class);
TabSpec tabSpedSearch = tabHost
.newTabSpec("Search")
.setIndicator("",ressources.getDrawable(R.drawable.icon_search_config))
.setContent(intentSearch);
//Archive Intent
Intent intentArchive = new Intent().setClass(this, ArchiveActivity.class);
TabSpec tabSpedArchive = tabHost
.newTabSpec("Archive")
.setIndicator("",ressources.getDrawable(R.drawable.icon_archive_config))
.setContent(intentArchive);
//Download Intent
Intent intentDownload = new Intent().setClass(this, DownloadActivity.class);
TabSpec tabSpedDownload = tabHost
.newTabSpec("Download")
.setIndicator("",ressources.getDrawable(R.drawable.icon_download_config))
.setContent(intentDownload);
//Conctactus Intent
Intent intentConctactus = new Intent().setClass(this, ContactusActivity.class);
TabSpec tabSpedConctactus = tabHost
.newTabSpec("Conctact us")
.setIndicator("",ressources.getDrawable(R.drawable.icon_contactus_config))
.setContent(intentConctactus);
//AddAllTab
tabHost.addTab(tabSpedHome);
tabHost.addTab(tabSpedSearch);
tabHost.addTab(tabSpedArchive);
tabHost.addTab(tabSpedDownload);
tabHost.addTab(tabSpedConctactus);
//Set Default Tab
tabHost.setCurrentTab(0);
}
}
And activity_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"
android:padding="5dp">
<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"
android:padding="5dp" />
</LinearLayout>
</TabHost>
TabActivity has been deprecated for over three years. Please use another tab solution. Particularly if you want tab contents to be able to be swiped, use ViewPager for the tab contents and a tabbed indicator (e.g., PagerTabStrip) for the tabs.
Related
I've got an Activity with a TabHost with 3 tabs. The activity associated with one of the tabs, has a ListView in its layout. It is due to this ListView, that moving between tabs doesn't work (it other tabs do not respond). When I remove the ListView, all the tabs work (i.e they respond to clicks). But I need a ListView within a tab.
My MainActivity has this code:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Resources ressources = getResources();
TabHost tabHost = getTabHost();
// Android tab
Intent intentAndroid = new Intent().setClass(this, ScanQrActivity.class);
TabHost.TabSpec tabSpecAndroid = tabHost
.newTabSpec("Scan QR")
.setIndicator("", ressources.getDrawable(R.drawable.icon_scanqr_config))
.setContent(intentAndroid);
// Apple tab
Intent intentApple = new Intent().setClass(this, HistoryActivity.class);
TabHost.TabSpec tabSpecApple = tabHost
.newTabSpec("History")
.setIndicator("", ressources.getDrawable(R.drawable.icon_history_config))
.setContent(intentApple);
// Windows tab
Intent intentWindows = new Intent().setClass(this, SettingsActivity.class);
TabHost.TabSpec tabSpecWindows = tabHost
.newTabSpec("Settings")
.setIndicator("", ressources.getDrawable(R.drawable.icon_settings_config))
.setContent(intentWindows);
// add all tabs
tabHost.addTab(tabSpecAndroid);
tabHost.addTab(tabSpecApple);
tabHost.addTab(tabSpecWindows);
//set Scan QR tab as default (zero based)
tabHost.setCurrentTab(0);
}
The HistoryActivity has this layout file:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="History"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="#+id/historyLabel"
android:gravity="center_horizontal" />
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/historyList" />
</LinearLayout>
It is due to the ListView in this layout file, that the tabs are unresponsive.
Any help will be appreciated.
I am trying to show the tabs at the bottom of the screen. I have the following code and it is showing tabs at the bottom in design preview and emulator but when I test the code on real device tabs are showing at the top. Can't understand why. I already tried the answers on stackoverflow and other sites like: but no use
Android: Tabs at the BOTTOM
How to show tabs At Bottom rather then at top?
Android having tabs at the bottom of screen?
This is the code:
<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"
android:padding="5dp">
<FrameLayout
android:id="#android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1"/>
<TabWidget
android:id="#android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginBottom="-4dp"
android:gravity="center_vertical|center_horizontal|bottom" />
</LinearLayout>
And this is my activity code:
public class AndroidTabLayoutActivity extends TabActivity {
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost();
// Tab for Photos
TabHost.TabSpec photospec = tabHost.newTabSpec("");
// setting Title and Icon for the Tab
photospec.setIndicator("", getResources().getDrawable(R.drawable.icon_photos_tab));
Intent photosIntent = new Intent(this, PhotosActivity.class);
photospec.setContent(photosIntent);
// Tab for Songs
TabHost.TabSpec songspec = tabHost.newTabSpec("");
songspec.setIndicator("", getResources().getDrawable(R.drawable.icon_songs_tab));
Intent songsIntent = new Intent(this, SongsActivity.class);
songspec.setContent(songsIntent);
//Tab for Lists
TabHost.TabSpec listspec = tabHost.newTabSpec("");
listspec.setIndicator("", getResources().getDrawable(R.drawable.icon_lists_tab));
Intent listIntent = new Intent(this, ListsActivity.class);
listspec.setContent(listIntent);
// Tab for Videos
TabHost.TabSpec videospec = tabHost.newTabSpec("");
videospec.setIndicator("", getResources().getDrawable(R.drawable.icon_videos_tab));
Intent videosIntent = new Intent(this, VideosActivity.class);
videospec.setContent(videosIntent);
// Adding all TabSpec to TabHost
tabHost.addTab(photospec); // Adding photos tab
tabHost.addTab(songspec); // Adding songs tab
tabHost.addTab(listspec); //Adding lists tab
tabHost.addTab(videospec); // Adding videos tab
// Set drawable images to tab
tabHost.getTabWidget().getChildAt(1).setBackgroundColor(Color.parseColor("#1D2023"));
tabHost.getTabWidget().getChildAt(2).setBackgroundColor(Color.parseColor("#1D2023"));
tabHost.getTabWidget().getChildAt(3).setBackgroundColor(Color.parseColor("#1D2023"));
// Set Tab1 as Default tab and change image
tabHost.getTabWidget().setCurrentTab(0);
tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor("#1D2023"));
}
}
any help will be greatly appreciated ...
This is my MainActivity.java:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
Resources ressources = getResources();
TabHost tabHost = getTabHost();
registerReceiver(myBroadcastReceiver1, new IntentFilter(
MYBROADCAST_INTENTFILTER));
Intent intentFriends = new Intent().setClass(this,
TabFriendsActivity.class).addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP);
TabSpec tabFriends = tabHost
.newTabSpec("Friends")
.setIndicator("",
ressources.getDrawable(R.drawable.btn_tab_friends))
.setContent(intentFriends);
// Talks tab
Intent intentTalks = new Intent()
.setClass(this, TabTalksActivity.class).addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP);
TabSpec tabTalks = tabHost
.newTabSpec("Talks")
.setIndicator("",
ressources.getDrawable(R.drawable.btn_tab_talk))
.setContent(intentTalks);
// Add friends tab
Intent intentAddFriends = new Intent().setClass(this,
TabAddFriendsActivity.class).addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP);
TabSpec tabAddFriends = tabHost
.newTabSpec("Add friends")
.setIndicator("",
ressources.getDrawable(R.drawable.btn_tab_addfriend))
.setContent(intentAddFriends);
// Other tab
Intent intentOther = new Intent()
.setClass(this, TabOtherActivity.class).addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP);
TabSpec tabSpecOther = tabHost
.newTabSpec("Other")
.setIndicator("",
ressources.getDrawable(R.drawable.btn_tab_other))
.setContent(intentOther);
// add all tabs
tabHost.addTab(tabFriends);
tabHost.addTab(tabTalks);
tabHost.addTab(tabAddFriends);
tabHost.addTab(tabSpecOther);
// set Windows tab as default (zero based)
tabHost.setCurrentTab(0);
TabWidget tabs = (TabWidget) findViewById(android.R.id.tabs);
badge = new BadgeView(this, tabs, 1);
badge.setText("new");
}
I want to show text "new" in tabTalks when I got message from GCM by BroadcastReceiver. I try to debug and got information of "intentChatting" that means BroadcastReceiver is working, but text "new" not show in tabTalks icon.
private BroadcastReceiver myBroadcastReceiver1 = new BroadcastReceiver() {
#Override
public void onReceive(Context context, Intent intent) {
String intentChatting = intent.getExtras().get("Intent").toString();
if (intentChatting != null) {
pushBadge(intentChatting);
}
}
};
private void pushBadge(String intentChating) {
badge.show();
}
And this is my main_activity.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"
android:background="#f2f2f2">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="#android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="462dp"
android:layout_weight="0.07">
</FrameLayout>
<TabWidget
android:id="#android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#000" />
</LinearLayout>
</TabHost>
So, what wrong with my code. I want to show badge in tabhost when receiver message from GCMby BroadcastReceiver. But it's not work!
Any help much appreciated! Thanks.
I use a Tab Layout display two .swf files and a imageView in three tabs. However, when I wanted to change to imageView from a swf tab. The swf still exits.
//TabActivity
public class TabSwfActivity 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(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, OperatorActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("artists").setIndicator("artists")
.setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
intent = new Intent().setClass(this, LearningActivity.class);
spec = tabHost.newTabSpec("albums").setIndicator("albums")
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, QuestionActivity.class);
spec = tabHost.newTabSpec("songs").setIndicator("songs")
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(2);
}
}
//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" />
</LinearLayout>
</TabHost>
//swf tab learningActivity.java
public class LearningActivity extends Activity {
private WebView mWebView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.learninglayout);
String url ="file:///android_asset/sample/simple.swf";
mWebView=(WebView) findViewById(R.id.webView1);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.loadUrl(url);
}
}
// learning.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"
>
<WebView android:id="#+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</WebView>
</LinearLayout>
//picture tab
public class QuestionActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.questionlayout);
}
}
I have an application with 3 tabs. I have made the xml files to describe the layout and it works perfectly. But I'm stuck at this point. My tabs are A B C. I want when I click on tab A, the tabs B C to be replaced by another tab D. Are there any solutions for this?
<!-- language: java -->
public class AndroidTabLayoutActivity extends TabActivity {
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost();
TabHost tabHost2 = getTabHost();
// Tab for Photos
TabSpec photospec = tabHost.newTabSpec("Photos");
photospec.setIndicator("Photos", getResources().getDrawable(R.drawable.icon_photos_tab));
Intent photosIntent = new Intent(this, LoginActivity.class);
photospec.setContent(photosIntent);
// Tab for Songs
TabSpec songspec = tabHost.newTabSpec("Songs");
// setting Title and Icon for the Tab
songspec.setIndicator("Songs", getResources().getDrawable(R.drawable.icon_songs_tab));
Intent songsIntent = new Intent(this, SettingsActivity.class);
songspec.setContent(songsIntent);
// Tab for Videos
TabSpec videospec = tabHost.newTabSpec("Videos");
videospec.setIndicator("Videos", getResources().getDrawable(R.drawable.icon_videos_tab));
Intent videosIntent = new Intent(this, AboutActivity.class);
videospec.setContent(videosIntent);
// Adding all TabSpec to TabHost
tabHost.addTab(photospec); // Adding photos tab
tabHost.addTab(songspec); // Adding songs tab
tabHost.addTab(videospec); // Adding videos tab
}
}
<!-- language: 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"/>
</LinearLayout>
</TabHost>