【注意】ここに記載された内容の場合、一つのViewに対してのみ変更することが出来ます。
複数のViewの背景や枠線をそれぞれ変更したい場合は、以下の記事をご参照下さい。
続・Viewの枠線と背景色を動的に設定する Android&iOS(Objective-C)

ボタンに枠線と背景色を動的に設定する方法がわからなかったので、メモです。

まず、 以下のようなXMLファイルを用意して、res/drawableに適当な名前で保存します。
 
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="2px" android:color="#ffffff" />
<padding android:left="2px" android:top="2px"
android:right="2px" android:bottom="2px" />
<corners android:radius="4px" />
</shape>
XMLファイルをdrawableに設定すれば、枠線が表示されます。ボタンに白い枠線が表示されました。
button.setBackgroundResource(R.drawable.border);
sc1

この時に背景色を変更しようとして以下のように書くと、ボーダーが消えてしまいます。
button.setBackgroundColor(Color.GREEN);
sc3


どうやら、背景はボーダーや色などが一括で設定されるようです(ものすごく初歩的なことだと思うのですが、あまり理解していません。すみません)。
というわけで、一旦背景の情報を取得してから変更することでボーダーや背景を変更することができます。

// 背景色を変更
GradientDrawable bgShape = (GradientDrawable)button.getBackground();
bgShape.setColor(resColor(R.color.Green));
bgShape.setStroke(4, resColor(R.color.DeepPink));
bgShape.setCornerRadius(2.5f);
resColor()はリソースからColor情報を変換するためのメソッドで、以下のような感じです。
int resColor(int res){
    return getResources().getColor(res);
}
setColorで色を設定、setStrokeで枠線の幅と色、setCornerRadiusで角の丸みを変更しています。
これを適用すると、以下のように反映されました。
 
sc2
 
ちょっと南米の昆虫のような配色になっていますね。
ちなみにリソースのカラー設定は、stackoverflowにあった以下のトピックから選んだものを使用しています。

 Android color xml resource file : stackoverflow