Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在布局XML中如何使用TabItem?_Android_Android Layout_Android Tabs_Android Tablayout - Fatal编程技术网

Android 在布局XML中如何使用TabItem?

Android 在布局XML中如何使用TabItem?,android,android-layout,android-tabs,android-tablayout,Android,Android Layout,Android Tabs,Android Tablayout,给出了直接在TabLayout中嵌套TabItem的示例,如下所示: <android.support.design.widget.TabLayout android:layout_height="wrap_content" android:layout_width="match_parent"> <android.support.design.widget.TabItem android:text="@string/tab_te

给出了直接在
TabLayout
中嵌套
TabItem
的示例,如下所示:

<android.support.design.widget.TabLayout
     android:layout_height="wrap_content"
     android:layout_width="match_parent">

    <android.support.design.widget.TabItem
         android:text="@string/tab_text"/>

    <android.support.design.widget.TabItem
         android:icon="@drawable/ic_android"/>

</android.support.design.widget.TabLayout>

但它没有给出如何在实践中使用的示例,TabItem的文档中说:

该视图实际上并没有添加到TabLayout中,它只是一个虚拟视图,允许设置选项卡项的文本、图标和自定义布局


那么
TabItem
的作用是什么呢?在大量的谷歌搜索之后,我找不到任何人用XML定义TabItems的例子。有没有办法在资源文件中使用TabItem设置选项卡式活动,如上图所示

这似乎是对设计库的一个相对较新的添加,显然是在23.2.0版中添加的,尽管在中没有提到。它的功能非常基本,它似乎只使用了its中给出的三个属性:
文本
图标
、布局

从测试来看,它基本上是一个XML快捷方式,用于创建新的
选项卡
,并设置其文本、图标和自定义
视图
,就像在代码中通常做的那样。当它说“这个视图实际上并没有添加到TabLayout”时,我相信这是在暗示它不是常规意义上的
视图
,因为你不能在它上面设置任何类型的标准布局属性,比如
布局宽度
背景
。它只是使
表格布局
为每个
选项卡项
创建一个新的
选项卡
,并相应地调用
setText()
setIcon()
,和
setCustomView()

例如,要在代码中添加
选项卡
,我们通常会执行以下操作:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);

// Add Tab
TabLayout.Tab tab = tabLayout.newTab();

tab.setCustomView(R.layout.tab);
tab.setText("Tab 1");
tab.setIcon(R.drawable.ic_launcher);

tabLayout.addTab(tab);
而现在我们可以通过在布局中添加
TabItem
来替换上面注释之后的所有内容

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.TabItem
        android:layout="@layout/tab"
        android:text="Tab 1"
        android:icon="@drawable/ic_launcher" />

</android.support.design.widget.TabLayout>

快速添加@Mikes非常有用的答案:

Android Studio现在有一个模板,介绍如何在XML布局中使用
TabLayout
TabItem
设置。使用“新建>活动>选项卡式活动”创建所有需要的文件,然后选择“操作栏选项卡(带ViewPager)”,如屏幕截图所示:

如果要在没有自定义视图的情况下调整
选项卡项的外观,请使用白色向量资源作为选项卡
android:icon
,并使用选择器对其进行着色(根据
android:state_selected提供不同的颜色)

当前所选选项卡下的行的颜色设置为标签
TabLayout
上的
app:tabIndicatorColor

我花了一段时间才开始工作,所以完整的步骤变成了一个很长的答案,我不想在这里复制它们。您可以在以下网址找到我的更详细答案和完整代码:


请参见com.google.android.material.tabs.TabItem类它接受属性中的图标文本,但似乎您需要在运行时添加标记。

没错。这就是为什么
TextView
ImageView
需要具有这些特定ID的原因。这也正是它在代码中的工作原理,如果你曾经在
选项卡上设置过自定义
视图
s.Hmm,使用
查看页面
我想你必须自己处理设置,因为我相信
表格布局
在自填充
选项卡时不能使用自定义
视图
,并且文本会自动从
PagerAdapter
中提取。也许有一些令人愉快的方法可以做到这一点,但我必须考虑一下。有没有其他方法可以替代ViewPager?TabItem有什么实际应用?我的意思是你想要什么就有什么。它基本上是一个被美化的
放射组
。如果您想使用它来交换
视图
s,您可以使用它来控制
视图翻转器
视图切换器
,但它们没有内置滑动功能。或者您可以使用
ViewGroup#addView()
removeView()
执行基本的
View
操作。或者你可以执行你自己的
FragmentTransaction
s,但是,同样,除非你实现它,否则不能刷卡。这是我能找到的唯一一篇提到
TabItem
并使用
android:layout
参数的帖子。在哪里可以找到布局xml文件的更大示例?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical">

    <ImageView android:id="@android:id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>