Android组件的背景设置

在Android开发时,可以为View(这里的View指的是Android界面中的一个元素,例如按钮,文本框等,它们对应代码中的View类以及View类派生出来的子类)设置一个背景,这个背景可以是纯色的背景,也可以是复杂的图案。除了View之外,还可以为Activity,Dialog,PopupWindow等窗体(严格来说PopupWindow是附着在当前布局中的一个View,而不是一个独立的Window,但是从显示效果上来说,它和Window很像)设置背景。
这里主要介绍View,Activity,Dialog和PopupWindow的背景设置方法。注意,对Activity,Dialog和PopupWindow来说,它们的背景和它们内部View的背景是相互独立的,可以同时设置自身背景和内部View的背景,内部View的背景会覆盖在自身背景之上。

Android View的背景设置

设置View的背景,可以在xml中设置,或者可以在代码中调用这个View设置背景的相关方法。

xml中设置View背景

在xml中可以通过设置View的android:background属性来设置背景。属性值可以是一个颜色值,也可以是某个drawable或color资源,还可以是@null。属性值为@null表示不设置背景,可以用在一些本来就已经有默认背景的View上。

代码中设置View背景

在代码中设置View背景的方法有四个,分别为setBackgroundColor(), setBackgroundResource(), setBackground()和setBackgroundDrawable()。

  • setBackgroundColor()
    设置背景为某个颜色,参数为int类型的颜色值。这里有两点需要注意。
    1. 参数不能是资源中配置的颜色值,也就是说不能是R.color.xxxx这种形式。
    2. 参数中的颜色值如果是没有透明度的,则整数值的高8位一定是0xFF,比如红色的颜色值应该是0xFFFF0000,而不是0xFF0000,如果设置成0xFF0000,表示背景为完全透明的红色,这时背景上什么也不会显示。这点和xml中是不一样的,在xml中,如果颜色没有透明度,是不需要指定高8位的,红色用0xFF0000表示即可。
  • setBackgroundResource()
    设置背景为某个资源。参数为int类型的数,它的取值可以是一个资源id或者0。当它是一个资源id时,资源类型可以是drawable,也可以是color。也就是说可以是R.drawable.xxxx或者是R.color.xxxx的形式。当参数为0时,表示没有背景。
  • setBackground()和setBackgroundDrawable()
    setBackground()和setBackgroundDrawable()这两个方法的作用是完全相同的,不同的是setBackground()是API Level16之后(包括16)才有的new api,而setBackgroundDrawable()则是API Level16之前使用的,目前已被标记为deprecated。所以如果应用不需要支持API Level16以下的系统,就直接调用setBackground()即可。如果要支持,则需要根据当前系统版本来决定使用哪个方法。这两个方法参数都是一个Drawable对象,参数可以为null,当参数为null时,表示没有背景。

示例

这两种方式示例如下。


<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的背景永远只有一个,也就是只会显示最近一次设置的背景。而不会将这些背景叠加在一起。

Android Activity的背景设置

和设置View的背景一样,设置Activity的背景既可以在xml中设置,也可以在代码中调用相关方法来设置。

xml中设置Activity背景

可以在该Activity对应的Theme中增加android:windowBackground的设置,如果Activity没有应用Theme,则也可以在Application对应的Theme中设置。android:windowBackground的属性值可以是某个drawable或color资源,也可以是@null。属性值为@null表示没有背景。和android:background设置不同的是,这里不能直接取某个颜色值。

代码中设置Activity背景

在Activity类中并没有直接的设置背景的方法,要设置Activity背景,需要先通过getWindow()方法获取到对应的Window(窗口)对象,然后通过Window对象的setBackgroundDrawableResource()或setBackgroundDrawable()方法来设置。

  • setBackgroundDrawableResource()
    设置背景为某个资源,参数为int类型的数,它的取值可以是一个资源id或者0。当它是一个资源id时,资源类型可以是drawable,也可以是color。也就是说可以是R.drawable.xxxx或者是R.color.xxxx的形式。当参数为0时,表示没有背景。
  • setBackgroundDrawable()
    设置背景为某个Drawable对象,参数可以为null,当参数为null时,表示没有背景。

示例

这两种方式示例如下。


<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));

Android Dialog的背景设置

同样,Dialog背景既可以在xml中设置,也可以在代码中调用相关方法来设置。

xml中设置Dialog背景

和Activity一样,xml中Dialog的背景设置同样需要借助style。可以先创建一个style,然后设置android:windowBackground。android:windowBackground的属性值可以是某个drawable或color资源,也可以是@null。属性值为@null表示没有背景,这里同样不能直接取某个颜色值。要将该style应用到Dialog上,只需要在创建对话框的时候,将该style作为参数传递给Dialog的构造方法即可。

代码中设置Dialog背景

代码中设置Dialog背景的方法和Activity完全一样。即先通过getWindow()方法获取到对应的Window对象,然后通过Window对象的setBackgroundDrawableResource()或setBackgroundDrawable()方法来设置。

  • setBackgroundDrawableResource()
    设置背景为某个资源,参数为int类型的数,它的取值可以是一个资源id或者0。当它是一个资源id时,资源类型可以是drawable,也可以是color。也就是说可以是R.drawable.xxxx或者是R.color.xxxx的形式。当参数为0时,表示没有背景。
  • setBackgroundDrawable()
    设置背景为某个Drawable对象,参数可以为null,当参数为null时,表示没有背景。

示例

这两种方式示例如下。


<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的背景设置

对Android PopupWindow来说,其背景只可以在代码中设置。

代码中设置PopupWindow背景

PopupWindow类提供了setBackgroundDrawable()方法来设置背景。其用法和上面的View,Window的setBackgroundDrawable()方法完全一样。

  • setBackgroundDrawable()
    设置背景为某个Drawable对象,参数可以为null,当参数为null时,表示没有背景。

示例


PopupWindow pop = new PopupWindow(this);
pop.setBackgroundDrawable(new ColorDrawable(0xFFFF0000));

你可能感兴趣的:(Android)