アプリで最新のデザインサポートライブラリのTabLayout
を使用しました。タブは、各タブのフラグメントをロードするビューページャーに接続されています。ビューページャーがユーザーが選択したタブのフラグメントをロードするまで、すべてのタブを無効にしたい。タブレイアウトを無効にしたり、クリックできないようにすることはできません。 setEnabled(false)
とsetClickable(false)
を使用しましたが、機能していません。 setVisiblity(View.GONE)
を使用して非表示にすることはできますが、タブを常に表示したいのですが。
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setTabMode(TabLayout.MODE_FIXED);
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.near_me_hover).setTag(1));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.all_hostels).setTag(2));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.top_five).setTag(3));
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.advanced_search).setTag(4));
tabLayout.setEnabled(false);
tabLayout.setClickable(false);
[〜#〜] xml [〜#〜]
Android.support.design.widget.TabLayout
Android:id = "@ + id/tabLayout" Android:layout_width = "match_parent"
Android:layout_height = "0dp"
Android:layout_weight = "0.15"
Android:scrollbars = "horizontal"
Android:splitMotionEvents = "false">
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.near_me_hover);
break;
case 1:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.all_hostels_hover);
break;
case 2:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.top_five_hover);
break;
case 3:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.advanced_search_hover);
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
tab.setIcon(R.drawable.near_me);
break;
case 1:
tab.setIcon(R.drawable.all_hostels);
break;
case 2:
tab.setIcon(R.drawable.top_five);
break;
case 3:
tab.setIcon(R.drawable.advanced_search);
break;
}
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
tabLayout.getTabAt(position).select();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
タブクリックリスナーによって実装される3つのメソッドがあり、そのうちの1つはonTabSelected()は、フラグメントが初期化されているかどうかを確認するためにブール条件を設定しますです。次に、その条件が満たされた場合は、トランザクションの実行を許可します。また、フラグメントコードの後にタブを初期化します
別のトリック:
要件が満たされるまで、タブレイアウトに別の空白の透明なビューを配置できます。タブを有効/表示する必要がある場合は、空白のビューを非表示にします。
タブを無効にしたい場合は、customViewを使用する必要があります
まず、カスタムレイアウトを作成します(例としてtextView)
v_tabview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/tabItemView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:maxLines="1"
Android:textColor="@drawable/selector_tab" />
状態の有効化/無効化(色の変更)を変更するためのセレクターを作成します
セレクタータブ.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="#9e9e9e" Android:state_enabled="false" /> //gray
<item Android:color="#64b246" Android:state_enabled="true" /> //green
</selector>
次に、それを膨らませ、名前を設定し、tabLayoutに追加します
arrayStringNames.forEach { name ->
val textView: TextView = inflater.inflate(R.layout.v_tabview, tabLayout, false) as TextView
textView.text = name
val tab = tabLayout.newTab()
tab.customView = textView
tabLayout.addTab(tab)
}
そして最後に、手品!そのサンプルコードでは、すべてのタブを無効にしています。 2番目と3番目のタブを無効にする必要がある場合は、サイクルで「インデックス」をチェックし、必要に応じて無効にします
for (index in 0 until tabLayout.tabCount) {
((tabLayout.getTabAt(index)?.customView) as? TextView)?.let { textView ->
textView.isEnabled = enable //boolean
(textView.parent as View).enable(enable)
}
}
位置で特定のタブを有効にするには:
LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0));
tabStrip.getChildAt(position).setOnTouchListener((v,event)->false);
位置でタブを無効にするには:
tabStrip.getChildAt(position).setOnTouchListener((v,event)->true);
util関数を作成できます。Kotlinでの私の楽しみです。
fun disalbeTabAt(tablayout: TabLayout?, index: Int) {
(tablayout?.getChildAt(0) as? ViewGroup)?.getChildAt(0)?.isEnabled = false
}
ビューで何かをしたいときは、デバッグするか、親ビューをクリックして、ビューがどのように作成されているかを知ることができます。これにより、やりたいことが何でもできます。この場合、Tablayoutクラスに移動して理解することができます。