我想以编程方式更改标签的文本视图。有没有办法做到这一点?
仅有关于旧TabHost视图的答案,我正在使用Google使用android.support.design.widget.TabLayout.
对于TabHost: How to add padding to a tabs label?
答案 0 :(得分:13)
这是有效的解决方案
int wantedTabIndex = 0;
TextView tv = (TextView)(((LinearLayout)((LinearLayout)mTabLayout.getChildAt(0)).getChildAt(wantedTabIndex)).getChildAt(1));
tv.setText("Hello world!");
只需将最后一个索引零更改为一个,现在上面的代码就可以了
删除崩溃
java.lang.ClassCastException: android.widget.ImageView cannot be cast to android.widget.TextView
答案 1 :(得分:5)
使用给定标签:
int wantedTabIndex = 0;
TextView tv = (TextView)(((LinearLayout)((LinearLayout)mTabLayout.getChildAt(0)).getChildAt(wantedTabIndex)).getChildAt(0));
tv.setText("Hello world!");
答案 2 :(得分:3)
public static void setTextViewsCapsOff(View view) {
if (!(view instanceof ViewGroup)) {
return;
}
ViewGroup group = (ViewGroup)view;
for (int i = 0; i < group.getChildCount(); i++) {
View child = group.getChildAt(i);
if (child instanceof TextView) {
((TextView)child).setAllCaps(false);
} else {
setTextViewsCapsOff(child);
}
}
}
将TabLayout传递给此递归方法。它将找到任何TextView的子项并关闭其All Caps模式。避免所有其他非常特定的类型转换。如果它似乎不起作用,请稍后在您的代码中调用它。我在onCreate中有它,但是没有用。稍后在代码中调用它并且它工作得很好。
影响所有标签,不只是一个,但我认为这是最常见的用法。也不是特定于TabLayout。可用于包含要更改的TextView的任何布局。
答案 3 :(得分:1)
这对我有用:
tabLayout.getTabAt(0).setText("some text");
将0
替换为您要编辑的标签的索引。我认为您的tabLayout需要在调用之前填充,否则tablayout.getTabAt(0)
将返回null
。
答案 4 :(得分:0)
我认为最好的办法是使用TextView创建自定义布局,然后将自定义视图分配给要编辑的选项卡
final TabLayout.Tab tabAt = tabLayout.getTabAt(index);
tabAt.setCustomView(myLayoutId);
通过这种方式,您可以使用布局中的TextView执行任何操作
答案 5 :(得分:0)
将 onTabSelectedListener 添加到tabLayout以动态设置文本。 所以在这种方法中,当选项卡被选中时,文字将变为“选中”或其他标签
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tab.getCustomView().setAlpha(1.0f);
((TextView) tab.getCustomView()).setTextSize(12);
((TextView) tab.getCustomView()).setText("Selected");
Log.d("TabBar", "selected");
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tab.getCustomView().setAlpha(0.3f);//to set alpha
((TextView) tab.getCustomView()).setTextSize(11);
((TextView) tab.getCustomView()).setText("DeSelected");
Log.d("TabBar", "unselected");
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.d("TabBar", "reselected");
}
});
将选项卡设置为默认选择,然后使用此语句
tabLayout.getTabAt(0).select(); //this is used to set tab as default
答案 6 :(得分:0)
凯文的回答很棒! (https://stackoverflow.com/a/34047188/7699617)。依靠这个答案,我实现了在 TextView
中应用 Kotlin
的任何更改:
private fun applyForTextView(parent: ViewGroup, func: (TextView) -> Unit) {
for (i in 0 until parent.childCount) {
when (val child = parent.getChildAt(i)) {
is TextView -> func(child)
is ViewGroup -> applyForTextView(child, func)
}
}
}
如何使用:
applyForTextView(tabLayout) { it.isAllCaps = false }