12

Stavo lavorando al mio vecchio ShareAction sul mio ActionBar e funzionava da quando ho aggiornato i miei pacchetti su SDK Manager. Ho visto this doc da Google che dice,Dimensione dell'elemento icona ShareAction su ActionBar con ShareActionProvider-v7

Per aggiungere una "quota" azione alla vostra attività, mettere un ShareActionProvider in risorsa menù del bar app. Per esempio:

E ho aggiunto la stessa senza l'aggiunta di alcun Icons:

<item android:id="@+id/action_share" 
    android:title="@string/share" 
    app:showAsAction="ifRoom" 
    app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/> 

usavo:

app:actionProviderClass="Mypackagename.ShareActionProvider" 

Con una consuetudine ShareActionProvider con il seguente code.you può vederlo here.

Ho visto un trucco o un trucco per farlo (con ShareActionProvider -v4) e tutto è andato bene da quando ho deciso di utilizzare android.support.v7.widget.ShareActionProvider.

Quindi, ecco il mio codice attualmente:

<item 
    android:id="@+id/shareac" 
    android:title="@string/share" 
    app:actionProviderClass="android.support.v7.widget.ShareActionProvider" 
    app:showAsAction="always" /> 

non ho usato il Icon perché here il dottore dice,

Non è necessario specificare un'icona , dal momento che il widget ShareActionProvider si prende cura del proprio aspetto e comportamento. Tuttavia, è necessario specificare con un titolo: android, nel caso in cui l'azione finisca nello nel menu di overflow.

E qui è quello che ho fatto finora:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main_details, menu); 
     // Locate MenuItem with ShareActionProvider 
     MenuItem item = menu.findItem(R.id.shareac); 
     // Fetch and store ShareActionProvider 
     mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); 
     Intent shareIntent = new Intent(); 
     shareIntent.setAction(Intent.ACTION_SEND); 
     Bundle extra = getIntent().getExtras(); 
     String title = extra.getString("title"); 
     Bundle extraurl = getIntent().getExtras(); 
     String url = extraurl.getString("url"); 
     shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this new project from something : " + title + url); 
     shareIntent.setType("text/plain"); 
     mShareActionProvider.setShareIntent(shareIntent); 
     return true; 
    } 

Quindi, ecco quello che vedo in questo momento in Android Studio 1.5.1 è,

enter image description here

E se esegui e compili l'app:

enter image description here

Come si può vedere, la dimensione di ShareAction è troppo. (Sta violando la linea guida MaterialDesign immagino).


ho dimenticato di dire, ho già provato android:icon="@mipmap/ic_share" quale esse sono state lavorando con il mio precedente metodo/trucco.Ma, controllare questo Anteprima da AndroidStudio:

enter image description here

E qui viene dopo compilato:

enter image description here

nulla è cambiato!

Quindi, la mia domanda: è un bug o cosa sto sbagliando qui?

Intent.createChooser non ha funzionato anche: da: https://stackoverflow.com/a/34797718/4409113

Edit:

La parte più interessante, ho appena visto lo stesso design e le stesse resutls da Google sul seguente corso e su quella app, che hanno chiamato SunShine app:

Applink

corso:

https://www.udacity.com//course/viewer#!/c-ud855/l-3961788738/m-4294896397

+0

Hai provato a utilizzare solo un'icona? Se questo corregge la dimensione, sarà più efficiente in fase di esecuzione rispetto a ridimensionare l'icona corrente. –

+0

Ho appena aggiornato la domanda. Ho dimenticato di dirlo. Ma i documenti sono sbagliati? guarda il ** Non è necessario specificare un'icona ** – Mohsen

+0

Non è necessario, ma se stai cercando di raggiungere la dimensione dell'icona la tua migliore scommessa è provare un'icona e vedere se questo risolve il problema . Potrebbe utilizzare le icone di Holo più delle icone del design. Prova ad aggiungere un'icona e vedere se funziona. –

risposta

4

Va bene, come ianhanniballake a this post ha detto,

Icone in material design sono 24dp x 24dp, come correttamente riflesso dallo SearchView. Tuttavia, ShareActionProvider non è stato ancora aggiornato alla struttura del materiale per impostazione predefinita.

A proposito, ho appena postato una domanda/report per code.google.com che potete vedere qui:

http://code.google.com/p/android/issues/detail?id=200335

Sembra che l'icona di default è 24dp x 24dp ma dovrebbe essere il seguente:

enter image description here

Ma ora, è in questo modo:

enter image description here

sembra essere un bug e ancora in attesa di accettare o rispondere su it.I'll aggiornare questo post se answered.7 giorni passati !

UPDATE:

Infine, hanno assegnato il difetto al team di sviluppo e ad aggiornare la questione con ulteriori informazioni non appena disponibili.

Grandi grazie a [email protected] a Google per il supporto.

La risposta è disponibile qui: http://code.google.com/p/android/issues/detail?id=200335#c10

Voglio aggiornare questa risposta se eventuali aggiornamenti o eventuali correzioni era disponibile.

UPDATE:http://code.google.com/p/android/issues/detail?id=200335#c12

Salve, Il team di sviluppo ha risolto il problema che si è riferito e sarà disponibile in una futura generazione. Grazie

+2

Questo problema persiste ancora in com.android.support:appcompat-v7:25.0.0. Sembra che Android abbia ripristinato la correzione e il suo ritorno ad essere un'icona grande. – Thupten

1

cambiare l'icona Pragmaticamente

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main_details, menu); 
    // Locate MenuItem with ShareActionProvider 
    MenuItem item = menu.findItem(R.id.shareac); 
    // Fetch and store ShareActionProvider 
    mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); 
    Intent shareIntent = new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    Bundle extra = getIntent().getExtras(); 
    String title = extra.getString("title"); 
    Bundle extraurl = getIntent().getExtras(); 
    String url = extraurl.getString("url"); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this new project from something : " + title + url); 
    shareIntent.setType("text/plain"); 
    mShareActionProvider.setShareIntent(shareIntent); 
    //Here 
    item.setIcon(getResources().getDrawable(R.drawable.ic_share)); 
    return true; 
} 

o Tema

<item name="actionModeShareDrawable">@drawable/ic_share</item> 
+0

Grazie, ma sembra che il documento sia sbagliato o che sia un bug. quello non ha funzionato. – Mohsen

3

Icone in design dei materiali sono 24dp x 24dp, come pr operativamente riflesso dallo SearchView. Tuttavia, ShareActionProvider non è ancora stato aggiornato alla progettazione del materiale per impostazione predefinita.

È possibile impostare actionModeShareDrawable nel tema per impostare l'icona di condivisione nella ShareActionProvider:

<item name="actionModeShareDrawable">@drawable/share_icon</item> 

Nota che ShareActionProvider non si trova da nessuna parte nelle linee guida di progettazione dei materiali e con capacità di diretto la quota di Android M (che richiede utilizzare un intento di condivisione standard al momento), non è chiaro se lo ShareActionProvider sia un modello suggerito.

Per ulteriori dettagli visita qui.

AppCompat ShareActionProvider icon is too big compared to other icons

+0

Come potete vedere, 'actionModeShareDrawable' non ha funzionato, btw, sembra che quel link abbia avuto lo stesso problema. – Mohsen

-1

Se non avete bisogno di un'icona personalizzata per voce di menu Condividi quindi provare risorsa Android per la quota di menuitem come di seguito:

<item android:id="@+id/action_share" 
    android:title="@string/share" 
    app:showAsAction="ifRoom" 
    android:icon="@android:drawable/ic_share" 
    app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/> 

Vedi here

+0

Sei sicuro che questo è quello che stavo cercando? Hai mai letto la domanda? – Mohsen

Problemi correlati