2013-06-02 60 views
0

一但上观看在模拟器中创建一个简单的主题为主题android系统

<style name='one'> 
    <item name='android:textColor'>#eea</item> 
    <item name='android:textSize'>20sp</item> 
    </style> 

屏幕变成black.when我不适用主题的屏幕上有一个白色背景。 这里真的发生了什么,我刚刚开始用android。 此外,如果将主题应用于我的活动,则该主题的属性将应用于我的活动的所有组件,例如button,textfields和edittexts。 为什么我会那么写

android:textSize=?android:textSize 

来自于我的布局任何按钮主题的参考值时,同样的价值将已经应用。

是上述语法的正确方法,从我的主题引用属性以指定给我的布局中的任何视图的属性。 谢谢 tejinder

+0

正在应用的主题是什么? –

+0

其中一个如上定义 – tejinder

+0

查看我的回答 –

回答

1

是的,所以你需要做更多的阅读。

让我们从基础开始,

您需要了解differente betweent的属性,样式和主题。

属性是可以风格的东西。例如:android:textSize是一个可以具有任何值的属性。

A 风格是一组特定的属性将被应用于一个小工具。他们在你/values/styles.xml

定义 例如:可应用于

<style name="normalTextThin" parent="android:Widget.Holo.Light.TextView"> 
    <item name="android:gravity">left|center_vertical</item> 
    <item name="android:padding">8dp</item> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:textSize">16sp</item> 
</style> 

的风格既可以作为主题的一部分,或者直接作为主题无关。

一个小部件的主题indepentent造型是这样的:

<TextView 
    android:id="@+id/text" 
    style="@style/normalTextThin" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

你那么主题化一个TextView的。

一个主题样式,可以应用到你的用户界面,这样的整体活动,或者你的整个应用程序的一部分的集合。

例如:

<style name="AppTheme" parent="android:Theme.Light"> 
    <item name="android:editTextStyle">@style/EditTextAppTheme</item> 
    <item name="android:buttonStyle">@style/ButtonAppTheme</item> 
    <item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item> 
</style> 

在这里,我们宣布所有的EditText在您的应用程序将使用风格命名为EditTextAppTheme,等而上。如果这样做了,才能真正有主题是积极的,你在清单中声明它:

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

这意味着,你不需要申报风格每个插件创建。

<EditText 
    android:id="@+id/input" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/hint_search"> 
    <requestFocus /> 
</EditText> 

该小工具在那里将已经使用EditTextAppTheme,而不需要你明确的声明如此称呼。

我建议您尝试阅读可以设置样式的属性,如何设置样式等等。

如果你不想虽然,这很好,你仍然可以得到使用以下工具做了造型很多:

希望有帮助。

附加信息

让我澄清一下对整个?attr/attributeName

?意味着该系统将选择当前配置(不具体到不同的主题)的具体attributeName值。只有当您希望在不同配置下的值有所不同时,才应使用此选项。例如:

?android:attr/actionBarSize 

这条线是一个尺寸,并且它不会基于当前主题是不同的,但是就目前设备屏幕大小和方向(值,值土地,值-sw600dp)。

重要的是要知道,指定?android:意味着您正在访问预设的Android值,而不是您的。如果您拥有或想要创建和使用您自己的属性值的具体配置,必须做到以下几点:

创建你的/价值/文件夹命名为attrs.xml文件。

声明所需的自定义属性:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <attr name="my_custom_attr" format="reference" /> 
</resources> 

声明一个值自定义属性,让我们对自己的主题说。

<style name="AppTheme" parent="android:Theme.Light"> 
    <item name="my_custom_attr">@resource_type/resource_name</item> 
    <item name="android:editTextStyle">@style/EditTextAppTheme</item> 
    <item name="android:buttonStyle">@style/ButtonAppTheme</item> 
    <item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item> 
</style> 

然后你就可以使用它了Widget您想:

。希望清除的东西出来。

EDIT 2

为了更好地回答你的问题,请更新您的问题。就像我说的,阅读更多关于如何正确创建样式。

  1. 名为'one'的主题,你想要应用到什么?一个活动,一个小工具,整个应用程序?
  2. 你是如何应用这个主题的?显示指定主题'one'用法的代码行。

您指定的主题根本不是一个正确构建的主题/风格。

<style name='one'> 
<item name='android:textColor'>#eea</item> 
<item name='android:textSize'>20sp</item> 
</style> 

这说的绝对没有,它绝对不适合活动级别的主题。您指定父母的原因是,您的主题可以从父级继承所有属性,然后指定要更改的属性。

举例来说,如果你想用你的主题和背景为浅色,这样做:

<style name='one' parent="android:Theme.Holo.Light> 
    <item name='android:textColor'>#eea</item> 
    <item name='android:textSize'>20sp</item> 
</style> 

但即便如此,尽管它会适用,你不希望有相同文字的颜色和大小为整个应用程序吗?这是无稽之谈,不同的文本颜色和大小占用户体验的很大一部分,所以我们可以创建子列并将它们应用于特定的小部件,而不是从我们可以称为“风格”的那些值中设置这些值。

我不能再详细说明我已经有了什么,上面解释了如何完成特定于Widget的样式,以及活动/应用程序级别主题。

要获得完整的启动指南,请阅读Android Developer Site,尝试在那里声明的测试样式,看看它们是如何工作的,然后尝试创建自己的测试样式,如果没有阅读,请不要尝试创建任何东西已经制定。

+0

这是一个很棒的精心设计的reply.appreciate.However,有一件事仍然是为什么背景变黑时,我应用了上面给出的主题,而没有提及主题中的任何背景。当我删除主题时背景变为白色。 – tejinder

+0

如果你注意到你的主题,你没有声明一个'父'主题。 –

+0

是否有必要申报家长。但即使没有父母为什么背景改变时,我不指定。如果可能的话更新 – tejinder