android - 如何将 TabHost 保持在底部?

标签 android android-tabhost

我是 Android 的新手,我刚刚创建了我的第一个 TabHost。这是 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:weightSum="1">

        <TextView
            style="@style/NormalFont"
            android:text="@string/stats"
            android:layout_weight="0.10"/>


        <TabHost
            android:id="@+id/TabHostStats"
            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">
                        <ScrollView
                            android:id="@+id/ScrollViewSmileyFilter"
                            android:scrollbars="vertical"
                            android:layout_width="fill_parent"
                            android:layout_height="fill_parent">
                            <TableLayout
                                android:id="@+id/TableLayoutSmileyFilter"
                                android:layout_width="fill_parent"
                                android:layout_height="fill_parent"
                                android:stretchColumns="*">
                            </TableLayout>
                        </ScrollView>
                        <ScrollView
                            android:id="@+id/ScrollViewADFilter"
                            android:scrollbars="vertical"
                            android:layout_width="fill_parent"
                            android:layout_height="fill_parent">
                            <TableLayout
                                android:id="@+id/TableLayoutADFilter"
                                android:layout_width="fill_parent"
                                android:layout_height="fill_parent"
                                android:stretchColumns="*">
                            </TableLayout>
                        </ScrollView>
                    </FrameLayout>
            </LinearLayout>
        </TabHost>
</LinearLayout>

这是 Activity 的代码:

 public class StatsActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stats); 

        TabHost host = (TabHost) findViewById(R.id.TabHostStats);
        host.setup();


        /** Dieser Code generiert den Tag für die Smileyfilter Stats**/

        TabSpec SmileyFilterTab = host.newTabSpec("sftab");
        SmileyFilterTab.setIndicator(getResources().getString(R.string.sfstats));
        SmileyFilterTab.setContent(R.id.ScrollViewSmileyFilter);
        host.addTab(SmileyFilterTab);

        /**Dieser Code generiert den Tag für die Auto Delete Filter Stats **/

        TabSpec AutoDeleteTab = host.newTabSpec("adtab");
        AutoDeleteTab.setIndicator(getResources().getString(R.string.adstats));
        AutoDeleteTab.setContent(R.id.ScrollViewADFilter);
        host.addTab(AutoDeleteTab);



    }
}

所以我的 TabHosts 的 to 寄存器在最上面。但是我想要他们在按钮上,我该怎么做呢?还有我如何以及在哪里可以更改它们的颜色。我希望它们未被点击时为黑色,如果它们被点击则为蓝色。

最佳答案

我见过很多实现。但我最喜欢这些人。

enter image description here

他有一个 tutorial和可下载的 sample project .

编辑 经过这么多年,这种联系似乎已经断开了。所以这是代码。 这是一个 alternate link为了以防万一,这是代码。

图片

ebay.png flickr.png skype.png you_tube.png

TabsDemoActivity.java

package com.bakhtiyor.android.tabs;
import android.app.TabActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TabHost;
import android.widget.TextView;
public class TabsDemoActivity extends TabActivity implements TabHost.TabContentFactory {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("ebay").setIndicator("eBay").setContent(this));
tabHost.addTab(tabHost.newTabSpec("flickr").setIndicator("Flickr").setContent(this));
tabHost.addTab(tabHost.newTabSpec("skype").setIndicator("skype").setContent(this));
tabHost.addTab(tabHost.newTabSpec("you_tube").setIndicator("YouTube").setContent(this));
    setupUI();
}
@Override
public View createTabContent(String tag) {
    TextView tv = new TextView(this);
    tv.setTextColor(Color.BLACK);
    tv.setTextSize(20);
    if (tag.equals("flickr")) {
        tv.setText(R.string.flickr);
    } else if (tag.equals("ebay")) {
        tv.setText(R.string.ebay);
    } else if (tag.equals("skype")) {
        tv.setText(R.string.skype);
    } else if (tag.equals("you_tube")) {
        tv.setText(R.string.you_tube);
    }
    return tv;
}
private void setupUI() {
    RadioButton rbFirst = (RadioButton) findViewById(R.id.first);
    RadioButton rbSecond = (RadioButton) findViewById(R.id.second);
    RadioButton rbThird = (RadioButton) findViewById(R.id.third);
    RadioButton rbFourth = (RadioButton) findViewById(R.id.fourth);
    rbFirst.setButtonDrawable(R.drawable.ebay);
    rbSecond.setButtonDrawable(R.drawable.flickr);
    rbThird.setButtonDrawable(R.drawable.skype);
    rbFourth.setButtonDrawable(R.drawable.you_tube);
    RadioGroup rg = (RadioGroup) findViewById(R.id.states);
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        public void onCheckedChanged(RadioGroup group, final int checkedId) {
            switch (checkedId) {
            case R.id.first:
                getTabHost().setCurrentTab(0);
                break;
            case R.id.second:
                getTabHost().setCurrentTab(1);
                break;
            case R.id.third:
                getTabHost().setCurrentTab(2);
                break;
            case R.id.fourth:
                getTabHost().setCurrentTab(3);
                break;
            }
        }
    });
}
}

ma​​in.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">
        <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:padding="20dip" android:background="#fff"/>

            <RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:checkedButton="@+id/first" android:id="@+id/states">
                <RadioButton android:id="@+id/first" android:background="@drawable/button_radio" android:width="80dip" android:height="70dip" />
                <RadioButton android:id="@+id/second" android:background="@drawable/button_radio" android:width="80dip" android:height="70dip" />
                <RadioButton android:id="@+id/third" android:background="@drawable/button_radio" android:width="80dip" android:height="70dip" />
                <RadioButton android:id="@+id/fourth" android:background="@drawable/button_radio" android:width="80dip" android:height="70dip" />
            </RadioGroup>

        <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" android:visibility="gone" />
    </LinearLayout>
</TabHost>

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, TabsDemoActivity!</string>
    <string name="app_name">Tabs</string>
    <string name="flickr">Flickr is an image and video hosting website, web services suite, and online community platform. In addition to being a popular website for users to share personal photographs, the service is widely used by bloggers as a photo repository. As of October 2009, it claims to host more than 4 billion images.</string>
    <string name="ebay">eBay Inc. is an American Internet company that manages eBay.com, an online auction and shopping website in which people and businesses buy and sell a broad variety of goods and services worldwide.</string>
    <string name="skype">Skype is a software application that allows users to make voice calls over the Internet. Calls to other users of the service and, in some countries, to free-of-charge numbers, are free, while calls to other landlines and mobile phones can be made for a fee. Additional features include instant messaging, file transfer and video conferencing.</string>
    <string name="you_tube">YouTube is a video sharing website on which users can upload and share videos. Three former PayPal employees created YouTube in February 2005. In November 2006, YouTube, LLC was bought by Google Inc. for $1.65 billion, and is now operated as a subsidiary of Google.</string>
</resources>

button_radio.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_window_focused="false" android:drawable="@drawable/selected" />
    <item android:state_checked="false" android:state_window_focused="false" android:drawable="@drawable/unselected" />
    <item android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/selected" />
    <item android:state_checked="false" android:state_pressed="true" android:drawable="@drawable/unselected" />
    <item android:state_checked="true" android:state_focused="true" android:drawable="@drawable/selected" />
    <item android:state_checked="false" android:state_focused="true" android:drawable="@drawable/unselected" />
    <item android:state_checked="false" android:drawable="@drawable/unselected" />
    <item android:state_checked="true" android:drawable="@drawable/selected" />
</selector>

selected.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <gradient android:startColor="#FFAAAAAA" android:endColor="#FF333333" android:angle="270" />
</shape>

unselected.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient android:startColor="#FF444444" android:endColor="#FF000000" android:angle="270" />
</shape>

编辑 这是其他几个链接

android tabwidget

http://www.anddev.org/code-snippets-for-android-f33/iphone-tabs-for-android-t14678.html

关于android - 如何将 TabHost 保持在底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7171242/

相关文章:

android - gradle copy as doLast 不工作

android - 错误 :Execution failed for task ':app:transformClassesWithDexForDebug' . > com.android.build.api.transform.TransformException :. .非零退出值 3

android - Android 中 TabHost 中每个 fragment 的自定义返回堆栈

android - 如何在 Android 应用程序中创建标签并动态添加标签(取决于匹配的用户)

android - 创建具有自定义设计的选项卡小部件

android - 百分比框架布局 : You must supply a layout_width attribute

android - 是否可以在锁定屏幕上创建类似 Google Play 音乐的小部件?

java - 如何创建可序列化对象并传递给 bundle.putSerializable(key, value)

android - 选项卡 View 问题,无法设置内容 View

android - 在 android 中调整 tabhost 中的多个选项卡?