在Android开发时,可以为View(这里的View指的是Android界面中的一个元素,例如按钮,文本框等,它们对应代码中的View类以及View类派生出来的子类)设置一个背景,这个背景可以是纯色的背景,也可以是复杂的图案。除了View之外,还可以为Activity,Dialog,PopupWindow等窗体(严格来说PopupWindow是附着在当前布局中的一个View,而不是一个独立的Window,但是从显示效果上来说,它和Window很像)设置背景。
这里主要介绍View,Activity,Dialog和PopupWindow的背景设置方法。注意,对Activity,Dialog和PopupWindow来说,它们的背景和它们内部View的背景是相互独立的,可以同时设置自身背景和内部View的背景,内部View的背景会覆盖在自身背景之上。
设置View的背景,可以在xml中设置,或者可以在代码中调用这个View设置背景的相关方法。
在xml中可以通过设置View的android:background属性来设置背景。属性值可以是一个颜色值,也可以是某个drawable或color资源,还可以是@null。属性值为@null表示不设置背景,可以用在一些本来就已经有默认背景的View上。
在代码中设置View背景的方法有四个,分别为setBackgroundColor(), setBackgroundResource(), setBackground()和setBackgroundDrawable()。
这两种方式示例如下。
<FrameLayout
android:layout_width="50dp"
android:layout_height="50dp">
<View
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"/>
FrameLayout>
FrameLayout layout = (FrameLayout) findViewById(R.id.layout);
layout.setBackgroundColor(0xFFFF0000);
layout.setBackgroundResource(R.drawable.ic_launcher);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackground(new ColorDrawable(0xFFFF0000));
} else {
layout.setBackgroundDrawable(new ColorDrawable(0xFFFF0000));
}
需要注意的是,无论通过多少种方法来设置View的背景,View的背景永远只有一个,也就是只会显示最近一次设置的背景。而不会将这些背景叠加在一起。
和设置View的背景一样,设置Activity的背景既可以在xml中设置,也可以在代码中调用相关方法来设置。
可以在该Activity对应的Theme中增加android:windowBackground的设置,如果Activity没有应用Theme,则也可以在Application对应的Theme中设置。android:windowBackground的属性值可以是某个drawable或color资源,也可以是@null。属性值为@null表示没有背景。和android:background设置不同的是,这里不能直接取某个颜色值。
在Activity类中并没有直接的设置背景的方法,要设置Activity背景,需要先通过getWindow()方法获取到对应的Window(窗口)对象,然后通过Window对象的setBackgroundDrawableResource()或setBackgroundDrawable()方法来设置。
这两种方式示例如下。
<activity android:name=".MainActivity" android:theme="@style/myTheme">activity>
<style name="myTheme" parent="android:Theme.Light">
<item name="android:windowBackground">@android:color/transparent
style>
getWindow().setBackgroundDrawableResource(R.color.red);
getWindow().setBackgroundDrawable(new ColorDrawable(0xFFFF0000));
同样,Dialog背景既可以在xml中设置,也可以在代码中调用相关方法来设置。
和Activity一样,xml中Dialog的背景设置同样需要借助style。可以先创建一个style,然后设置android:windowBackground。android:windowBackground的属性值可以是某个drawable或color资源,也可以是@null。属性值为@null表示没有背景,这里同样不能直接取某个颜色值。要将该style应用到Dialog上,只需要在创建对话框的时候,将该style作为参数传递给Dialog的构造方法即可。
代码中设置Dialog背景的方法和Activity完全一样。即先通过getWindow()方法获取到对应的Window对象,然后通过Window对象的setBackgroundDrawableResource()或setBackgroundDrawable()方法来设置。
这两种方式示例如下。
<style name="my_dialog_style">
<item name="android:windowBackground">@android:color/transparent
style>
// 以下为代码中创建Dialog
Dialog dialog = new MyDialog(MainActivity.this, R.style.my_dialog_style);
getWindow().setBackgroundDrawableResource(R.color.red);
getWindow().setBackgroundDrawable(new ColorDrawable(0xFFFF0000));
对Android PopupWindow来说,其背景只可以在代码中设置。
PopupWindow类提供了setBackgroundDrawable()方法来设置背景。其用法和上面的View,Window的setBackgroundDrawable()方法完全一样。
PopupWindow pop = new PopupWindow(this);
pop.setBackgroundDrawable(new ColorDrawable(0xFFFF0000));