Я нашел решение для вас, если вы готовы отказаться от использования XML для его рисования ...
Рисование от: Градиенты и тени на кнопках
Это то, что ты хочешь!Но разные цвета, размер и как кнопка ...
Bitmap bmResult = Bitmap.createBitmap(buttonWidth, buttonHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmResult);
Paint paint = new Paint();
paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0xFF284560, 0xFF284060, TileMode.MIRROR));
canvas.drawPaint(paint);
paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0x55FFFFFF, 0x22FFFFFF, TileMode.CLAMP));
paint.setMaskFilter(new BlurMaskFilter(3, BlurMaskFilter.Blur.NORMAL));
canvas.drawRect(0, 0, bmResult.getWidth(), bmResult.getHeight()/2, paint)
... изменение цвета, конечно.
Я не уверен, что вы могли бы использовать макет XMLи ссылаться на эту кнопку Java в одиночку, или вам придется в конечном итоге создать весь макет в Java, а не XML ... это был бы другой вопрос для SO.
Надеюсь, что это поможет.Хотя это может быть моим невежеством, но я бы также порекомендовал пойти по маршруту 9 патчей.
PS Я абсолютно новичок в Java и использую растровые изображения, поэтому я опубликую более полное решение для вашего случая, если я все выясню.