我有一个自定义TabHost,可以添加像这样的标签
private void setTab(View view, String tag, Intent intent)
{
View tabView = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
TextView tv = (TextView) view.findViewById(R.id.tabsText);
tv.setText(tag);
TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabView)
.setContent(intent);
mTabHost.addTab(setContent);
}
其中mTabHost是标签主机,tabs_bg.xml在linearlayout中只有一个textview。 (我的主要布局与the Tab Layout example相同;我只是尝试使用小的纯文本标签。)我的信息标签调用如下:
intent = new Intent().setClass(this, AboutScreen.class);
setTab(new TextView(this), "about", intent);
AboutScreen扩展了Activity,它所做的只是setContentView到这个
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView android:id="@+id/AboutUsTitle"
android:textColor="#ffffffff" android:text="@string/about_title"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:layout_gravity="center" android:gravity="center"
android:background="@drawable/about_title"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="15dip">
<TextView android:id="@+id/AboutContents"
android:text="@string/about_contents" android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</LinearLayout>
</LinearLayout>
其中@ drawable / about_title是这个:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#ffffffff"
android:endColor="#ff333333"
android:angle="90"/>
</shape>
这个drawable没有显示在FrameLayout中。其他一切都正确显示出来。我有什么想法吗?
编辑:如果我以编程方式设置
TextView tvAboutUsTitle = (TextView) findViewById(R.id.AboutUsTitle);
tvAboutUsTitle.setBackgroundResource(R.drawable.about_title);
它出现了。为什么与在xml中设置它不同?
答案 0 :(得分:0)
我无法在任何地方看到你使用tv(TextView),除非它只是从那段代码中丢失了?
以下是我在活动中设置3个标签的示例,这些标签可能对您有所帮助
编辑:我忘了提。在这段代码中,我还需要我想要的东西,一行的自定义标签。
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this.getApplicationContext();
application = ((rbApplication)getApplicationContext());
setContentView(R.layout.channellist);
new DownloadTask().execute();
setupTabs();
}
public void setupTabs() {
TabHost tabHost = getTabHost(); // The activity TabHost
tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
TabHost.TabSpec spec; // Reusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Initialize a TabSpec for each tab and add it to the TabHost
intent = new Intent().setClass(application, ChannelListSubscribed.class);
spec = tabHost.newTabSpec("subscribed");
View customTabView1 = createTabView(application, "Subscribed");
spec.setIndicator(customTabView1);
spec.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(application, ChannelListNonSubscribed.class);
spec = tabHost.newTabSpec("nonsubscribed");
View customTabView2 = createTabView(application, "Find More");
spec.setIndicator(customTabView2);
spec.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(application,ChannelListFeatured.class);
spec = tabHost.newTabSpec("featured");
View customTabView3 = createTabView(application, "Featured");
spec.setIndicator(customTabView3);
spec.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
}
private static View createTabView(final Context context, final String tabLabel) {
View view = LayoutInflater.from(context).inflate(R.layout.tab_item, null);
TextView tv = (TextView) view.findViewById(R.id.tab_label);
tv.setText(tabLabel);
return view;
}
tab_item.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="fill_parent"
android:padding="10dip"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/tab_bg_selector">
<TextView
android:id="@+id/tab_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:textColor="@drawable/tab_text_selector"/>
</LinearLayout>
答案 1 :(得分:0)
我遇到的问题是视图显示得不够大,因为它的大小似乎是在知道内容之前确定的,即使它全部保存在xml中(引用了字符串)
您是否尝试过将layout_height和widths设置为数值(甚至是'填充父级'以查看是否属于这种情况?
另外,我会简化布局以删除嵌套的LinearLayouts?由于每个只持有一个TextView
,因此它们看似不必要答案 2 :(得分:0)
由于我们现在还没有使用标签视图,所以我要关闭它,因为这个
TextView tvAboutUsTitle = (TextView) findViewById(R.id.AboutUsTitle);
tvAboutUsTitle.setBackgroundResource(R.drawable.about_title);
修复了我遇到的问题,即使我不知道为什么。