为什么标签视图中的可绘制不可见?

时间:2011-04-20 15:13:15

标签: android xml layout drawable android-tabhost

我有一个自定义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中设置它不同?

3 个答案:

答案 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);

修复了我遇到的问题,即使我不知道为什么。