web-dev-qa-db-ja.com

Androidでボタンのスタイルを動的に変更するにはどうすればよいですか?

ボタンのスタイルを動的に変更したい、つまりJavaコードで、次のようにします:

((Button)findViewById(id)).setStyle("@styles/foo")

<resources>
    <style name="foo">
        <item name="Android:adjustViewBounds">true</item>
        <item name="Android:maxHeight">100px</item>
        <item name="Android:maxWidth">200px</item>
    </style>
</resources>

私はsetStyleのようなものを見たことがないので、

すべてのプロパティを変更する必要がありますか、それともスタイル全体を変更できますか?

15
DarthRoman

このようなスタイルを割り当てるには

<style name="ButtonHOLO" parent="Android:Widget.Button">
      <item name="Android:background">@drawable/btn_default_holo_dark</item>
      <item name="Android:minHeight">@dimen/calc_btn_h</item>
      <item name="Android:minWidth">@dimen/calc_btn_w</item>
      <item name="Android:textColor">#ffffff</item>
</style>

ボタンに動的に追加するには、setBackgroundResource()関数とsetTextAppearance()関数の両方を使用する必要があります。例えば。:

btn.setBackgroundResource(R.drawable.btn_default_holo_dark);
btn.setTextAppearance(context, R.style.ButtonHOLO);

どこ

btn_default_holo_dark

ボタンのセレクターを記述する.xmlファイルの名前です。

18
Max
2

この明らかな欠陥を回避するために私が見つけた最も簡単な方法は、ボタンを作成することでした。それらの1つをVisibility.goneにします。次に、Visibilityをもう1つからgoneに変更し、Visibility.visibleを使用して最初の1つをアクティブにします。

私はその解決策はあまり好きではありませんが、これまでに見つけた代替策よりも高速で健全です。

1
jsbeckr

また、9つのパッチイメージを確認することもできます。これらは、アプリケーションを実行している現在のデバイスに基づいて、ウィジェットまたはボタンに関連付けられている画像サイズとテキストを調整するのに非常に役立ちます。

9パッチ

9パッチ描画ツール

0
user432209