【问题标题】:Android: App Icon as Up Button does not workAndroid:应用程序图标作为向上按钮不起作用
【发布时间】:2015-03-01 01:10:51
【问题描述】:

我正在关注 Android 开发者网站上的基本初学者教程。现在,我描述了如何将应用程序图标作为向上按钮(见最后一段文字):http://developer.android.com/training/basics/actionbar/adding-buttons.html#UpNav

我把“getSupportActionBar().setDisplayHomeAsUpEnabled(true);”在我的活动 onCreate() 方法中,但在我的设备上,我的应用程序没有应用程序图标作为按钮。这是我的活动

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

public class DisplayMessageActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // Get the message from the intent
    Intent intent = this.getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set the text view as the activity layout
    setContentView(textView);
}

还有我的清单

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName=".MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.andreas.myapplication.MainActivity" />
    </activity>
</application>

和 Gradle 信息

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "com.example.andreas.myapplication"
    minSdkVersion 8
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}

我很困惑,因为我已经为 minSdkVersion 8 使用了正确的方法。

有谁知道,为什么 ma App 不将 Icon 显示为 Up-Button?

最好的问候

【问题讨论】:

  • 我猜MainActivity 不应该显示向上按钮,因为它已经是顶级活动。但是DisplayMessageActivity 应该。
  • 是的,不应该。但这不是关于是否应该存在向上按钮的问题。它应该显示应用程序图标,并且应用程序图标未显示在 TOPLevel 或 DisplayMessageActivity 中。
  • 如果不应该,您可以在 MainActivity 中删除此行:getSupportActionBar().setDisplayHomeAsUpEnabled(true);。在运行时创建 TextView 并将其设置为 ContentView 的部分...在我看来至少看起来很幼稚。
  • 当然是幼稚的。它是这里描述的 Android 开发者网站的开始教程:developer.android.com/training/basics/actionbar/… 问题是,它应该使用 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 显示我的图标;但它不像最后描述的那样
  • 好吧,我没有在该链接中找到将 TextView 设置为内容视图的参考...除此之外,我会使用片段(1 个活动和所需的尽可能多的片段) .所以,我会使用标准的向上箭头,它是系统管理的“开箱即用”,没有其他技巧。

标签: android button menu icons


【解决方案1】:

我遇到了同样的问题 - 启用“将主页显示为向上”会导致向上按钮上带有箭头图像。我已设法通过以下步骤将箭头替换为应用程序图标:

  • 使用/drawable 中的应用图标图像创建一个新的ImageAsset
  • 在子activity的OnCreate()中,添加2行:

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);                    
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_home);
    

【讨论】:

    【解决方案2】:

    将元数据值 android:value="com.example.andreas.myapplication.MainActivity" 替换为 android:value=".MainActivity"

    要使用支持库支持旧设备,还需要包含一个元素,将父活动指定为 android.support.PARENT_ACTIVITY 的值,如下所示:

    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
         android:name="android.support.PARENT_ACTIVITY"
         android:value=".MainActivity" />
    

    A full explanation is here: http://programmerguru.com/android-tutorial/how-to-add-up-button-on-action-bar/

    【讨论】:

      【解决方案3】:

      我相信您需要在第二个活动中调用setContentView(textView); 之后再调用getSupportActionBar().setDisplayHomeAsUpEnabled(true);

      编辑:

      此外,主要活动不应调用getSupportActionBar().setDisplayHomeAsUpEnabled(true);,因为它无处可去。而且您应该添加一个按钮来切换活动,否则您将永远无法进入 DisplayMessageActivity。试试这样的:

      Intent showmessg = new Intent(getApplicationContext(), DisplayMessageActivity.class);
      startActivity(showmessg);
      

      希望它对你有用。

      来源:http://developer.android.com/training/basics/actionbar/adding-buttons.html#UpNav

      【讨论】:

      • 感谢您的建议,但无济于事。不会改变任何东西。这只是“儿童活动”。在主要活动中,作为图标的向上按钮也没有显示。我在代码中的意图,但不在我在这里展示的 onCreate 方法中。问题只是图标而已,但谢谢。
      • 应用程序在带有 的活动中启动,因此您需要一种方法来获取子类。阅读编辑。
      • 我通过“发送按钮”去找我的孩子。我有这个意图
      • /** 当用户点击发送按钮时调用 */ public void sendMessage(View view) { Intent intent = new Intent(this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById(R.id.edit_message); // EditText bei ID finden String message = editText.getText().toString();意图.putExtra(EXTRA_MESSAGE,消息);开始活动(意图); // Startet eine Instanz einer Aktivität die im Intent definiert ist, siehe new Aufruf }
      • 只需移动 getSupportActionBar().setDisplayHomeAsUpEnabled(true);在 setContentView(textView); 之后让我知道会发生什么。
      【解决方案4】:

      我认为在 android 5 和 API 21 中,我们不能使用应用图标进行向上操作。
      如果您的 appcompat 支持库是 v7 rev21,我认为您至少不能将应用程序图标用于向上操作。但是您可以使用它而不是左上角插入符号,或者您可以使用该插入符号右侧的应用程序图标,尽管如果您单击它,则不会发生任何事情。

      我有两个应用程序完全类似于其中一个培训,我使用较旧的 appcompat v7 和 minSdkVersion="11",我从未向其中添加 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
      ,但应用程序有应用程序图标,没有问题。但是在另一个应用程序中,我几天前将我的支持库更新为 rev21,当然这个应用程序的 minSdkVersion 是“8”,但是这个应用程序没有用于向上操作的 actionBar 图标,如果你向它添加顶部代码,你什么都不做。 我搜索了许多网站,只是我明白的是,在材料设计中,谷歌删除了用于向上操作的应用程序图标,因为操作栏等空间增加了。 你可以在this page看到这一行。

      “当使用 Material 主题(API 21 或更新版本中的默认值)时, 导航按钮(以前的“主页”)占据了之前的空间 被应用程序图标占用。希望表达更强的应用程序 品牌应该在操作栏中大量使用他们的品牌颜色,并且 其他应用程序 chrome 或使用 a 代替其标准标题 文本。”

      【讨论】:

        猜你喜欢
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多