使用自定义图片和/或颜色填充Android选项卡

3

大家好,我创建了 Google 的一个标签布局示例。

HelloTabWidget.java:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost();  // The activity TabHost
TabHost.TabSpec spec;  // Resusable TabSpec for each tab
Intent intent;  // Reusable Intent for each tab

// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, ArtistsActivity.class);

// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("artists").setIndicator("Artists",
                  res.getDrawable(R.drawable.ic_tab_artists))
              .setContent(intent);
tabHost.addTab(spec);

// Do the same for the other tabs
intent = new Intent().setClass(this, AlbumsActivity.class);
spec = tabHost.newTabSpec("albums").setIndicator("Albums",
                  res.getDrawable(R.drawable.ic_tab_albums))
              .setContent(intent);
tabHost.addTab(spec);

intent = new Intent().setClass(this, SongsActivity.class);
spec = tabHost.newTabSpec("songs").setIndicator("Songs",
                  res.getDrawable(R.drawable.ic_tab_songs))
              .setContent(intent);
tabHost.addTab(spec);

tabHost.setCurrentTab(2);

我知道如何创建自己的图标以代替它们的灰白麦克风,但是我无法弄清如何使我的自定义图标填满整个选项卡。当选中选项卡时,它是浅灰色并显示我的图片,而未选中时则是深灰色并显示我的图片。我希望我的图片能够填满整个选项卡,并且更熟悉的用户还可以选择自己喜欢的颜色来填充选项卡。


这是我真的不喜欢安卓的一点。标准选项卡一点也不美观,如果被选中,文本就无法阅读了。像你想做的那样创建自定义TabHost非常困难。 - Jonathan Roth
1个回答

3
你可以使用setIndicator(View view)来处理更复杂的Tab Indicator问题。
尝试一下这个...
ImageView imgView = new ImageView(this);

// Use imgView.setImageDrawable(Drawable drawable) or
// imgView.setImageBitmap(Bitmap bitmap) to load
// the image you want into imgView

spec = tabHost.newTabSpec("artists").setIndicator(imgView).setContent(intent);

我不确定这是否符合您的要求,但理论上您可以使用任何View类作为指示器,如果ImageView对您不起作用。

编辑:

我尝试了...

    BitmapDrawable bmd = new BitmapDrawable();
    bmd = (BitmapDrawable) res.getDrawable(R.drawable.ic_tab_artists_grey);
    imgView.setImageDrawable(bmd);

我尝试了一下,但艺术家选项卡完全变黑了。HelloTabWidget中的艺术家行现在看起来像这样: spec = tabHost.newTabSpec("artists").setIndicator(imgView).setContent(intent); tabHost.addTab(spec); 不确定是否正确,如果是,如何引用图像? - Clozecall
@Clozecall:请查看我发布的第一段代码中的注释 - 抱歉,我写错了,应该是imgView.setImageDrawable或setImageBitmap。另外,请参考我的编辑:以获取示例。 - Squonk
我知道这可能看起来很新手,但我尝试了:spec = tabHost.newTabSpec("artists").bmd = (BitmapDrawable) res.getDrawable(R.drawable.ic_tab_artists_grey); iv.setImageDrawable(bmd); .setContent(intent); tabHost.addTab(spec); -----在顶部加上这一行:BitmapDrawable bmd = new BitmapDrawable(); ----然而,我得到了bmd=、iv.setImageDrawable和.setContent的错误提示,我甚至不确定我是否正确地放置了那行代码,我已经尝试了一个小时的不同组合,但是无法解决,抱歉。 - Clozecall
将第一个代码块中被注释的三行代码放到我的第二个代码块中。 - Squonk
好的,我解决了问题,错误出现在这一行:iv.setImageDrawable(bmd); ---“iv”是错误的地方,我将其更改为imgView,现在可以运行了!所有剩下的就是定制和使用我的自定义图像。感谢您的耐心,MisterSquonk! - Clozecall
@Clozecall:不好意思 - 第二个代码是从我的测试代码中复制粘贴而来的,我在那里使用了iv作为我的ImageView。很高兴你现在已经弄好了。使用View作为指示器似乎是一个相当灵活的选项,祝你好运,希望你能让它按照你想要的方式工作。 - Squonk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接