更多控件

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

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

说5个:

AutoCompleteTextView  /  MultiAutoCompleteTextView / ToggleButton / CheckBox / RadioGroupRadioButton

 

 

1.  AutoCompleteTextView   自动补全文本框

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

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

动手演示一下:

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

更多控件_第1张图片

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

更多控件_第2张图片

更多控件_第3张图片

 

补充:

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

更多控件_第4张图片

更多控件_第5张图片

更多控件_第6张图片

 

3. ToggleButton (开关按钮)    ['tɒg(ə)l]

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

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

特殊属性:

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

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

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

更多控件_第7张图片

示例:

布局

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

去加一副图片:

更多控件_第8张图片

类文件

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

效果如下:

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

更多控件_第9张图片

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

更多控件_第10张图片

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

更多控件_第11张图片

基本就是这个意思。

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

 

 

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

更多控件_第12张图片

 

示例:

布局

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

更多控件_第13张图片

 

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

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

示例:

更多控件_第14张图片更多控件_第15张图片

布局

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

更多控件_第16张图片

更多控件_第17张图片

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

你可能感兴趣的:(控件)