zoukankan      html  css  js  c++  java
  • Android Developers:按钮

    按钮是有文本或者图标(或者文本和图标)组成,它传达用户触摸它的时候所发生的动作 

    Image

     

    你可以在你的布局中使用三种方式创建按钮,取决于你是否想创建文本按钮,突变按钮或者两者都有 

    • 设置文本,使用Button类 

     

    <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/button_text" 
       ... /> 
    • 设置图标,使用ImageButton类 

     

    <ImageButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/button_icon" 
       ... /> 
    • 设置文本和图标,使用Button类的android:drawableLeft属性 

     

    <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/button_text" 
       android:drawableLeft="@drawable/button_icon" 
       ... /> 

     

    响应点击事件 

    —————————————————————————————————————————————— 

    当用户点击一个按钮,button对象获取一个on-click时间 

      

    为按钮定义时间处理程序,在你的XML布局中的<Button>元素添加android:onClick属性。这个属性的值必须和你想调用响应点击事件的方法的名称相同。显示这个布局的Activity必须然后实现相应的方法。 

     
    例如,下面是一个布局,包含一个使用android:onClick属性的按钮 

     

    <?xml version="1.0" encoding="utf-8"?> 
    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/button_send" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/button_send" 
       android:onClick="sendMessage" /> 
    在显示这个布局的Activity中,下面的方法处理这个点击事件  

     

    /** Called when the user touches the button */ 
    public void sendMessage(View view) { 
       // Do something in response to button click 
    } 
    你在android:onClick属性中宣布的方法,必须和上面所显示有拥有相同的名称。  特别的,这个方法必须  
    • 是public 

    • 返回void 

    • 定义一个View对象,作为唯一的参数(它将是被点击的View对象 

     

    使用OnClickListener 

    —————————————————————————————————————————————— 

    你也可以更务实的声明点击时间,而不是在一个XML布局文件中。如果你在运行时实例化Button对象或者你需要在Fragmetn的子类中声明点击行为,这个可能就是必须的。 

           

    编程声明事件处理,创建一个View.onClickListener对象,并且通过调用setOnClickListener(View.OnClickListener)方法将它指派给按钮。例如 

     

    Button button = (Button) findViewById(R.id.button_send); 
    button.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
           // Do something in response to button click 
       } 
    }); 
    设计你的按钮  

    —————————————————————————————————————————————— 

     你的按钮的外表(背景图片和前段)可能从一台设备到另一个而不同,因为不同制造厂商的设备通常拥有不同的默认输入控件风格 

     

    你可以精确控制你的控件使用的样式主题,你将它应用在你的整个应用。例如,为了在你的应用程序汇中,确保所有运行Android 4.0和以上的设备使用Holo主题,在你的Mainfest文件中的<application>元素中声明android:theme=”@android:style/Theme.Hoho“。你也可以参阅博客Holo Everywhere信息,关于使用Holo主题支持老的设备 

     
    为了使用不同的背景自定义自己的按钮,使用一个Drawable或者Color资源指定android:background属性。作为另外一种选择,你可以为按钮设置一种样式,它的工作方式类似于HTML样式,定义如背景,字体,大小和其它等多种样式属性。关于应用样式的更多的信息,请查阅Stypes and Themes。 

     

    无边框按钮 

    —————————————————————————————————————————————— 

    一种非常有用的设计师”无边框“按钮。无边框按钮类似于基本的按钮,除了他们没有边框或者背景,但是当不同的状态的时候一直改变显示,例如当它被点击的时候。 

     
    为了创建一个无边框的按钮,给按钮应用borderlessButtonStyle属性,例如 

     

    <Button 
       android:id="@+id/button_send" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/button_send" 
       android:onClick="sendMessage" 
       style="?android:attr/borderlessButtonStyle" /> 
    自定义背景  

    —————————————————————————————————————————————————— 

    如果你想真正定义你的按钮的外表,你可以指定自定义的背景。替代应用简单的位图或颜色,然而,你的背景应该是一个state list resource,它基于按钮当前的状态改变显示 

     
    你可以在XML文件当中定义state list,定义三种不同的图片或者颜色用于不同的按钮状态 

     
    为你的按钮创建一个state list drawable 

    1. 为你的按钮的背景创作三个位图,它代表default,pressed和focused按钮状态。为了去确保你的图片适应按钮的各种大小,创建Nine-path位图 

    2. 将位图放于你的项目的/res/drawable目录下。确保每个位图被合适的命名,去映射按钮的每一种显示状态,例如button_default.9.png,button_pressed.9.png和button_focused.9.png。 

    3. 创建一个xml文件,在res/drawable/目录下(命令如button_custom.xml)。 

                  插入如下XML 

     

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
       <item android:drawable="@drawable/button_pressed" 
             android:state_pressed="true" /> 
       <item android:drawable="@drawable/button_focused" 
             android:state_focused="true" /> 
       <item android:drawable="@drawable/button_default" /> 
    </selector>   
    这个定了一个单独的位图资源,它将会改变它的图片,基于按钮的当前状态  
    • 第一个<item>定义了用于按钮被点击的时候的位图(Activited 

    • 第二个<item>定义了用于按钮获取焦点的时候的位图(当用户滚动球或方向键高亮显示按钮时 

    • 第三个<item>定义了用于按钮默认状态的时候的位图(既没有被点击也没有获取焦点 

     

    注意<item>元素的顺序是重要的。当位图被引用的时候,<item>元素遍历顺序来决定哪个适合当前的按钮的状态。因为默认的位图是在最后,只有当android:state_pressed和android:state_focused的状态都被认为false的时候才使用。 

     

    XML文件现在代表一个单独的位图资源,并且被一个Button作为它的background引用,图片将会基于三种状态而改变 

     

         4.   然后简单将drawable XML文件应用于Button bakgroud 

     

    <Button 
       android:id="@+id/button_send" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/button_send" 
       android:onClick="sendMessage" 
       android:background="@drawable/button_custom"  /> 

    关于XML语法的更多信息,包含如何定义一个不可用的,循环的,或者其它按钮状态,阅读State List Drawable。   

  • 相关阅读:
    不同storyboard间跳转
    WWDC2014:留给微软的时间不多了!
    IBOutletCollection 索引获取顺序问题
    iOS下单例模式实现(二)利用宏定义快速实现
    iOS下单例模式实现(一)(objective-c arc gcd)
    windows phone UI吐槽---跑偏了就再也跑不回来了
    iOS沙盒(SanBox)机制与文件操作
    转载:iOS静态库与动态库
    KVO与KVC理解
    iOS多线程编程的几种方式
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3424092.html
Copyright © 2011-2022 走看看