Ich habe etwas seltsames Verhalten in der kontextabhängigen Aktionsleiste.Contextual Action Bar seltsames Verhalten für den Menüpunkt
Erstens:
Zweitens/drittens:
Gibt es eine Möglichkeit, dass die Symbole
Ein Menüpunkt wird nur jedes zweite Mal, dass ich auf der Überlauf-Taste klicken gezeigt nutze nicht so viel Platz?
Wenn ich hinzufügen Eigenschaft ändern android:showAsAction="always"
auf alle Elemente gibt tatsächlich genügend Platz ist, alle Symbole zeigen - aber meinen Anteil Symbol ist anklickbar nicht mehr:
reinigen Projekt nicht Hilfe.
Ich verwende Android 4.2.2 auf meinem Testgerät (Galaxy S3).
Ich versuchte sogar völlig neues ROM auf meinem XXX GS3 zu blinken (CyanogenMod 10.1 jetzt, bevor SlimBean, auch die navigationbar bei am Boden entfernt) - half nicht.
Ich habe es auch auf einer Nexus 4 versucht. Da mehr Platz vorhanden ist, sind die Schaltfläche "Teilen" und die Schaltfläche "Löschen" sichtbar. Die Share-Taste ist nicht anklickbar, wenn ich den Action-Modus starte, aber wenn ich das Gerät in den Querformat-Modus drehe, funktioniert es, und wenn ich es ins Hochformat zurückstelle, funktioniert es immer noch. So grundlegend auf dem Nexus 4, funktioniert der Share-Button nicht vor dem Drehen.
Manifest:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
Kompilieren gegen minSdkVersion=17
macht keinen Unterschied.
ich das Action-Modus aus einem Fragment wie folgt beginnen:
mActionMode = activity.startActionMode(mMultipleCallback);
Im ActionMode.Callback
besiedeln ich das Menü:
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.management_cab, menu);
MenuItem item = menu.findItem(R.id.managementCABShare);
mShareActionProvider = (ShareActionProvider) item.getActionProvider();
//...other stuff
return true;
}
Und hier ist der XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:title="@string/checkAll"
android:id="@+id/managementCABCheckAll"
android:icon="@android:drawable/checkbox_on_background">
</item>
<item
android:title="@string/enable"
android:id="@+id/managementCABEnable"
android:icon="@drawable/sphere_green">
</item>
<item
android:title="@string/disable"
android:id="@+id/managementCABDisable"
android:icon="@drawable/sphere_red">
</item>
<item
android:title="@string/delete"
android:id="@+id/managementCABDelete"
android:icon="@android:drawable/ic_menu_close_clear_cancel">
</item>
<item
android:title="@string/share"
android:id="@+id/managementCABShare"
android:actionProviderClass="android.widget.ShareActionProvider"
android:icon="@android:drawable/ic_menu_share">
</item>
<item
android:title="@string/export"
android:id="@+id/managementCABExport"
android:icon="@drawable/explorer">
</item>
</menu>
Der Vollständigkeit halber ist das ganze callback
:
protected ActionMode.Callback mMultipleCallback = new ActionMode.Callback() {
private ShareActionProvider mShareActionProvider;
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.management_cab, menu);
MenuItem item = menu.findItem(R.id.managementCABShare);
mShareActionProvider = (ShareActionProvider) item.getActionProvider();
hideUnwantedCABItems(menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
List<Integer> checkedPositions = getAllCheckedPositions();
switch (item.getItemId()) {
case R.id.managementCABCheckAll:
changeCheckedOfAllItems(true);
return true;
case R.id.managementCABEnable:
changeEnabled(checkedPositions, true);
return true;
case R.id.managementCABDisable:
changeEnabled(checkedPositions, false);
return true;
case R.id.managementCABDelete:
if (deleteAlert == null)
createDeleteDialog(checkedPositions);
initDeleteDialog(checkedPositions);
return true;
case R.id.managementCABShare:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, exportItemsAndGetUris(checkedPositions));
shareIntent.setType("application/xml");
setShareIntent(shareIntent);
return true;
case R.id.managementCABExport:
String message;
if (StorageController.copyUriListToExportFolder(exportItemsAndGetUris(checkedPositions)))
message = getActivity().getString(R.string.export_success);
else
message = getActivity().getString(R.string.export_fail);
Toast.makeText(getActivity(), message + ":\n" + StorageController.getExternalExportApplicationFolder(), Toast.LENGTH_LONG).show();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
changeCheckedOfAllItems(false);
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
private void setShareIntent(Intent shareIntent) {
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(shareIntent);
}
}
};
Sie verwenden v14 auf Ihrem Gerät oder kompilieren Sie gegen v14 SDK? –
wtf warum die down vote? Wie auch immer, ich benutze 4.2.2 auf meinem Gerät - überprüfen Sie die Bearbeitung zur Klarstellung –
Das war nicht ich, wenn Sie gegen v14 kompilieren, würde ich versuchen, zuerst gegen das neueste SDK zu kompilieren. –