1

I know that you can find menu items by overwriting onCreateOptionMenu. This is what i have..

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.gatt_services, menu);
    if (mConnected) {
        menu.findItem(R.id.menu_connect).setVisible(true);
        menu.findItem(R.id.menu_disconnect).setVisible(false);
    } else {
        menu.findItem(R.id.menu_connect).setVisible(false);
        menu.findItem(R.id.menu_disconnect).setVisible(true);
    }
    return true;
}

but i want to change the menu item to be green in this function

private void displayGattServices(List<BluetoothGattService> gattServices) {
    if (gattServices == null) return;
    String uuid = null;
    String unknownServiceString = getResources().getString(R.string.unknown_service);
    ArrayList<HashMap<String, String>> gattServiceData = new ArrayList<HashMap<String, String>>();


    // Loops through available GATT Services.
    for (BluetoothGattService gattService : gattServices) {
        HashMap<String, String> currentServiceData = new HashMap<String, String>();
        uuid = gattService.getUuid().toString();
        currentServiceData.put(
                LIST_NAME, SampleGattAttributes.lookup(uuid, unknownServiceString));

        // If the service exists for HM 10 Serial, say so.
        if(SampleGattAttributes.lookup(uuid, unknownServiceString) == "HM 10 Serial") {
            isSerial.setText("Serial");
                                  //<I WANT TO CHANGE menu_connect TO BE GREEN HERE>
        } else {
            isSerial.setText("No, serial :-(");
        }
        currentServiceData.put(LIST_UUID, uuid);
        gattServiceData.add(currentServiceData);

        // get characteristic when UUID matches RX/TX UUID
         characteristicTX = gattService.getCharacteristic(BluetoothLeService.UUID_HM_RX_TX);
         characteristicRX = gattService.getCharacteristic(BluetoothLeService.UUID_HM_RX_TX);
    }

}

AndroidManifest.xml

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

<uses-sdk
    android:minSdkVersion="18"
    android:targetSdkVersion="22" />

<uses-feature
    android:name="android.hardware.bluetooth_le"
    android:required="true" />

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"></uses-permission>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.DeviceDefault.Light">
    <activity
        android:name=".DeviceScanActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".DeviceControlActivity"
        android:screenOrientation="portrait" />

    <service
        android:name=".BluetoothLeService"
        android:enabled="true" />

    <activity android:name=".Images">
    </activity>
</application>

I have tried several examples i found online, including this but in this.menu = menu; , the compiler gives 'cannot resolve menu' error. Also, how do i change the color of the menu item?

Any help would be greatly appreciated. Thank you.

tzj
  • 93
  • 8

1 Answers1

2

First, save a reference to the menu as a field. This will solve the "cannot resolve menu" error:

Menu menu = null; // Add this line
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.gatt_services, menu);
    this.menu = menu // Add this line
    if (mConnected) {
        menu.findItem(R.id.menu_connect).setVisible(true);
        menu.findItem(R.id.menu_disconnect).setVisible(false);
    } else {
        menu.findItem(R.id.menu_connect).setVisible(false);
        menu.findItem(R.id.menu_disconnect).setVisible(true);
    }
    return true;
}

Then you can color whichever icon you want with this code:

private void colorMenuItemForId(int menuItemId, int color){
    MenuItem menuItem = menu.findItem(menuItemId);
    Drawable icon = menuItem.getIcon();
    if (icon != null) { // If you want to color an icon
         icon.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
         menuItem.setIcon(icon);
    }
    // If you want to set the text color
    SpannableString ss = new SpannableString(menuItem.getTitle());
    ss.setSpan(new ForegroundColorSpan(color), 0, ss.length(), 0);
    menuItem.setTitle(ss);
}
tim.paetz
  • 2,635
  • 20
  • 23