关于不同活动的Android主题问题

时间:2013-06-27 08:45:49

标签: android android-layout android-theme

我有一个小应用程序,它应该使用系统默认主题。但是我有两个问题:

首先,在一个Activity(TemplateView)上,Android不应用主题 - 或者它与应用程序的其余部分真正不同。其次,SpinView上的ConfigurationView按钮也不受主题的影响。

我没有以编程方式触摸按钮和内容。唯一的东西是微调器的ArrayAdapter,它使用了andoird.R.layout.simple_spinner_dropdown_item,如果我没弄错的话,它也应该是主题。

我一直想弄清楚,这里有什么问题,但我似乎无法找到它。

我的清单          

    <uses-sdk android:minSdkVersion="10"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.VIBRATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme" >
        <activity
            android:name="de.isogon.discotalker.viewController.ConfigurationController" android:theme="@android:style/Theme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity><activity android:name="de.isogon.discotalker.viewController.TemplateController"></activity>
        <activity android:name="de.isogon.discotalker.viewController.AboutController"></activity>
        <activity android:name="de.isogon.discotalker.viewController.DisplayController"></activity>

    </application>

</manifest>

ConfigurationView (通常除了按钮/旋转器之外的主题)

<de.isogon.discotalker.views.ConfigurationView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/tv_configHeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/label_configuration"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <AutoCompleteTextView
        android:id="@+id/actv_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tv_configHeader"
        android:layout_marginTop="10dp"
        android:completionThreshold="1"
        android:dropDownHeight="wrap_content"
        android:dropDownWidth="match_parent"
        android:ems="10"
        android:hint="@string/hint_text" >
    </AutoCompleteTextView>

    <ScrollView
        android:id="@+id/scrollView_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/btn_start"
        android:layout_below="@+id/actv_text" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <!-- Speed -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/tv_speed"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left|center_vertical"
                    android:layout_weight="1"
                    android:text="@string/label_speed" />

                <SeekBar
                    android:id="@+id/sb_speed"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|center_vertical"
                    android:layout_weight="1" />
            </LinearLayout>

            <!-- Size -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/tv_size"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left|center_vertical"
                    android:layout_weight="1"
                    android:text="@string/label_size" />

                <SeekBar
                    android:id="@+id/sb_size"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|center_vertical"
                    android:layout_weight="1" />
            </LinearLayout>

            <!-- Text Color -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/tv_textColor"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left|center_vertical"
                    android:layout_weight="1"
                    android:text="@string/label_textcolor" />

                <Spinner
                    android:id="@+id/sp_textcolor"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|center_vertical"
                    android:layout_weight="1" />
            </LinearLayout>

            <!-- Text Backgroundcolor -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/tv_textBackgroundColor"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left|center_vertical"
                    android:layout_weight="1"
                    android:text="@string/label_textbackgroundcolor" />

                <Spinner
                    android:id="@+id/sp_textBackgroundcolor"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|center_vertical"
                    android:layout_weight="1" />
            </LinearLayout>

            <!-- Backgroundcolor -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/tv_backgroundcolor"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left|center_vertical"
                    android:layout_weight="1"
                    android:text="@string/label_backgroundcolor" />

                <Spinner
                    android:id="@+id/sp_backgroundcolor"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|center_vertical"
                    android:layout_weight="1" />
            </LinearLayout>

            <!-- Endless -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/tv_endless"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left|center_vertical"
                    android:layout_weight="1"
                    android:text="@string/label_endless" />

                <RelativeLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1" >

                    <CheckBox
                        android:id="@+id/cb_endless"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_gravity="right|center_vertical" />
                </RelativeLayout>
            </LinearLayout>

            <!-- Vibrate/Sound -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/tv_afterRun"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left|center_vertical"
                    android:layout_weight="1"
                    android:text="@string/label_afterRun" />

                <Spinner
                    android:id="@+id/sp_afterRun"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|center_vertical"
                    android:layout_weight="1" />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/btn_start"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="5dp"
        android:text="@string/button_start" />

</de.isogon.discotalker.views.ConfigurationView>

TemplateView (主题完全不同 - 我不知道为什么)

<de.isogon.discotalker.views.TemplateView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/tv_templatesHeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="10dp"
        android:text="@string/label_templates"
        android:textAppearance="?android:attr/textAppearanceLarge"
         />

    <ListView 
        android:id="@+id/lv_templateList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_templatesHeader"
        android:layout_above="@+id/rl_containerButtons">

    </ListView>

    <LinearLayout 
        android:id="@+id/rl_containerButtons"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true">
        <Button 
            android:id="@+id/btn_edit"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="@string/button_edit"
            android:layout_weight="1"/>
        <Button 
            android:id="@+id/btn_delete"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="@string/button_delete"
            android:layout_weight="1"/>
    </LinearLayout>
</de.isogon.discotalker.views.TemplateView>

3 个答案:

答案 0 :(得分:1)

问题是,我使用getContext()方法来扩充第一个View和getApplicationContext()以使另一个视图渗透。

答案 1 :(得分:0)

我在使用ListView的ArrayAdapter扩展时遇到了类似的问题 - 这里的解决方法是使用My Activity.this上下文而不是getApplicationContext()或getContext()方法。

答案 2 :(得分:0)

有与AppCompat v22相关的类似问题。

活动必须扩展AppCompatActivity(而不是Activity),以便将AppCompat主题(在我的情况下为Material)应用于它们。