• android学习日记03--常用控件button/imagebutton


    常用控件

      控件是对数据和方法的封装。控件可以有自己的属性和方法。属性是控件数据的简单访问者。方法则是控件的一些简单而可见的功能。所有控件都是继承View类

    介绍android原生提供几种常用的控件button/imagebutton、checkbox/radiobutton、progressbar/seekbar、tabSpec/tabHost、ListView、Dialog,主要为了掌握控件使用的一般规律。


    1、button 按钮

      Button是各种UI中最常用的控件之一,用户可以通过触摸它来触发一系列事件,要知道一个没有点击事件的Button是没有任何意义的,

    因为使用者的固定思维是见到它就想去点!

      布局文件里button的xml声明:

    1 <Button 
    2             android:layout_width="fill_parent"
    3             android:layout_height="wrap_content"
    4             android:text="@string/btn_ok"
    5             android:id="@+id/btn_ok"
    6             />

      android:layout_width="wrap_content" --自适应,据自己的值占据控件来决定大小
      android:layout_height="fill_parent" --充满父控件,自动放大到与父控件一样的大小

      其中每个组件的layout_width和layout_height属性是必须的

      一般也可以是具体的大小,即:数字+单位,如android:layout_height ="30px",由于移动设备屏幕尺寸太多了,不推荐使用强制设定大小,通用性不好。

      @+表示声明,新增一个id,会自动在R.java文件里创建。如 android:id="@+id/btn_ok"
      @表示引用 如 android:text="@string/hello_world",引用string.xml的名为hello_world的值

       xml自定义值可以这样:

    1 <string name="hello_world">Hello world!</string>

      有些人会问直接 android:text="Hello world!"不是更方便,为什么还要引用xml文件?其实android这样设计为了国际化和编写弹性的应用程序,

    xml解析时会讲到(了解更多XML:android学习日记23--Android XML解析),不多做解释了。布局组件等一般设置格式:

    <布局/组件名称
    android:属性="属性类型"
    ……
    />

    如底下的xml:

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context=".MainActivity" >
    10     <!-- 线性布局  --> 
    11      <LinearLayout
    12      android:layout_width="fill_parent"
    13      android:layout_height="wrap_content"
    14      android:orientation="horizontal">
    15     
    16         <TextView
    17             android:layout_width="wrap_content"
    18             android:layout_height="wrap_content"
    19             android:text="@string/hello_world" 
    20             android:id="@+id/tv"
    21             />
    22     
    23     
    24         <Button 
    25             android:layout_width="wrap_content"
    26             android:layout_height="wrap_content"
    27             android:text="@string/btn_ok"
    28             android:id="@+id/btn_ok"
    29             />
    30     
    31         <!-- wrap_content:自适应 --> 
    32         <Button 
    33             android:layout_width="wrap_content" 
    34             android:layout_height="wrap_content"
    35             android:text="@string/btn_cancle"
    36             android:id="@+id/btn_cancle"
    37             />
    38         
    39         <ImageButton 
    40             android:layout_width="wrap_content" 
    41             android:layout_height="wrap_content"
    42             android:background="@drawable/blank"
    43             android:id="@+id/btn_img"
    44             />
    45 
    46     </LinearLayout>
    47     
    48 </RelativeLayout>
    View Code

     几乎每个组件都是上面的声明方式。


      java代码里定义btn_ok = (Button)findViewById(R.id.btn_ok);其他组件也可以通过类似的方法获得,前提是在布局文件里有指定id,获得的类型都是Object,记得类型转化添加监听器 可以implements OnClickListener 重写 OnClick方法来自定义按钮按下触发事件。也可以通过内部类实现,btn_ok.setOnClickListincer(new OnclickListner() { @override public void OnClick(View v) { ...}})

    具体代码在第二点imagebutton里贴出代码。

    2、imagebutton
    可添加背景图片,其他同Button。

    指定背景图片为res/drawable 下名为blank的图片:

    android:background="@drawable/blank"

    注意:android res包底下的资源文件名都不能是中文或大写字母开头的。
    event.getAction()==MotionEvent.ACTION_DOWN 监听按钮按下事件
    event.getAction()==MotionEvent.ACTION_UP 监听按钮弹起事件
    getResources().getDrawable 获得资源图片的方法

    Activity代码:

     1 package com.example.button;
     2 
     3 import android.os.Bundle;
     4 import android.app.Activity;
     5 import android.view.Menu;
     6 import android.view.MotionEvent;
     7 import android.view.View;
     8 import android.view.View.OnClickListener;
     9 import android.view.View.OnTouchListener;
    10 import android.widget.Button;
    11 import android.widget.ImageButton;
    12 import android.widget.TextView;
    13 
    14 public class MainActivity extends Activity{
    15 
    16     private TextView tv;
    17     private Button btn_ok,btn_cancle;
    18     private ImageButton btn_img;
    19     
    20     @Override
    21     protected void onCreate(Bundle savedInstanceState) {
    22         super.onCreate(savedInstanceState);
    23         setContentView(R.layout.activity_main);
    24         
    25         tv = (TextView)findViewById(R.id.tv);
    26         
    27         btn_ok = (Button)findViewById(R.id.btn_ok);       
    28         btn_cancle = (Button)findViewById(R.id.btn_cancle);
    29         
    30         btn_img = (ImageButton)findViewById(R.id.btn_img);        
    31         
    32         // 内部类 实现 监听
    33         btn_img.setOnTouchListener(new OnTouchListener() {
    34             
    35             @Override
    36             public boolean onTouch(View v, MotionEvent event) {
    37                 // TODO Auto-generated method stub
    38                 if(event.getAction()==MotionEvent.ACTION_DOWN) {
    39                     btn_img.setBackgroundDrawable(getResources().getDrawable(R.drawable.face1));                
    40                 }else if(event.getAction()==MotionEvent.ACTION_UP) {
    41                     btn_img.setBackgroundDrawable(getResources().getDrawable(R.drawable.blank));                
    42                 }
    43                 return false;
    44             }
    45         });
    46         
    47         // 也可以 通过implements OnClickListener 实现监听
    48         btn_ok.setOnClickListener(new OnClickListener() {
    49             
    50             @Override
    51             public void onClick(View v) {
    52                 // TODO Auto-generated method stub
    53                 if(v == btn_ok) {
    54                     tv.setText("触发确定按钮事件");
    55                 }
    56             }
    57         });
    58         
    59         // 内部类 实现监听器
    60         btn_cancle.setOnClickListener(new OnClickListener() {
    61             
    62             @Override
    63             public void onClick(View v) {
    64                 // TODO Auto-generated method stub
    65                 if(v == btn_cancle) {
    66                     tv.setText("触发取消按钮事件");
    67                 }
    68             }
    69         });
    70         
    71         
    72     }
    73 
    74 
    75     @Override
    76     public boolean onCreateOptionsMenu(Menu menu) {
    77         // Inflate the menu; this adds items to the action bar if it is present.
    78         getMenuInflater().inflate(R.menu.main, menu);
    79         return true;
    80     }
    81 
    82     
    83 }
    View Code

    代码运行效果:

    点击'确定'按钮,左边textview 显示'触发确定按钮'

    点击 imagebutton 显示笑脸,放开即还原。

    顺便说点监听器的题外话:

    1、监听器是个抽象类,它包含了一个事件触发时系统会去调用的函数;

    2、在子类中,根据您项目的需要重写这个函数;

    3、派生后的监听器需要绑定到按钮上,就像一个耳机可以发出声音,但您不去戴它,您是听不到它发出的声音的。一般的情况是这个按钮可能需要这个监听器,而另外一个按钮需要另外一个监听器,每个监听器各司其职,但功能相似时,也可以多个按钮共同绑定一个监听器;

    4、各种控件,都有常用的事件,如点击按钮,拖动一个滚动条,切换一个ListView的选项等等,他的绑定监听器的函数命名规则是setOnXXListener

    ========个人网站:http://chendd.com/ 文章很多是上面搬过来的,以后都在个人网站上更新,有兴趣的可以移步☺========
  • 相关阅读:
    利用python将表格中的汉字转化为拼音
    vi中批量加注释
    Xtrabackup
    mydumper下载安装
    Adobe Acrobat Pro DC破解
    InnoDB关键特性之double write
    聚集索引与非聚集索引
    has the wrong structure
    初学者如何理解网络协议
    电脑重装系统之后,删除之前的系统
  • 原文地址:https://www.cnblogs.com/aiguozhe/p/3543555.html
Copyright © 2020-2023  润新知