更多精彩内容,请点击阅读:《API Demos 2.3 学习笔记》
View的可见性主要分为三种, VISIBLE(可见)、 INVISIBLE(不可见)、 GONE(彻底隐藏)。这三种可见性的区别在于:
1、VISIBLE(可见)代表该View对象显示可见;
2、INVISIBLE(不可见)代表该View对象隐藏不可见,但是仍然占据着Layout布局中的位置;
3、GONE(彻底隐藏)代表该View对象彻底隐藏不可见,并且不占据Layout布局中的位置;
下面我们以TextView为例,简单介绍View的三种可见性以及相应的设置方法。
1、在Java代码中设置可见性
在Java代码中,我们通过函数public void setVisibility (int visibility)来设置View的可见性,其中参数 visibility取值范围如下:View.VISIBLE、View.INVISIBLE、以及View.GONE。具体参考如下:
private View mVictim = null; // 通过findViewById获得一个待改变可见性的View对象 mVictim = findViewById(R.id.victim); //设置mVictim彻底隐藏 mVictim.setVisibility(View.GONE);2、在xml布局文件中
在xml布局文件中,我们通过设置“android:visibility”属性来设置View可见性。该属性取值范围如下所示:
常量 |
值 |
描述 |
---|---|---|
|
0 |
屏幕可见,默认取值。 |
|
1 |
屏幕上显示,但是在Layout布局上会占据相应位置。 |
|
2 |
彻底隐藏不显示,并且不会在Layout布局上占据任何位置。 |
具体设置参考如下:
<TextView android:id="@+id/victim" android:background="@drawable/green" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:text="@string/visibility_1_view_2"/>
下面我们进行实例代码解析:
res-value-string.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="visibility_1_view_1">View A</string> <string name="visibility_1_view_2">View B</string> <string name="visibility_1_view_3">View C</string> <string name="visibility_1_vis">Vis</string> <string name="visibility_1_invis">Invis</string> <string name="visibility_1_gone">Gone</string> </resources>
<?xml version="1.0" encoding="utf-8"?> <!--改变View可见性的实例演示,请参考相应的Java代码。 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!--一个线性垂直布局,包含三个TextView对象 --> <LinearLayout android:orientation="vertical" android:background="@drawable/box" android:layout_width="match_parent" android:layout_height="wrap_content"> <!--一个背景色为红色的TextView对象 --> <TextView android:background="@drawable/red" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:text="@string/visibility_1_view_1"/> <!--一个背景色为绿色的TextView对象 --> <TextView android:id="@+id/victim" android:background="@drawable/green" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:text="@string/visibility_1_view_2"/> <!--一个背景色为蓝色的TextView对象 --> <TextView android:background="@drawable/blue" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:text="@string/visibility_1_view_3"/> </LinearLayout> <!--一个线性水平布局,包含三个Button对象 --> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/vis" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/visibility_1_vis"/> <Button android:id="@+id/invis" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/visibility_1_invis"/> <Button android:id="@+id/gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/visibility_1_gone"/> </LinearLayout> </LinearLayout>
src-com.example.android.apis.view-Visibility1.java
package com.example.android.apis.view; import com.example.android.apis.R; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * 设置一个View对象可见,不可见,彻底消失的实例演示 * */ public class Visibility1 extends Activity { private View mVictim = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.visibility_1); // 通过findViewById获得一个待改变可见性的View对象 mVictim = findViewById(R.id.victim); // 通过findViewById获得三个Button对象 Button visibleButton = (Button) findViewById(R.id.vis); Button invisibleButton = (Button) findViewById(R.id.invis); Button goneButton = (Button) findViewById(R.id.gone); // 给每个Button添加点击监听器 visibleButton.setOnClickListener(mVisibleListener); invisibleButton.setOnClickListener(mInvisibleListener); goneButton.setOnClickListener(mGoneListener); } OnClickListener mVisibleListener = new OnClickListener() { public void onClick(View v) { //设置mVictim可见 mVictim.setVisibility(View.VISIBLE); } }; OnClickListener mInvisibleListener = new OnClickListener() { public void onClick(View v) { //设置mVictim不可见 mVictim.setVisibility(View.INVISIBLE); } }; OnClickListener mGoneListener = new OnClickListener() { public void onClick(View v) { //设置mVictim彻底隐藏 mVictim.setVisibility(View.GONE); } }; }
该属性用于设置View的背景,取值可以是背景图片或者背景颜色,可以是系统内置的,也可以是自定义的。其中系统内置图片的引用上一节已经讲过,这里不再赘述。这里我们简单介绍如何定义和引用自定义颜色。
1、打开工程下res-value-color.xml文件,如果没有,请新建一个,文件内容参考如下:
其中name字段为颜色资源名称,#开头的数字为具体颜色值。
<?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="red">#7f00</drawable> <drawable name="blue">#770000ff</drawable> <drawable name="green">#7700ff00</drawable> <drawable name="yellow">#77ffff00</drawable> <drawable name="screen_background_black">#ff000000</drawable> <drawable name="translucent_background">#e0000000</drawable> <drawable name="transparent_background">#00000000</drawable> <color name="solid_red">#f00</color> <color name="solid_blue">#0000ff</color> <color name="solid_green">#f0f0</color> <color name="solid_yellow">#ffffff00</color> </resources>
2、对于 drawable和color两种标签的颜色资源,引用方式稍有不同,具体参考如下:
对于color颜色资源的引用:
<TextView android:background="@color/solid_blue" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:text="@string/visibility_1_view_1"/>
对于drawable颜色资源的引用:
<TextView android:background="@drawable/red" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:text="@string/visibility_1_view_1"/>
预览效果: