【问题标题】:How to make old custom ActionBar appear on new SDK?如何让旧的自定义 ActionBar 出现在新的 SDK 上?
【发布时间】:2017-04-18 10:00:20
【问题描述】:

我将旧的 Android (4.4 Kitkat) 项目从 Eclipse 迁移到了 Android Studio。 当我运行应用程序时,我不再有 ActionBar!

这是我的主要 Activity 类文件:

public class Main extends Activity {
    ...

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

    ...

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Intent intent;

        switch (item.getItemId()) {

            case R.id.Open:
                intent = new Intent(this, Open.class);
                startActivity(intent);
                return true;

        case R.id.Email;
                intent = new Intent(this, Email.class);
                startActivity(intent);
                return true;

            case R.id.Compartir:
                intent = new Intent(this, Compartir.class);
                startActivity(intent);
                return true;

            case R.id.About:
                intent = new Intent(this, About.class);
                startActivity(intent);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

这是我的styles.xml 文件:

<resources>
        <style name="AppBaseTheme" parent="Theme.AppCompat.Light"></style>

    <style name="AppTheme" parent="AppBaseTheme">
            <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
        </style>

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.Light.ActionButton.Overflow">
        <item name="android:src">@drawable/ic_action_expand</item>
        <item name="android:background">?android:attr/actionBarItemBackground</item>
        <item name="android:contentDescription">"Lala"</item>
    </style>
</resources>

我从清单文件中调用:

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

在项目中我有options.xml,正如您所见,它创建了操作栏的内容:1 个按钮 + 选项按钮,这是一个带有 3 个按钮的下拉菜单。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/Open"
        android:title="@string/option_open"
        android:icon="@drawable/ic_action_open"
        android:showAsAction="ifRoom" />    

    <item android:id="@+id/Email"
        android:title="@string/option_email"
        android:icon="@drawable/ic_action_person"
        android:showAsAction="never" />

    <item android:id="@+id/Compartir"
        android:title="@string/option_compartir"
        android:showAsAction="never" />

    <item android:id="@+id/About"
        android:title="@string/option_about"
        android:showAsAction="never" />
</menu>

无论如何,如果我构建应用程序,我的手机上就没有 ActionBar。我在使用 Eclipse ADT 构建应用程序时拥有它。我认为区别在于我之前使用的SDK旧版本。那么,如何让带有自定义主题的 ActionBar 再次出现呢?

【问题讨论】:

  • 你能展示一下以前的样子吗?
  • 我在问题中附上了一张图片。你能看到吗?

标签: android android-actionbar android-xml android-appcompat android-styles


【解决方案1】:

我认为你必须回到 Holo 主题:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">

【讨论】:

  • 成功了!太感谢了!你能告诉我为什么我需要做这个改变吗?你能提供更多信息吗?
  • 您在某种程度上依赖于旧样式,但我不知道为什么在您的情况下操作栏不会显示新样式,因为通常它应该有。这意味着您有一些逻辑,会干扰显示新的操作栏。无法根据这么多代码提供更深入的信息,抱歉。
【解决方案2】:

试试这个:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">

【讨论】:

  • 我尝试添加.DarkActionBar,但没有任何更改。
  • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多