タブをクリックすると、現在のタブの下部に重複したカスタムアイコンが作成されます。これを取り除く方法は?AndroidのtabLayoutの重複タブ
私はコードの下に使用してカスタムタイトルを設定しています:
private void setIcon(String title, int icon, boolean isSelected, int position) {
LinearLayout tab = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.custom_tab, null);
TextView tabTitle = (TextView) tab.findViewById(R.id.tab_title);
final CircleImageView tabImage = (CircleImageView) tab.findViewById(R.id.tab_image);
if (isSelected){
//add shadow to image.
tabImage.setBorderColor(ContextCompat.getColor(getActivity(),R.color.white));
tabImage.setBorderWidth(10);
}
Glide.with(getContext()).load(icon).into(tabImage);
tabTitle.setText(title);
tabLayout.getTabAt(position).setCustomView(tab);
}
私がやろうとしています何: ユーザーがタブをクリックすると、画像の外の境界線を追加します。だから私は以下のようにtablayoutにaddTabSelectedListenerを追加していこれを行うには:
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//add shadow on selected tab
setIcon(getTitle(tab.getPosition()), getIcon(tab.getPosition()),true,tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
//remove shadow from previous tab
setIcon(getTitle(tab.getPosition()), getIcon(tab.getPosition()),false,tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
しかし、新しいタブのアイコンはだけではなく、古いアイコンを置き換えるの古いアイコンの下に追加されます。私が試してみました何
:
- tabLayout.removeTab(タブ)tabLayout.removeTabAtの
- 使用の使用(tab.getpostion());
- tabLayout.removeAllTabs()の使用。
これらはすべてNullPointerExceptionになります。
編集:
Arpanが示唆したように:
ビュービュー= tab.getCustomViewを(); このビューからtabTitleとtabImageはどのように取得されますか?
編集2:
[OK]を、私は一部正しいすなわち、画像が正しくロードされますが、タイトルは以下の一番上に移動する代わりにされて行うことができると思います。
コード:私はこれを行う場合は
LinearLayout customTab = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.custom_tab, null);
final CircleImageView tabImage = (CircleImageView) tab.getCustomView().findViewById(R.id.tab_image);
final TextView tabTitle = (TextView) tab.getCustomView().findViewById(R.id.tab_title);
tabTitle.setText(getTitle(tab.getPosition()));
Glide.with(getContext()).load(getIcon(tab.getPosition())).into(tabImage);
tab.setCustomView(tabImage);
、画像が完全に設定されていますが、タイトルはそれの上に行きます。タブ内にtabTitleを設定していないためです。どうすればいいの?
リニアレイアウトを使用し、それを設定するより重複タブを作成する場合。
編集3:すべてが終わっ
、私はちょうどtabtitleためsetcustomViewAgainを呼び出します。
setIcon()メソッドを実行する必要があります。これは、tabLayout.getTabAt(position).setCustomView(tab);です。新しいインスタンスを作成する???そのビューからtabTitleとtabImageをどのように取得しますか? –
これはタブが保持しているビューです。試してみましたか? –
更新された答えを見て –