これは、それがthe revision historyに記載されていないですけれども明らかに、バージョン23.2.0で追加され、設計ライブラリに比較的最近追加さであるように思われます。これは、機能はかなり基本的なものだ、とだけそのdocsに3を与えられて使用するように思わ属性:text
、icon
、およびlayout
。
テストから、新しいTab
を作成し、テキスト、アイコン、およびカスタムView
を通常コードで行うように設定することは基本的にXMLのショートカットであるようです。それは「このビューは、実際にTabLayoutに追加されていない」と言うとき、私はあなたがlayout_width
かbackground
のように、それに標準レイアウト属性のいずれかの種類を設定することができないという点で、それは、通常の意味でのView
ないことを示唆するためのものだと信じて。 TabLayout
は、TabItem
ごとに新しいTab
を作成し、それに応じてsetText()
,setIcon()
、およびsetCustomView()
を呼び出します。例えば
、コード内Tab
を追加するために、我々は通常、このようなものだろう。今、私たちは、レイアウトにTabItem
を追加することにより、上記のコメントの後、すべてを置き換えることができに対し
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);
を。
<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>
カスタムView
レイアウトと同じ要件が適用されます。つまり、システムのリソースID @android:id/text1
を持っている必要がありますテキストのTextView
、およびアイコンのImageView
はID @android:id/icon
を持っている必要があります。たとえば、上記のR.layout.tab
は、
<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>
の例では、レイアウト属性とテキストとアイコンの設定を追加して定義します。あなたはカスタムレイアウトのTextViewにテキスト属性( "タブ1")を適用することをAndroidが知っていると言っていますか( "@android:id/text1")? –
まあまあです。そのため、 'TextView'と' ImageView'はそれらの特定のIDを持つ必要があります。これは、 'Tab'sでカスタム' View'を設定したことがある場合でも、コードでも同様に動作します。 –
ありがとう!これをViewPagerでセットアップする場合は、TabLayoutオブジェクトをアダプタに渡して、既存のタブについてViewPagerに通知できるでしょうか? ViewPagerを使わずにそれらを統合する方法は、通常行われているようにTabLayoutを自動入力しますか? –