首页 > 代码库 > 更多控件

更多控件

这些控件是基础,这一次可能讲不完,但是尽量多看一些,了解到这些控件,后面写小项目的时候,在慢慢熟练。

(我还是区分控件和组件的、组件是需要在AndroidManifest.xml中注册的并且目前为止只有4大组件,控件是需要布局的)

说5个:

AutoCompleteTextView  /  MultiAutoCompleteTextView / ToggleButton / CheckBox / RadioGroupRadioButton

 

 

1.  AutoCompleteTextView   自动补全文本框

(动态匹配输入的内容,就像Google搜索时,可以根据数据动态匹配热词一样)

   该控件的一个独特属性: android:completionThreshold=”2” ----输入几个字符时自动匹配

动手演示一下:

建立一个名为“UI控件2”的工程。

image

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);    }}

image

image

 

补充:

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.

 

 

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());    }}

image

image

image

 

3. ToggleButton (开关按钮)    [‘t?g(?)l]

   状态改变时,做相应的变化。

ToggleButton有两种状态,选中和未选中,需要为不同的状态设置不同的变化。

特殊属性:

android:checked=”true”----默认控件是否选中

android:textOff=”开” ---当状态时未选中的时候显示的文本

android:textOn=”关” ---当状态时选中的时候显示的文本

image

示例:

布局

<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>

去加一副图片:

image

类文件

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);            }}

效果如下:

一开始没有选中,所以显示“开”

image

点击后,状态变成选中,出现机器人

image

再点击关,又变成未选中,变成暗夜

image

基本就是这个意思。

总结起来就是这个button的文字比较特殊,监听的事件是OnCheckedChangeListener();

 

 

4. CheckBox (复选框,多选框)

image

 

示例:

布局

<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", "请选择您的爱好");        }    }}

image

 

5. RadioGroup 和RadioButton  (单选框)(联合使用)

RadioGroup是一个Button集合,提供多选一机制;属性 android: orientation=”vertical”或者horizontal。

示例:

imageimage

布局

<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;        }    }}

image

image

RadioGroup中的RadioButton状态改变既可以通过RadioButton来监听,也可以通过RadioGroup来监听。

更多控件