However, I would like to add a drop shadow to a button, rather than the text of the soft button.
I assume that you want to shadow you, that you have built. If yes, do LayerDrawable with other Drawable (placed first), which will act as a shadow:
RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); [] {12f, 12f, 12f, RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); 12f}, null, null); RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); ; RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); height) { RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); # e5e5e5"), RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); , new float [] { RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); [] {sds, sd}); RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); start right at the left / top RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0); leave a bit of space for the shadow to use RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null); ShapeDrawable sds = new ShapeDrawable(rss); sds.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0, 0, 0, height, new int[] { Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5"), Color.parseColor("#e5e5e5") }, new float[] { 0, 0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT); return lg; } }); LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd }); ld.setLayerInset(0, 5, 5, 0, 0);