购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 常用控件

除了TextView、EditText和Button,比较常用的控件还包括单选按钮、下拉列表和复选框等。

4.3.1 RadioGroup和RadioButton

RadioButton指的是一个单选按钮,它有选中和不选中两种状态,而RadioGroup组件则被称为单项按钮组,它将多个RadioButton整合为一组,从而保证每次只能选择一个RadioButton,实现互斥。也就是说,一个单选按钮组只可以勾选一个按钮,当选择一个按钮时,会取消按钮组中其他已经勾选的按钮的选中状态。

RadioButton使用到的常用方法见表4-8。

表4-8 RadioButton常用方法

RadioGroup中使用到的常用方法见表4-9。

表4-9 RadioGroup常用方法

4.3.2 Checkbox控件

多项选择CheckBox组件也被称为复选框,该组件常用于某选项的打开或者关闭。与单选按钮的区别在于它可以让用户进行多项选择。这里需要注意,既然用户可以选择多项,为了确定用户是否选择了选项,需要对每个选项进行监听。

常用方法见表4-10。

表4-10 Checkbox常用方法

续表

4.3.3 ImageButton控件

除了使用Button按钮外,还可以使用带图标的按钮——ImageButton组件。要使用ImageButton,首先在布局文件中定义ImageButton,然后通过src属性,设置要显示的图片。下面是ImageButton的示例代码:

<ImageButton

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:src="@drawable/p1" //使用自己的图片

/>

<ImageButton

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:src="@android:drawable/sym_call_incoming " //使用系统自带的图片

/>

常用属性见表4-11。

表4-11 ImageButton常用属性

ImageButton的事件监听与Button类似,这里不再举例。

4.3.4 ImageView控件

ImageView显示任意图像,例如图标。ImageView类可以加载各种来源的图片(如资源或图片库),需要计算图像的尺寸,比便它可以在其他布局中使用,并提供如缩放和着色(渲染)等各种显示选项。

常用属性见表4-12。

表4-12 ImageView常用属性

4.3.5 Spinner控件

Spinner功能类似RadioGroup,相比RadioGroup,Spinner提供了体验性更强的UI设计模式。一个Spinner对象包含多个子项,每个子项只有两种状态:选中或未被选中。

可以使用SetPromp方法设置android:prompt属性,也就是对话框的标题。该提示在下拉列表对话框显示时显示。

例如:SetPrompt(" 请选择颜色")。

4.3.6 注册实例

【例4-5】 注册几乎是每个Android 应用都包含的功能,本案例(Signup 实例)的注册内容比较广泛,包括用户名、密码、性别、学历、爱好等系统关心的各项信息。综合使用了上面所述的6 种控件,使用相对布局,如图4-14 所示,布局结构图如图4-15 所示。

图4-14 注册效果图

图4-15 注册布局结构图

实现步骤如下:

(1)创建新项目:项目名称Signup。

(2)添加用户名和密码:首先放置标题、用户名、密码和确认密码,其中标题居中显示。这里都使用了android:layout_below属性。

<TextView

android:id="@+id/signup_msg"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="注册"

android:textSize="25sp"

android:layout_margin="25dp"

android:layout_centerHorizontal="true" />

<EditText

android:id="@+id/username_msg"

android:layout_width="match_parent"

android:layout_depth="wrap_content"

android:layout_below="@+id/signup_msg"

android:singleLine="true"

android:hint="用户名"/>

<EditText

android:id="@+id/pwd_msg"

android:layout_width="match_parent"

android:layout_depth="wrap_content"

android:layout_below="@+id/username_msg"

android:hint="密码"/>

<EditText

android:id="@+id/rpwd_msg"

android:layout_width="match_parent"

android:layout_depth="wrap_content"

android:layout_below="@+id/pwd_msg"

android:hint="确认密码"/>

(3)添加性别控件:使用一个TextView显示提示文字“性别”,使用RadioGroup包含两个RadioButton控件。其中,RadioGroup使用了两个属性:android:layout_below="@+id/rpwd_msg"和android:layout_toRightOf="@+id/sex_msg",表示RadioGroup在确认密码的下方,提示文字的右侧。

<TextView

android:id="@+id/sex_msg"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:layout_below="@+id/rpwd_msg"

android:layout_marginTop="8dp"

android:text="性别"/>

<RadioGroup

android:id="@+id/rg_sex"

android:layout_width="match_parent"

android:layout_depth="wrap_content"

android:layout_below="@+id/rpwd_msg"

android:layout_toRightOf="@+id/sex_msg"

android:orientation="horizontal">

<RadioButton

android:id="@+id/sex_male"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="男"

android:checked="true"/>

<RadioButton

android:id="@+id/sex_female"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="女"/>

</RadioGroup>

(4)添加学历:关于学历,使用了Spinner控件,相当于html中的select下拉列表。Spinner绑定的数据源可以在XML中指定。

在string.xml中使用string-array构建数组,使用item添加数组元素:

<string name="academic_prompt"> 请选择学历</string>

<string-array name="academic" >

<item>博士</item>

<item>硕士</item>

<item>大学</item>

<item>高中</item>

</string-array>

然后在布局文件中,插入Spinner,使用spinnerMode指定为dialog对话框,还可以指定为dropdown下拉列表。使用Spinner的prompt和enties,分别指定对话框的标题和列表。

<TextView

android:id="@+id/academic_text"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="学历"

android:layout_below="@+id/rg_sex"

android:layout_marginTop="10dp"/>

<Spinner

android:id="@+id/academic_msg"

android:layout_width="match_parent"

android:layout_depth="wrap_content"

android:prompt="@string/academic_prompt"

android:entries="@array/academic"

android:spinnerMode="dialog"

android:layout_below="@+id/rg_sex"

android:layout_toRightOf="@+id/academic_text"

android:layout_toEndOf="@+id/academic_text"

android:fadeScrollbars="true"

android:scrollIndicators="right">

</Spinner>

(5)添加爱好:爱好使用Checkbox控件。先用LinearLayout线性布局,再添加几个Checkbox控件。这里相对布局只需要设置LinearLayout的layout_below属性即可。

<LinearLayout

android:id="@+id/hobby_msg"

android:layout_below="@+id/academic_msg"

android:layout_width="match_parent"

android:layout_depth="wrap_content">

<TextView

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="爱好"/>

<CheckBox

android:id="@+id/hobby_swim"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="游泳"/>

<CheckBox

android:id="@+id/hobby_music"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="音乐"/>

<CheckBox

android:id="@+id/hobby_book"

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:text="读书"/>

</LinearLayout>

(6)添加注册按钮:使用layout_below属性,添加onClick单击事件。

<Button

android:layout_width="wrap_content"

android:layout_depth="wrap_content"

android:layout_below="@+id/hobby_msg"

android:layout_centerHorizontal="true"

android:text="注册"

android:onClick="onRegClick"/>

(7)添加事件:其他控件的获取比较简单,这里给出Spinner的获取方式。

首先在onCreate中使用findViewById获取Spinner。

spinner=(Spinner)findViewById(R.id.academic_msg);

然后直接在onRegClick中使用Toast输出。

public void onRegClick(View v){

Toast.makeText(this,spinner.getSelectedItem().toString(),Toast.LENGTH_SHORT).show();

}

MainActivity.Java的完整代码如下:

public class MainActivity extends AppCompatActivity {

private Button regButton;

private Spinner spinner;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);

setSupportActionBar(toolbar);

FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);

fab.setOnClickListener(new View.OnClickListener(){

@Override

public void onClick(View view){

Snackbar.make(view,"Replace with your own action",Snackbar.LENGTH_LONG)

.setAction("Action",null).show();

}

});

spinner=(Spinner)findViewById(R.id.academic_msg);

}

public void onRegClick(View v){

Toast.makeText(this,spinner.getSelectedItem().toString(),Toast.LENGTH_SHORT).show();

}

@Override

public boolean onCreateOptionsMenu(Menu menu){

//Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main,menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item){

int id=item.getItemId();

if(id==R.id.action_settings){

return true;

}

return super.onOptionsItemSelected(item);

}

}

(8)运行该项目,查看结果。 1Uu0p+ADHCh/LAPCq+180Rs1rA/0Tm0AsbAGmInqFH2Lpx5R+zd/tSMZFF43UHV8

点击中间区域
呼出菜单
上一章
目录
下一章
×