以下仅为我作为一只工科狗学习Android编程过程中的一些学习笔记,主要提炼出自己在敲代码过程中遇到的一些问题。
学习Android控件对于我这个新手来说还是很困难的,写在谷歌doc里面还是不太好查找,写在这里吧。
1.RadioGrop&RadioButton
1.1布局文件部分
先上xml代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.ch05_ex2.Ch05_Activity" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/nameTxt"
android:text="姓名"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/inputTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/nameTxt"/>
</RelativeLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioGroup
android:id="@+id/RG"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RadioButton
android:text="O"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton
android:text="A"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton
android:text="B"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton
android:text="AB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RadioGroup>
<TextView
android:id="@+id/resultText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请选择"
/>
</LinearLayout>
这里的LinearLayout属于嵌套的一部分,整个的main.xml应该是这样的。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
></LinearLayout>
<RelativeLayout
></RelativeLayout>
</LinearLayout>
xml文件里面只有Layout套着Layout,RadioGroup套着RadioButton,没有说RadioButton可以和Layout并列的。新手的错误,汗、、、、
1.2 Java代码部分
package com.example.ch05_ex2;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
public class Ch05_Activity extends Activity {
private TextView txtResult;
private RadioGroup RG;
private EditText inputTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
inputTxt = (EditText) findViewById(R.id.inputTxt);
txtResult = (TextView) findViewById(R.id.resultText);
RG = (RadioGroup) findViewById(R.id.RG);
RG.setOnCheckedChangeListener(new groupListener());
}
class groupListener implements OnCheckedChangeListener{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
String sel;
String name;
RadioButton ButtonSel = (RadioButton) findViewById(checkedId);
name = inputTxt.getText().toString();
sel = ButtonSel.getText().toString();
txtResult.setText(name+"你的血型为"+sel+"型");
}
}
}
只需要记住:RadioGroup点击时调用的方法是setOnCheckedChangeListener,绑定的对象是
OnCheckedChangeListener
这个接口的一个实现。
有时候Eclipse总是不会提示这个方法,而且好像OnCheckedListener在多个包里面都有,具体导入哪个包,不同的包里面又会是哪些实现,需要总结下。
总之这里的是
2.Spinner控件
2.1 main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/nameText"
android:text="姓名"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
/>
<EditText
android:id="@+id/editText"
android:layout_toRightOf="@id/nameText"
android:layout_toEndOf="@id/nameText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="注意EditText的match_parent是否把前一个TextView挤掉了"
/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/labelText"
android:text="学历"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/ex3spinner"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/labelText"
android:layout_toEndOf="@id/labelText"
/>
<TextView
android:id="@+id/txtResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/ex3spinner"
android:gravity="center_vertical|center_horizontal"
android:text="这里将会显示您的选择" />
</RelativeLayout>
</LinearLayout>
2.2 string.xml文件
考虑到本地化 的情况,将选项列表设置在项目的<res/values/strings.xml>中,再由程序通过资源文件获取列表数组来使用。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Ch05_ex3</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string-array name = "scholar">
<item >高中</item>
<item >大学</item>
<item >硕士</item>
<item >博士</item>
</string-array>
</resources>
2.3 Java代码
package com.example.ch05_ex3;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
public class Ch05_ex3_Activity extends Activity {
private EditText editText;
private Spinner ex03Spinner;
private TextView txtResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.editText);
ex03Spinner = (Spinner) findViewById(R.id.ex3spinner);
txtResult = (TextView) findViewById(R.id.txtResult);
//创建ArrayAdapter,数据源是string.xml里面的scholar数组
ArrayAdapter<CharSequence> myAdapter = ArrayAdapter.createFromResource(this, R.array.scholar, android.R.layout.simple_spinner_item);
//设置myAdapter显示的格式
//待会记得把这个格式改一下看看还有别的什么样式
//simple_spinner_dropdown_item只是最简单的样式,不喜欢的改别的试试
myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//设置Spinner的数据源
ex03Spinner.setAdapter(myAdapter);
//为spinner组件的ItemSelected事件绑定监听器
ex03Spinner.setOnItemSelectedListener(new myListener());
}
class myListener implements OnItemSelectedListener{
@Override
public void onItemSelected(AdapterView<?> suibian, View v, int position, long id) {
String inputname;
String sel;
inputname = editText.getText().toString();
sel = suibian.getSelectedItem().toString();
txtResult.setText(inputname+"的学历为"+sel);
}
@Override
public void onNothingSelected(AdapterView<?> hehe) {
txtResult.setText("什么都没有选中!");
}
}
}
需要记住:Spinner的使用需要先new一个ArrayAdapter来提供数据源(createFromResource)以及规定最终的显示格式(
setDropDownViewResource),
最后再使用setAdapter绑定,还有别忘了添加一个监听器。
以上就是关于RadioGroup、RadioButton以及Spinner这些控件的学习记录,所有代码直接拷进eclipse就可以用了。
完事。