我有一款最初针对Android 2.3设计的应用。现在我正在添加一个带ActionBarSherlock的ActionBar,一切都很好,除了我运行4.2的Nexus 7,它现在使用Holo主题按钮和EditTexts。在我的主题继承自Theme.Light之前,现在它继承自Theme.Sherlock。我希望它甚至在较新的设备上使用旧主题。我怀疑这是由values-v14文件夹中的以下行引起的:
<style name="Sherlock.__Theme" parent="android:Theme.Holo">
所以我尝试删除该文件夹和v11文件夹只是为了查看它是否能解决问题,但ActionBar完全消失了。
然后我尝试覆盖EditText的样式,如下所示:
<style name="AppTheme" parent="Theme.Sherlock">
<item name="@android:attr/editTextStyle">@android:style/Widget.EditText</item>
</style>
这应该让小部件不使用Widget.Holo主题并使用常规主题,但它不起作用。
在使用ABS时,如何让Android 4.0+设备使用原始主题而不是Holo主题?
下面我发布了一些使用ABS的示例应用程序的代码,目前正在显示一个Holo主题的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 :(得分:2)
这不是由ActionBarSherlock引起的,EditText
和Button
主题是由您运行的平台定义的,在本例中为4.2。基于UI皮肤(TouchWiz,Sense,MotoBlur等),EditTexts
和Buttons
也可能看起来不同。
我建议将Holo主题保留在支持它的设备上,因为用户会熟悉它并且3.x +上的2.x主题看起来不合适。
此外,为了使用Sherlock
according to the docs,还需要其中一个ActionBarSherlock
主题:
为了使自定义操作栏实现功能,您的应用程序必须使用Theme.Sherlock,Theme.Sherlock.Light或Theme.Sherlock.Light.DarkActionBar,否则您的自定义主题必须使用前面提到的其中一个作为其父级。
如果你真的希望2.x寻找Buttons
和其他Widgets
,我相信你需要复制2.x中的所有样式/ drawable,然后在其中一个中覆盖它们Sherlock派生出主题。你可以看看Chris Versieux用HoloEverywhere做了什么,并尝试反过来使一切看起来像2.x,我强烈建议不要这样做。
答案 1 :(得分:0)
我的修复无效的原因是因为Widget.EditText的background属性使用了?attr语法,这意味着它使用了当前主题的背景,即Holo。所以我基本上查看了Android源代码,并将使用此语法的两个属性更改为我认为应该是前Holo主题样式(即将背景设置为白色)。