2012-11-26 21 views
3

我有一个应用程序最初是为Android 2.3设计的。现在我添加了一个带有ActionBarSherlock的ActionBar,并且一切都很好,除了在运行4.2的Nexus 7以外,它现在使用Holo主题的按钮和EditTexts。在我的主题从Theme.Light继承之前,现在它继承自Theme.Sherlock。我希望它甚至可以在较新的设备上使用旧的主题。我怀疑这是由值-V14夹下面一行造成的:强制使用ActionBarSherlock的应用程序使用主题而不是Theme.Holo

<style name="Sherlock.__Theme" parent="android:Theme.Holo"> 

所以我尝试删除该文件夹和V11文件夹只是为了看看它是否会解决这个问题,但随后的动作条走了完全。

然后我试图重写风格的EditText上是这样的:

<style name="AppTheme" parent="Theme.Sherlock"> 
    <item name="@android:attr/editTextStyle">@android:style/Widget.EditText</item> 
</style> 

这应该让小部件不使用Widget.Holo主题,使用常规的主题,但没有奏效。

如何使Android 4.0+设备在使用ABS时使用原始主题而不是Holo主题?

下面我发布了一些代码,使用ABS一个示例应用程序当前呈现出河洛为主题的EditText,但应呈现有规律的EditText:

MainActivity.java:

import android.os.Bundle; 

import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 

public class MainActivity extends SherlockActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

activity_main。 XML:

<RelativeLayout 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" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="@string/hello_world" 
     tools:context=".MainActivity" /> 
    <EditText 
     android:layout_height="match_parent" 
     android:layout_width="match_parent"/> 

</RelativeLayout> 

styles.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

    <style name="AppTheme" parent="Theme.Sherlock"> 
     <item name="@android:attr/editTextStyle">@android:style/Widget.EditText</item> 
    </style> 

</resources> 

另外,清单中的主题是AppTheme和ABS是作为库项目添加的。

回答

0

我修复程序不工作的原因是因为Widget.EditText的背景属性使用了?attr语法,这意味着它使用了当前主题的背景,即Holo。所以我基本上看了一下Android源代码,并将使用此语法的两个属性改回到我认为应该是Holo主题样式之前(即将背景设置为白色)。

+0

我面临同样的问题,你会详细说明你是如何修复它的。 –

2

这不会由ActionBarSherlock引起,EditTextButton主题是由您正在运行的平台定义的,在这种情况下是4.2。 EditTextsButtons也可能基于UI皮肤(TouchWiz,Sense,MotoBlur等)看起来不同。

我会推荐在支持它的设备上保留Holo主题,因为用户会熟悉它,并且3.x +上的2.x主题看起来不合适。

此外,Sherlock主题之一,需要以使用ActionBarSherlockaccording to the docs

为了使自定义操作杆实现的功能您的应用程序必须使用Theme.Sherlock,Theme.Sherlock.Light,或Theme.Sherlock.Light.DarkActionBar,或者您的自定义主题必须使用上述之一作为其父项。

如果你真的想在2.x找Buttons和其他Widgets我相信你将需要复制所有从2.X款式/可绘制的,然后覆盖他们在夏洛特的一个衍生的主题。你可以看看Chris Versieux用HoloEverywhere做了些什么,然后试着做相反的处理,看起来像2.x,但我强烈建议不要这样做。

相关问题