تحديث أيقونات TabWidget ديناميكية؟
-
26-09-2019 - |
سؤال
هل من الممكن تحديث أيقونات/مؤشرات TabWidget؟ إذا كان الأمر كذلك ، كيف ، عندما تقوم بإنشاء tabContent من خلال النوايا؟
تعديلات أدناه مع إجابة بفضل @بارت
الرمز العام:
النشاط الرئيسي:
public class TestActivity extends TabActivity {
public int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//TabHost mTabHost = (TabHost) findViewById(android.R.id.tabhost);
TabHost mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("tab1").setContent(
new Intent(this, OneActivity.class)).setIndicator("One"));
mTabHost.addTab(mTabHost.newTabSpec("tab2").setContent(
new Intent(this, TwoActivity.class)).setIndicator("Two"));
changeTitle(0, 20);
}
public void changeTitle(int cnt, int i){
View v = getTabWidget().getChildAt(cnt);
TextView tv = (TextView) v.findViewById(android.R.id.title);
tv.setText("One ("+i+")");
}
}
النشاط (الطفل):
public class OneActivity extends Activity {
TextView tv;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
tv = (TextView) findViewById(R.id.tv);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int i = Integer.parseInt((String) tv.getText());
i++;
tv.setText(""+i);
TestActivity parent = OneActivity.this.getParent();
parent.changeTitle(0,i);
}
});
}
}
أرغب في إظهار الرقم في عنوان علامة التبويب
المحلول
هذا ممكن ولكنه صعب بعض الشيء:
ViewGroup vg = (ViewGroup) getTabHost().getTabWidget().getChildAt(0);
TextView tv = (TextView) vg.getChildAt(1);
يجب أن تنتبه إلى المؤشرات أثناء استدعاء getchildat (). أفضل طريقة هي دائما للتصحيح والتحقق.
نظرًا لأن 1.6 TabWidget لديه طريقة getchildtabviewat بفضل يمكنك تخطي السطر الأول والكتابة:
ViewGroup vg = (ViewGroup) getTabHost().getTabWidget().getChildTabViewAt(0);
أرفق أيضًا رمز مصدر Android SDK لإظهار كيفية تصميم أيقونات TabWidget:
View tabIndicator = inflater.inflate(R.layout.tab_indicator,
mTabWidget, // tab widget is the parent
false); // no inflate params
final TextView tv = (TextView) tabIndicator.findViewById(R.id.title);
tv.setText(mLabel);
final ImageView iconView = (ImageView) tabIndicator.findViewById(R.id.icon);
iconView.setImageDrawable(mIcon);
كما ترون ، فإنه يحتوي على TextView و ImageView.
نصائح أخرى
حاول الحصول على ImageView مثل هذا
ImageView v = (ImageView)tabActivity.getTabHost().getTabWidget().getChildTabViewAt(i).findViewById(android.R.id.icon);
v.setImageDrawable(getResources().getDrawable(R.drawable.newIcon));
إعطاء صفائف للعناوين والرموز
for (int i = 0; i < numTabs; i++ ) {
TabSpec spec = host.newTabSpec(String.valueOf(i)); //sets tab index
Drawable icon = res.getDrawable(icons[i]); //sets the icon
// set tab text and icon
spec.setIndicator(titles[i], icon); //sets the title
host.addTab(spec);
}
لا تنتمي إلى StackOverflow