Android常见控件初探

温故而知新。最近复习了一些android常用控件,接下来,根据android 官方API,总结一下它们的一些常见用法。(开发测试环境为Android4.4)

一、TextView

由官方的关系图可以看出,TextView继承View类,直接子类有Button,CheckedTextView等,间接子类有AutoCompleteTextView, CheckBox等。

技术分享

下面列举一些TextView常见的xml属性:

android:text                TextView显示的文字
android:textColor           TextView文字的颜色
android:textAppearance      TextView文字的一些综合属性,例如color,typeface,size,style
android:textStyle           文字字体(normal正常,bold粗体,italic斜体)
android:textSize            文字大小,一般单位用sp为最佳,原因问度娘。

在Java代码里在onCreate方法里添加以下代码即可。其中setText是修改TextView文字的方法。

textview=(TextView)findViewById(R.id.textview);
textview.setText("我是TextView吗?");

二、Button

技术分享

由上图可以看出,Button继承于TextView,这里有个疑问,为什么Button可以设置文字而ImageButton不能?咱们先放一放,等会再谈。
它的子类家族都是什么我想不用我重复了吧。值得一提的是CompoundButton(这个我也没用过,API介绍它有选定和未选定的两种状态,是CheckBox的父类,长啥样我也没见过,我猜测是个抽象类,如果不对欢们欢迎指出)
常见的xml属性用法如下:

<Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="@string/self_destruct"
      />

Button的关键用法在于监听器的设置,下面是官方的实例:

public class MyActivity extends Activity {
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.content_layout_id);

final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click
             }
         });
     }
 }

这里关于Button监听器我要多说两句,以上的那种设置监听的方法是当我们布局中监听事件比较少的情况下用的,如果当Button特别多的时候,如果一个个实现,代码过于繁琐,所以我在我的demo中又写了一种设置监听方法,大家可以下载源码看看。

三、ImageButton

技术分享

大家注意一下ImageButton的父类,你会发现ImageButton继承的是ImageView,而Button是TextView,看到这里你是不是已经明白了为什么ImageButton不能设置文字而Button可以,对,形象点说就叫做”子承父业”。就软件美观来说,我更倾向于用ImageButton,为什么?因为它可以用图片啊!可以做美观的点击效果啊,但是,Button也有它独特的用处,有更大的可扩展性。
下面我介绍一下ImageButton的常见用法,
首先是它的一些常见属性:

<ImageButton
            android:id="@+id/im_btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@drawable/btn_select" />

这里的background属性中如果你用一张图片写死的话,ImageButton是没有点击效果的,因为它就相当于一个ImageView。这里的drawable并不是我们放图片的那个文件夹,那么这里的drawable是哪里来的呢?我们在res文件夹里新建一个名为drawable文件夹,再建一个名为btn_select.xml文件。

技术分享

在btn_select.xml文件中写如下配置属性:

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true" 
        android:drawable="@drawable/stop_btn_down"/><!-- 按下后显示的-->
    <item android:state_pressed="false"
        android:drawable="@drawable/start_btn_up"/><!-- 抬起后显示的-->
</selector>

其实还有一种方法可以实现点击效果,在Java代码中加上

img_btn1.setOnTouchListener(new OnTouchListener() {

            @Override
public boolean onTouch(View v, MotionEvent event) {
                // TODO 自动生成的方法存根
            if(event.getAction()==MotionEvent.ACTION_DOWN)
                img_btn1.setImageDrawable(getResources().getDrawable(R.drawable.stop_btn_down));
                else
                img_btn1.setImageDrawable(getResources().getDrawable(R.drawable.start_btn_up));
                return false;
            }
});

咱们先不说它的效果和维护如何如何,想想看如果你有5个以上按钮的话……
就代码量而言就让人望而却步了吧,所以建议用方法一。

四、ToggleButton

这个非常简单,先上效果图:

技术分享

一些常用的xml属性:

android:textOn     当按钮被选定时显示的文字
android:textOff     当按钮未被选定时显示的文字

Java实现代码:

togglebutton=(ToggleButton)findViewById(R.id.toggleButton);
togglebutton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO 自动生成的方法存根
                togglebutton.setChecked(isChecked);
                imageview.setBackgroundColor(isChecked?Color.BLUE:Color.GREEN);
            }
});

五、ImageView

没啥可说的,就是显示图片的一个控件。

六、CheckBox

和ToggleButton 一样都继承于CompoundButton,两者的属性也几近相似。
Java实现代码:

checkbox=(CheckBox)findViewById(R.id.checkBox);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), isChecked?"CheckBox被选中了":"CheckBox取消了", Toast.LENGTH_LONG).show();
            }
        });

七、RadioButton

和CheckBox一样,用法也几近相似:

radiobutton=(RadioButton)findViewById(R.id.radioButton);
radiobutton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), isChecked?"RadioButton被选中了":"RadioButton取消了", Toast.LENGTH_LONG).show();
            }
        });

八、EditText

先看效果图:

技术分享

EditText继承于TextView,是用于获取用户输入内容的控件。

常见的xml属性:

 android:maxLines     输入框最大的行数
 android:minLines     输入框最小的行数
 android:password     输入内容是否加密
 android:text         默认的输入内容
 android:inputType    输入内容的类型 
 android:hint         默认提示,hinttext的差别是,前者你点击输入框提示文字会消失,而后者会在提示文字后接着输入

Java代码常用实现方法:

editText=(EditText)findViewById(R.id.editText);
editText.getText().toString()
//这是获取EditText控件输入字符的方法,比较常用

九、TimePiker 时间拾取器

从官方介绍中可以看出它继承于帧布局,也就是说它内部实现了框架布局。时间拾取器可以获取小时,分钟,以及AM/PM。
它在Java代码中的常用实现方法

timepicker=(TimePicker)findViewById(R.id.timePicker1);
timepicker.setIs24HourView(true);
//选择12小时制还是24小时制,如果12小时制会显示AM/PM,24小时则不会。
timepicker.getCurrentHour();//获得小时0-23
timepicker.getCurrentMinute();//获得分钟
timepicker.setCurrentHour(12);//设置小时
timepicker.setCurrentMinute(12);//设置分钟
timepicker.setOnTimeChangedListener(new OnTimeChangedListener() {

            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                // TODO 自动生成的方法存根
Toast.makeText(getApplicationContext(), "选择时间是"+hourOfDay+":"+minute, Toast.LENGTH_LONG).show();
            }
        });

十、DatePicker日期拾取器

和TimePicker一样继承于帧布局,常用的xml属性有
Java实现代码:

datePicker=(DatePicker)findViewById(R.id.datePicker);
datePicker.init(2015, 3, 9, new OnDateChangedListener() {

            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), "选择时间是"+year+"年"+monthOfYear+"月"+dayOfMonth+"日", Toast.LENGTH_LONG).show();
            }
        });

十一、Spinner 下拉列表

因为只是基本用法,所以这里我用最简单的ArrayAdapter进行适配数据。

第1步: 首先先在布局文件中添加Spinner:

 <Spinner
            android:id="@+id/spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

第2步: 建立数据源,使用数组,这些数据将会在Spinner下来列表中进行显示。在Values下创建一个名为array.xml文件

<!-- array.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<resources >
    <string-array name="spinner_items">
        <item >上海</item>
        <item >北京</item>
        <item >深圳</item>
    </string-array>
</resources>

第3步: 接着在Activity中加入如下的代码(使用了系统定义的下拉列表的布局文件,当然也可以自定义)

spinner=(Spinner)findViewById(R.id.spinner);
//得到数据源
final String []items=getResources().getStringArray(R.array.spinner_items);
//创建Adapter并绑定数据源,
ArrayAdapter<String> adapter=new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_spinner_dropdown_item, items);
//为Spinner绑定Adapter
spinner.setAdapter(adapter);
//设置监听
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), "选择的城市是"+items[position], Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO 自动生成的方法存根

            }
        });

十二、 SeekBar 拖动条

技术分享
由上图看出,它继承于ProgressBar,实际上长得也挺像的。

技术分享

实际上,它的用法非常简单,首先现在布局文件里添加控件属性

<SeekBar
            android:id="@+id/seekBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />``````

然后在Java代码中添加监听器监听三个事件,开始拖动、结束拖动、以及现在拖动的进度,值为1-100

seekBar=(SeekBar)findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), "SeekBar END!", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), "SeekBar Start!", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), progress+"%", Toast.LENGTH_SHORT).show();
            }
        });

十三、Switch

是一种开关的控件,继承于Button的子类CompoundButton:技术分享

用法也非常简单,首先在布局文件里添加

<Switch
            android:id="@+id/switch1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textOn="开"
            android:textOff="关"
            />

在Java代码里添加监听即可

switch_btn=(Switch)findViewById(R.id.switch1);
switch_btn.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO 自动生成的方法存根
                Toast.makeText(getApplicationContext(), isChecked?"Switch打开了":"Switch关闭了", Toast.LENGTH_SHORT).show();
            }
        });

Demo下载,点这里!!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。