0%

Android常用按钮

常用按钮

这里常用的按钮就是我们常用的单选框,复选框之类的一些按钮。
都是一些普通Button的子类。

RadioButton

单选按钮,和一Win32的不大一样,因为java中有布局的概念,所以在一个特殊的布局中的单选按钮是一个组。这个特殊的布局就是:RadioGroup

看一下XML的定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男" />

<RadioButton
android:id="@+id/RadioButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女" />
</RadioGroup>

就是在RadioGroup布局中的就是一个组,这里我们一般将这个布局获取到,然后判断child的选中。
实例:

1
2
3
4
5
6
7
8
9
10
int n = rg_gender.getChildCount();//获取控件数量
for(int i = 0 ; i < n ; i++)
{
RadioButton rad = (RadioButton) rg_gender.getChildAt(i);
if(rad.isChecked())
{
Toast.makeText(MainActivity.this, rad.getText(), Toast.LENGTH_SHORT).show();
break;
}
}

这里需要注意,这段代码是在按钮事件里面的,所以我们上下文的时候我们不能只简单的写this,而要写上我们的布局。

ToggleButton

开关按钮,其实之前我是不知道的,因为Windows下面是没有这个东西的,简单的说其实就是一个简单的开关(我其实我感觉这个东西基本不怎么用吧,用个复选框就可以替代了)。
用这个开关按钮实现一个布局的设计。
XML代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="28dp"
android:checked="true"
android:text="ToggleButton"
android:textOff="纵向排列"
android:textOn="横向排列" />

<LinearLayout
android:id="@+id/LLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/toggleButton1"
android:layout_marginTop="14dp"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ceshi1" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ceshi2" />
</LinearLayout>

我们目的是要改变这个LinearLayout的排列方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
togbtn = (ToggleButton) findViewById(R.id.toggleButton1);
llayout = (LinearLayout) findViewById(R.id.LLayout);
togbtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)//On
{
llayout.setOrientation(LinearLayout.VERTICAL);
}else//Off
{
llayout.setOrientation(LinearLayout.HORIZONTAL);
}
}

CheckBox

复选框,这个就和Windows下面的是一个样子的。这里我们用到List集合。首先我们先定义这么一个布局:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/radioGroup1"
android:layout_marginLeft="74dp"
android:layout_toRightOf="@+id/button1"
android:orientation="vertical" >

</LinearLayout>

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/linearLayout1"
android:layout_alignTop="@+id/toggleButton1"
android:layout_marginTop="22dp"
android:text="check" />

LinearLayout里面什么也没有,我们要动态的进行添加。

1
private List<CheckBox> checkBoxList = new ArrayList<CheckBox>();//checkbox的集合

一个集合,里面主要是用来存放我们的checkbox的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
llayout2 = (LinearLayout) findViewById(R.id.linearLayout1);
btn2 = (Button) findViewById(R.id.button2);

String[] strArray = {"1","2","3"};

for(int i = 0;i < 3 ; i++)
{
CheckBox ck = (CheckBox) View.inflate(this, R.layout.ui_checked, null);
ck.setText(strArray[i]);
llayout2.addView(ck);
checkBoxList.add(ck);
}
btn2.setOnClickListener(new OnClickListener() {

//String str = "";如果在这里定义将会不清空的
@Override
public void onClick(View v) {
String str = "";
for (CheckBox checkbox : checkBoxList) {
if(checkbox.isChecked())
{
str += checkbox.getText().toString();
}
}
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
});

首先我们先获得布局,然后定义了一个数组,存放我们的内容,然后通过按钮点击事件进行一个一个检验,不要忘记加到布局之后还要加到集合,还有我发现我们将我们的变量放在监听器new的一个类的时候,这个对象就和我们之前普通的一个类一样,比如这个String如果不是在这个onClick的里面的话呢,每次是不会清空的。
效果图