Мне нужно написать панель вкладок, где каждая из спецификаций вкладок имеет вид индикатора, который содержит изменяемый числовой значок.
представьте читателя новостей с вкладками, где каждая вкладка имеет свой непрочитанный счетчик
Что я сделал, так это создал макет xml для указателя вкладок, накачал его в коде и связал со спецификацией вкладки следующим образом:
tab_indicator.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:paddingLeft="10dip"
android:paddingRight="10dip">
<FrameLayout android:layout_width="wrap_content"
android:layout_height="wrap_content" android:paddingTop="5dip">
<ImageView android:src="@drawable/tab_selector_friends"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<TextView android:text="2"
android:layout_width="10dip" android:layout_height="10dip"
android:textColor="@color/white_text"
android:textStyle="bold" android:typeface="monospace"
android:paddingLeft="1dip" android:paddingRight="1dip"
android:textSize="10dip" android:gravity="center" android:background="@drawable/temp_red_badge_big" />
</FrameLayout>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Friends" />
</LinearLayout>
виджет моей вкладки (создание метода MyTabWidget.java):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_menu);
TabHost tabHost = getTabHost();
Intent intent = new Intent().setClass(this, TodayActivity.class);
Resources resources = this.getResources();
TabHost.TabSpec spec = tabHost.newTabSpec(resources.getString(R.string.today));
View specIndicatorView;
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
specIndicatorView = inflater.inflate(R.layout.tab_indicator, null);
spec.setIndicator(specIndicatorView);
spec.setContent(intent);
tabHost.addTab(spec);
Есть несколько проблем с этим подходом:
- Это чрезвычайно запутанный и трудно поддерживать
- Это не дает мне той гибкости, которая мне нужна, то есть изменить значение значка
- Очень сложно спроектировать его так, чтобы он хорошо выглядел
- Просто кажется, что это слишком сложный подход
У меня вопрос, можете ли вы предложить лучший способ сделать это? Есть ли другой подход, который я не учел?
Спасибо!