这些控件是基础,这一次可能讲不完,但是尽量多看一些,了解到这些控件,后面写小项目的时候,在慢慢熟练。
(我还是区分控件和组件的、组件是需要在AndroidManifest.xml中注册的并且目前为止只有4大组件,控件是需要布局的)
说5个:
AutoCompleteTextView / MultiAutoCompleteTextView / ToggleButton / CheckBox / RadioGroup和RadioButton
1. AutoCompleteTextView 自动补全文本框
(动态匹配输入的内容,就像Google搜索时,可以根据数据动态匹配热词一样)
该控件的一个独特属性: android:completionThreshold=”2” ----输入几个字符时自动匹配
动手演示一下:
建立一个名为“UI控件2”的工程。
activity_main.xml
<RelativeLayout 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" > <AutoCompleteTextView android:id="@+id/autoCompleteTextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:ems="10" android:hint="请输入您要搜索的关键词" android:completionThreshold="2"/> </RelativeLayout>
MainActivity.java
public class MainActivity extends Activity { private AutoCompleteTextView acTextView = null; private String[] res={"shanghai1","shanghai2","shanghai3","shenzhen"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.初始化控件 acTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); //2.适配器和数据源绑定 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,res); //3.适配器和控件绑定(给控件设置适配器) acTextView.setAdapter(adapter); } }
补充:
android.widget.ArrayAdapter.ArrayAdapter<String>(Context context, int resource, String[] objects)
- Parameters:
- context The current context.
- resource The resource ID for a layout file containing a TextView to use when instantiating views.
- objects The objects to represent in the ListView.
- resource The resource ID for a layout file containing a TextView to use when instantiating views.
2. MultiAutoCompleteTextView 多重自动补全文本框
(同一文本框,多次输入,多次补全,自动匹配;比如说群发邮件、群发短信自动提示)
特别的属性:
android:completionThreshold=”2” ---设置输入多少字符时自动匹配
multiAutoCompleteTextView实例 . setTokenizer(new MultiAutoCompletionTextView.CommaTokenizer() ); ---设置多次输入的分隔符
布局和Java代码如下:
<RelativeLayout 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" > <MultiAutoCompleteTextView android:id="@+id/mt1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:ems="10" android:hint="请输入您要搜索的关键词" android:completionThreshold="3"/> </RelativeLayout>
public class MainActivity extends Activity { private MultiAutoCompleteTextView macTextView = null; private String[] res={"shanghai1","shanghai2","shanghai3","shenzhen"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.初始化控件 macTextView = (MultiAutoCompleteTextView) findViewById(R.id.mt1); //2.适配器和数据源绑定 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,res); //3.适配器和控件绑定(给控件设置适配器) macTextView.setAdapter(adapter); //4.设置分隔符 macTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); } }
3. ToggleButton (开关按钮) [‘t?g(?)l]
状态改变时,做相应的变化。
ToggleButton有两种状态,选中和未选中,需要为不同的状态设置不同的变化。
特殊属性:
android:checked=”true”----默认控件是否选中
android:textOff=”开” ---当状态时未选中的时候显示的文本
android:textOn=”关” ---当状态时选中的时候显示的文本
示例:
布局
<RelativeLayout 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" > <ToggleButton android:id="@+id/toggleButton1" android:layout_width="match_parent" android:layout_height="30dp" android:textOff="开" android:textOn="关" android:checked="false"/> <ImageView android:id="@+id/img1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/toggleButton1" android:background="#ffffff" /> </RelativeLayout>
去加一副图片:
类文件
public class MainActivity extends Activity implements OnCheckedChangeListener { private ToggleButton toggleBtn; private ImageView image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toggleBtn = (ToggleButton) findViewById(R.id.toggleButton1); image = (ImageView) findViewById(R.id.img1); toggleBtn.setOnCheckedChangeListener(this); //监听的事件不一样了 } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { toggleBtn.setChecked(isChecked); //isChecked是当前状态 Log.i("tag", "当前状态时:"+isChecked); image.setBackgroundResource(isChecked?R.drawable.ic_launcher:R.drawable.a); } }
效果如下:
一开始没有选中,所以显示“开”
点击后,状态变成选中,出现机器人
再点击关,又变成未选中,变成暗夜
基本就是这个意思。
总结起来就是这个button的文字比较特殊,监听的事件是OnCheckedChangeListener();
4. CheckBox (复选框,多选框)
示例:
布局
<RelativeLayout 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" > <CheckBox android:id="@+id/cb1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="跑步" android:checked="false" /> </RelativeLayout>
MainActivity.java
public class MainActivity extends Activity implements OnCheckedChangeListener { private CheckBox cb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cb = (CheckBox) findViewById(R.id.cb1); cb.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { String msg = cb.getText().toString(); Log.i("tag", msg); } else { Log.i("tag", "请选择您的爱好"); } } }
5. RadioGroup 和RadioButton (单选框)(联合使用)
RadioGroup是一个Button集合,提供多选一机制;属性 android: orientation=”vertical”或者horizontal。
示例:
布局
<RelativeLayout 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" > <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <RadioButton android:id="@+id/radio0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="0" /> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" /> </RadioGroup> </RelativeLayout>
注意import
android.widget.RadioGroup.OnCheckedChangeListener;
MainActivity.java
public class MainActivity extends Activity implements OnCheckedChangeListener { private RadioGroup rg; //private RadioButton rb0; //private RadioButton rb1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rg = (RadioGroup) findViewById(R.id.radioGroup1); //rb0 = (RadioButton) findViewById(R.id.radio0); //rb1 = (RadioButton) findViewById(R.id.radio1); rg.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.radio0: Log.i("tag", "您当先选的是0"); break; case R.id.radio1: Log.i("tag", "您当先选的是1"); break; default: break; } } }
RadioGroup中的RadioButton状态改变既可以通过RadioButton来监听,也可以通过RadioGroup来监听。