5

Uygulamamda, bazı durumlarda varsayılan olarak olmayan bir çekilişe ev yukarı yukarı göstergesini ayarladım. Bazen ev yukarı gösterge, değiştirildikten sonra varsayılan simgeye sıfırlanmalıdır.Destek eylem çubuğunu kullanarak varsayılan giriş ekranı nasıl gösterilir?

Ben documentation göre tema varsayılan kullanacak diyor

getSupportActionBar().setHomeAsUpIndicator(0); 

kullanarak denedim. Bunu, aşağıdaki hata ile uygulama çöker yaptığınızda:

05-15 11:12:03.160: E/AndroidRuntime(13021): FATAL EXCEPTION: main 
05-15 11:12:03.160: E/AndroidRuntime(13021): Process: xxxxx.yyyyyy.zzzzzz, PID: 13021 
05-15 11:12:03.160: E/AndroidRuntime(13021): android.content.res.Resources$NotFoundException: Resource ID #0x0 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.res.Resources.getValue(Resources.java:1233) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.res.Resources.getDrawable(Resources.java:756) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.Context.getDrawable(Context.java:402) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:319) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:133) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.widget.Toolbar.setNavigationIcon(Toolbar.java:754) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.internal.app.ToolbarActionBar.setHomeAsUpIndicator(ToolbarActionBar.java:176) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at xxxxx.yyyyyy.zzzzzz.updateHomeIndicator(aaaaa.java:1711) 

Eve göstergesi yukarı olarak özel bir set asla eğer, geri ok ince göründüğünden tema varsayılan değer, kurulumunun doğru biliyorum. Ben setHomeAsUpIndicator(0) çağrıyı denemeden önce setDisplayHomeAsUpEnabled(true) arıyorum.

Varsayılan ev kaynağım kadar önceliği varlık göstergesi olarak projemde her zaman kopyalayabildiğimi ve bu öğeyi doğrudan kullanabileceğimi biliyorum, ancak mümkün olduğunca bu geçici çözümü kullanmaktan kaçınmak istiyorum.

Teşekkürler!

Zach

Düzenleme:

Ben de hiçbir simgenin sonuçlanır

getSupportActionBar().setHomeAsUpIndicator(null); 

olursa olsun görüntülenen çalıştılar.

+0

Neden boole değeri yerine 0 geçiyorsunuz? –

+0

setHomeAsUpIndicator() API'si, bir çekilebilir veya bir int kaynak kimliği değeri gerektirir. Bunu gerçekleştiren (bildiğim kadarıyla) bir boolean paramater API'sı yoktur. – Zach

+2

@CarlosJ daha yakın okudu, işe yaramalı. dokümantasyon devletler: 'Bu yönteme 0 başarılı olursa bu belgelere göre mükemmel geçerli used.', tema varsayılan çekilebilir olacak, ancak özel bir simge ayarlamak, sen arayamayacağımı görünür Onu varsayılan sıfıra yeniden ayarlamak için sıfır ile sıfırlayın. Bu API ile bir köşe davası olmalı. –

cevap

0

ben kaynak kodunu izleyin: ToolbarActionBar.setHomeAsUpIndicator()

Ve kaynak kodunu gördüğünüzde: ContextCompat.getDrawable(), diyor: "0 değeri geçersiz tanıtıcı". Resources.getValue()

/** 
* Return the raw data associated with a particular resource ID. 
* 
* @param id The desired resource identifier, as generated by the aapt 
*   tool. This integer encodes the package, type, and resource 
*   entry. The value 0 is an invalid identifier. 
* @param outValue Object in which to place the resource data. 
* @param resolveRefs If true, a resource that is a reference to another 
*     resource will be followed so that you receive the 
*     actual final resource data. If false, the TypedValue 
*     will be filled in with the reference itself. 
* 
* @throws NotFoundException Throws NotFoundException if the given ID does not exist. 
* 
*/ 
public void getValue(int id, TypedValue outValue, boolean resolveRefs) 
     throws NotFoundException { 
    boolean found = mAssets.getResourceValue(id, 0, outValue, resolveRefs); 
    if (found) { 
     return; 
    } 
    throw new NotFoundException("Resource ID #0x" 
           + Integer.toHexString(id)); 
} 

Şimdiye kadar, ben herhangi bir özel işlem göremez:

/** 
* Return a drawable object associated with a particular resource ID. 
* <p> 
* Starting in {@link android.os.Build.VERSION_CODES#LOLLIPOP}, the returned 
* drawable will be styled for the specified Context's theme. 
* 
* @param id The desired resource identifier, as generated by the aapt tool. 
*   This integer encodes the package, type, and resource entry. 
*   The value 0 is an invalid identifier. 
* @return Drawable An object that can be used to draw this resource. 
*/ 
public static final Drawable getDrawable(Context context, int id) { 
    final int version = Build.VERSION.SDK_INT; 
    if (version >= 21) { 
     return ContextCompatApi21.getDrawable(context, id); 
    } else { 
     return context.getResources().getDrawable(id); 
    } 
} 

Ve kaynak kodunu takip tutmak ve nihayet kodu aşağıya bakınız, bu nerede size istisna atmak '0'. Yani, bence yukarıda yazdığınız resmi belgede bir hata var. Bu kilitlenme hatasını çözmenin kolay yolu, varsayılan simge kimliğiniz gibi mevcut bir tanımlayıcıyı kullanmaktır.

İlgili konular