我需要编写一个标签栏,其中每个tabspec都有一个包含可变数字徽章的指示器视图。 想象一个带标签的新闻阅读器,其中每个标签都有自己未读的计数
我所做的是为tab inidicator创建一个xml布局,在代码中对其进行膨胀并将其与tabspec相关联,如下所示: 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的oncreate metod):
@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);
这种方法存在几个问题:
我的问题是,你能建议一个更好的方法吗?我有没有考虑过不同的方法? 谢谢!
答案 0 :(得分:0)
一些事情。
使用RelativeLayout。这可能对问题3有所帮助,因为它允许更多地控制这些元素在布局中的位置。
你应该在所有或你的xml元素中使用android:id属性。这样您就可以在xml中设置视图,但仍然以编程方式对其进行更改,这应该有助于解决问题2.例如,如果您要为TextView提供id属性,则不需要对text属性进行硬编码。
在你的xml中,
<TextView android:id="count"
...
/>
在你的java中,
TextView count = (TextView) findViewById(R.id.count);
count.setText(friendsCount);
一般来说,我认为 并非如此,但它肯定可以改进。