SDK21上的操作栏图标

时间:2014-10-29 22:47:55

标签: android android-actionbar

也许这是一个非常基本的问题,但我搜索了很多,并没有找到解释为什么这不起作用......

我要做的是在操作栏的左侧显示我的应用程序图标,而不使用自定义视图,也不将其作为向上按钮启用...

我尝试了setIcon,setLogo,它们都没有工作...... 我记得前一段时间显示图标是默认行为......

这是我的build.gradle和我的MainActivity。

谢谢!

的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.2'
    }
}
apply plugin: 'com.android.application'

repositories {
    jcenter()
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.0.2"

    defaultConfig {
        applicationId "br.com.example.myapplication2.app"
        minSdkVersion 9
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
}

MainActivity

package br.com.example.myapplication2.app;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;


public class MainActivity extends ActionBarActivity {

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

        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }

        ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle("My Profile");
        actionBar.setIcon(R.drawable.ic_launcher);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

根据Toolbar documentation

  
      
  • 标题和副标题。标题应该是工具栏在导航层次结构中的当前位置以及其中包含的内容的路标。字幕(如果存在)应指示有关当前内容的任何扩展信息。 如果应用使用徽标图片,则应强烈考虑省略标题和副标题。
  •   
     

在现代Android UI中,开发人员应该更多地依赖于工具栏的视觉上不同的颜色方案而不是应用程序图标。不鼓励在API 21设备和更新版本上使用应用程序图标和标题作为标准布局。

但是,如果您想要一个应用程序图标,setLogo()确实是正确的方法。

答案 1 :(得分:1)

今天看了这个,在阅读ianhanniballake的帖子之前。我花了几个小时来追踪为什么我的一些应用程序显示了这个图标,但其他人没有。

答案:用com.android.support:appcompat-v7:21.0.2替换com.android.support:appcompat-v7:20.0.0(或者您正在使用的任何新的支持appcompat)。

要在Android Studio中执行此操作: 按f4 转到依赖

删除21.0.2或您现在使用的任何内容。

单击添加 - 选择21.0.2并重命名文本7:20.0.0(或只输入完整的包名称)。

正如ianhanniballake所说。不再推荐使用该图标。然而,奇怪的是,标准软件包仍然使用它,而appcompats似乎默认它...