android - 在 Android 中创建较小的标签

标签 android user-interface android-tabhost

我正在尝试在 android 中创建较小的选项卡——但我似乎无法让它工作,因为当我创建一个较小的选项卡时发生的所有事情是它显示较大的选项卡——但没有可绘制对象。

现在这是我的选项卡布局代码——但由于某种原因高度没有换行——它只是达到了 Android 通常的布局高度。

<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>

如果有人可以帮助我创建类似 Facebook 应用程序的东西,那就太好了——我认为它看起来非常干净,我很乐意实现类似的东西:

最佳答案

嗯,这比我想象的要复杂得多,但是,尽管如此,这应该能让您基本实现所需的外观......

 TabHost             host       = getTabHost();
 TabSpec             spec       = null;
 TextView            tab1       = null,
                     tab2       = null;
 Intent              intent     = null;
 Resources           resources  = getResources();
 XmlResourceParser   parser     = null;
 ColorStateList      text       = null;
 StateListDrawable[] drawables  = new StateListDrawable[2];
 int[]               selected   = {STATE_SELECTED},
                     unselected = {STATE_UNSELECTED};
 Color               selectedColor = Color.argb(255, 255, 255, 255),
                     defaultColor  = Color.argb(255, 119, 119, 119);

 // Load the colour lists.
 parser = resources.getXml(R.color.tab_text);
 text   = ColorStateList.createFromXml(getResources(), parser);

 // Add an initial tab.
 ...Create Tab Contents Here...
 spec = host.newTabSpec("tab1");
 tab1 = new TextView(this);
 tab1.setText(R.string.all_tab_title);
 tab1.setGravity(android.view.Gravity.CENTER);
 tab1.setTextSize(18.0f);
 tab1.setTextColor(text);
 spec.setIndicator(tab1);
 spec.setContent(intent);
 host.addTab(spec);

 // Add a second tab.
 ...Create Tab Contents Here...
 spec = host.newTabSpec("tab2");
 tab2 = new TextView(this);
 tab2.setText(R.string.category_tab_title);
 tab2.setGravity(android.view.Gravity.CENTER);
 tab2.setTextSize(18.0f);
 tab2.setTextColor(text);
 spec.setIndicator(tab2);
 spec.setContent(intent);
 host.addTab(spec);

 // Set the background drawable for the tabs and select the first tab.
 drawables[0] = new StateListDrawable();
 drawables[0].addState(selected, new ColorDrawable(selectedColor));
 drawables[0].addState(unselected, new ColorDrawable(defaultColor));
 drawables[1] = new StateListDrawable();
 drawables[1].addState(selected, new ColorDrawable(selectedColor));
 drawables[1].addState(unselected, new ColorDrawable(defaultColor));
 tab1.setBackgroundDrawable(drawables[0]);
 tab2.setBackgroundDrawable(drawables[1]);
 host.setCurrentTab(0);

但这不会考虑制表符边框或元素之间的间距。您还需要 ./res/color 目录中的颜色状态列表定义...

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true" android:color="#ff000000" />
   <item android:state_selected="false" android:color="#ffaaaaaa" />
   <item android:color="#ffffffff"/>
</selector>

希望对您有所帮助。

关于android - 在 Android 中创建较小的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538946/

相关文章:

iphone - 我可以通过浏览器和 JavaScript 以编程方式访问智能手机的传感器吗?

android - 为什么 list 中不允许 'xxhdpi' 的 screenDensity 参数值 [Restricting tablets]

user-interface - 如何设计好的 "progress panel"

java - Tabhost 中的 Android FragmentActivity?

android - 当我升级 android.support.v4 时 Tabhost 内容不显示

android - 如何使用 Json(类别和子类别)在 Android fragment 中显示 GridView 图像

android - 创建时具有深色背景的 Activity 闪光

java - JPanel 将自身绘制在 JFrame 标题栏下方

css - Material UI 网格列表行有一个很大的尴尬间隙

android - 启动所有选项卡的 Activity 以进行预缓存