2015-01-19 3 views
0

Я пишу простую учебную программу, и по какой-то причине мой значок приложения не отображается (я хочу использовать его как кнопку навигации, а не стрелку).Показать значок приложения в панели действий под api 11

Как указано в теме, я хочу сделать это на уровне Апи 11, однако все решения, которые я нашел, полагаются на метод setIcon.

getActionBar().setIcon(R.drawable.ic_launcher); //only on API >= 14 

фрагмент предварительного просмотра в Android студии 1.0.2 действительно показывает значок, однако эмулятор не делает, поэтому я бы ожидать, что ресурс ок. Кроме того, значки поиска и удаления работают как шарм. Я пробовал установить это как значок, так и логотип безрезультатно.

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.yamba" 
    android:versionCode="1" 
    android:versionName="1.0" 
    > 

    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="21"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light" 
     android:logo="@drawable/ic_launcher" 
     > 
     <activity 
      android:parentActivityName=".MainActivity" 
      android:name=".StatusActivity" 
      android:label="@string/app_name" > 
     </activity> 
     <!--- The labe is what's displayed at the taskbar!--> 
     <activity 
      android:parentActivityName=".MainActivity" 
      android:name=".SettingsActivity" 
      android:label="@string/title_activity_settings" > 
     </activity> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

activity_settings.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" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 

    tools:context="com.example.yamba.SettingsActivity"> 

    <TextView android:text="" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 

menu_settings.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.example.yamba.SettingsActivity"> 
    <item android:id="@+id/action_settings" android:title="@string/action_settings" 
     android:orderInCategory="100" app:showAsAction="never" /> 
</menu> 

SettingsActivity.java

package com.example.yamba; 

import android.annotation.TargetApi; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Build; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


public class SettingsActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState == null){ 
      SettingsFragment fragment = new SettingsFragment(); 
      getFragmentManager().beginTransaction().add(android.R.id.content, fragment, fragment.getClass().getSimpleName()).commit(); 
      setContentView(R.layout.activity_settings); 
//   getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); 
//   only for API>=14 
//   getActionBar().setDisplayShowHomeEnabled(true); 
//   getActionBar().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.menu_settings, menu); 
//  return true; 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.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(); 
     switch(id){ 
      case R.id.action_settings: 
       startActivity(new Intent(this, SettingsActivity.class)); 
       return true; 
      case R.id.action_tweet: 
       startActivity(new Intent(this, com.example.yamba.StatusActivity.class)); 
       return true; 
      default: 
       return false; 
     } 
    } 
} 

SettingsFragment.java

package com.example.yamba; 

import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceFragment; 
import android.preference.PreferenceManager; 

/** 
* Created by me on 19-01-2015. 
*/ 
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { 

    private SharedPreferences prefs; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 
    } 
    public void onStart(){ 
     super.onStart(); 
     prefs= PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     prefs.registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 

    } 
} 

Я наткнулся на предложение, что я могу быть в состоянии определить свой стиль на основе одного из существующих стилей, но может Понятно, как подойти к нему.

Если вам нужен другой файл, дайте мне знать и спасибо за ваше время.

+0

Что 'setLogo()' делает? Также обратите внимание на 'DISPLAY_USE_LOGO'. – shkschneider

ответ

1

так как это API 11 .. Вы пытались использовать библиотеки поддержки? попробуйте переключить

getActionBar().setIcon(R.drawable.ic_launcher); 

с:

getSupportActionBar().setIcon(R.drawable.ic_launcher); 

скажите мне, если это работает, и мы будем продолжать оттуда :)

+0

Это решило проблему! Значок странно большой, но я мог бы поменять его на физически меньшее изображение. Большое спасибо! Остается только стрелка - могу ли я использовать значок в качестве кнопки вверх вместо стрелки? – user3002166

Смежные вопросы