Android - TabView中的样式微调器

时间:2011-08-23 22:48:23

标签: java android java-ee spinner tabview

我有一个使用标签进行导航的应用,其中一个标签上有一个微调器。但是,当选择微调器并且实际选择窗口出现时,所有文本在白色背景上都是白色的。 我尝试了布局样式,但我没做什么改变了字体的颜色。

主要班级

public class RealmsOfWickedry extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab);

        TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);

        TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
        TabSpec secondTabSpec = tabHost.newTabSpec("tid1");

        firstTabSpec.setIndicator("Home").setContent(new Intent(this,FirstTab.class));
        secondTabSpec.setIndicator("Catalog").setContent(new Intent(this,SecondTab.class));

        tabHost.addTab(firstTabSpec);
        tabHost.addTab(secondTabSpec);
    }

    public static View makeSpinner(Context context) {
        View v = LayoutInflater.from(context).inflate(R.layout.spinner, null);
        Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_dropdown_item);
        adapter.add("Item 1");
        adapter.add("Item 2");
        adapter.add("Item 3");
        adapter.add("Item 4");
        spinner.setAdapter(adapter);
        return v;
    }
}

带有微调器的类

public class SecondTab extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /* Second Tab Content */
        TextView textView = new TextView(this);
        textView.setText("Choose a Category");
        setContentView(textView);
        setContentView(RealmsOfWickedry.makeSpinner(getParent())); 
    }
}

tab.xml

<?xml version="1.0" encoding="utf-8"?>

<TabHost android:layout_width="fill_parent"
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost">
    <LinearLayout android:id="@+id/LinearLayout01"
        android:orientation="vertical" android:layout_height="fill_parent"
        android:layout_width="fill_parent">
        <TabWidget android:id="@android:id/tabs"
            android:layout_height="wrap_content" android:layout_width="fill_parent"></TabWidget>
        <FrameLayout android:id="@android:id/tabcontent"
            android:layout_height="fill_parent" android:layout_width="fill_parent"></FrameLayout>
    </LinearLayout>

</TabHost>

spinner.xml

<?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">
    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/cat_prompt"
        android:theme="@style/DropdownStyle"
    />
</LinearLayout>

的themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="OverallStyle" parent="@android:Theme.Light">
        <item name="android:windowBackground">@drawable/bg</item>
        <item name="android:textColor">@color/white</item>
    </style>
    <style name="WelcomeStyle" parent="@android:Theme.Light">
        <item name="android:typeface">monospace</item>
        <item name="android:gravity">center</item>
    </style>
    <style name="CustomStyle" parent="@android:Theme.Light">
        <item name="android:typeface">monospace</item>
        <item name="android:gravity">top</item>
    </style>
    <style name="DropdownStyle" parent="@android:Theme.Light">
        <item name="android:textColor">@color/red</item>
    </style>
</resources>

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

看起来你正试图覆盖系统主题以显示不同的颜色,这是正确的路径。你的微调器xml包含对android:theme的引用我之前没有看到过它,它似乎不是这个小部件的API的一部分。要使DropdownStyle正常工作,首先,将其添加为OverallStyle样式的一部分,项目名称为@android:attr/spinnerDropDownItemStyle。其次,将DropdownStyle的父级更改为@android:Widget.DropDownItem.Spinner。我假设OverallStyle已经应用于Manifest中的Activity或Application。这将改变所有Spinner下拉项的样式。

要仅应用于此视图的下拉项,请仅执行上面的第二步,然后将style="@style/OverallStyle"添加到其布局中的微调器。

其他信息:

<style name="DropdownStyle" parent="@android:Widget.DropDownItem.Spinner">
    <item name="android:textColor">@color/red</item>
</style>
<style name="OverallStyle" parent="@android:Theme.Light">
    <item name="android:windowBackground">@drawable/bg</item>
    <item name="@android:attr/spinnerDropDownItemStyle">@style/DropdownStyle</item>
    <item name="android:textColor">@color/white</item>
</style>

<强> -OR -

的themes.xml

<style name="DropdownStyle" parent="@android:Widget.DropDownItem.Spinner">
    <item name="android:textColor">@color/red</item>
</style>

spinner.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/cat_prompt"
        style="@style/DropdownStyle"
    />
</LinearLayout>