2013年6月26日水曜日

Buttonの背景色

Buttonの背景色

Buttonの色が背景色と混合されてしまって、不細工な色になってしまっている。

Android2.3の場合は、背景の色とButtonの画像とは別々であった。
しかし、少なくともAndroid4.2では、背景色とButtonの画像が混じり合って表示されるため、不細工になっている(主観の問題ですが)。背景色が真っ白の場合は問題は無いです。
この現象が発生するViewの構成
<LinearLayout>...上位にあるView。これに赤い色等の背景色を付ける
    <Button>...画像関係は何も操作しない。
背景の赤い色とButtonの灰色とが混じり合って、赤灰色のButtonが出来上がります。

解決策の模索
1.背景色を表示するViewとButtonとの間に、背景色が真っ白なViewを配置する。
<LinearLayout>...これに赤い色等の背景色を付ける
    <LinearLayout>...これに真っ白な背景色を付ける。
        <Button>...画像関係は何も操作しない。
しかし、LinearLayoutとButtonとは形状が異なるため、白色がハミ出てしまいます。ある種の御仁はハミ出た白色に魅力を感じるでしょう。

2.ThemeをLightにする。
res/values-v11やres/values-v14には、styles.xmlファイルがあるので、この中を次のようにする。
    <style name="AppBaseTheme" parent="android:Theme.Light">
    </style>
このようにすることで、Android2.3の場合と同じ表示になります。
Holoというのが新しいデザインです。Lightは昔のです。何か時代の波に残された感じがしますが、昔の方が良かったなとも感じます。

3.ボタンをShapeDrawableで描画する
これはまだ実施していないので、問題解決になるかどうかは知りません。

参考にしたサイトを掲示しておきます。

余談
画像処理においてsetBackgroundという名前が用いられているが、この言葉使いは誤解を生じる。私はズ~っとforegroundという画像処理の何かが存在するものだと思い込んでいたのだ(アホ)。なので、背景の画像と混じり合わないようにするため、setBackgroundColor()の引数にアルファ値を0xffにした値を代入したりしていた。そんなことをした結果、Buttonが真っ白や真っ黒になってしまい、ボタンの画像が消失した意味が分からなかった。ボタンの画像は、foregroundに描かれているに違いないという思い込みがあったのだ。(そんな思い込みをするのはアンタだけや!)
テキストはsetText()で処理をするのであるから、テキストがforegroundである訳はない。もし、テキストがforegroundであるならば、setTextという名前を用いずに、setForeground(String text)という名前にすべきだ。
反意語に相当するものが存在しないのに、一方の反意語だけを使って表現するのはやめて欲しい。
正確に表現しようとするならば、setGraphicなのではないかと思う。

余談に対するツッコミ
Buttonの内部にはViewとTextViewがあって、backgroundはViewに存在します。TextViewにはdrawable top, drawable left等が存在します。
たぶん、Viewが基底部分にあって、その画像であるため、backgroundという用語を使用しているのだろうと思います。

ちなみに、SeekBarは、ViewとProgressBarから構成されています。Viewにおけるbackgroundで何か画像を設定して、ProgressBarにおけるdrawableで何か画像を設定した場合、Viewの画像が背景に見えて、ProgressBarにおける画像が手前に見えるようになります。

0 件のコメント:

コメントを投稿