• Android中focusable属性的妙用——底层按钮的实现


    看到百威啤酒的客户端主界面的按钮,感觉比较新奇,先看下图片:

    注意图中我画的箭头,当时鼠标点击的黑色圈圈的位置,然后按钮出现了按下的效果(黄色的描边)

    刚开始看到这种效果很是好奇,不知道是怎么实现的,后来仔细一想,应该是整个啤酒罐是一张图片(ImageView),该图片是布局在三个按钮之上,然后就是最关键的地方,把图片设置为不可获取焦点,也就是android:focusable="false" ,就这样简单的一行,就可以搞定了!

    为了验证我的想法,我建了一个工程来做测试,效果如下图所示:

    具体代码如下:

    main.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="
    http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        > 
        <LinearLayout 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content" 
            android:orientation="vertical" > 
            <Button 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:layout_margin="10dp" 
                android:text="button1" 
                android:background="@drawable/button_selector" 
                />    
            <Button 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:layout_margin="10dp" 
                android:text="button2" 
                android:background="@drawable/button_selector" 
                />  
            <Button 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:layout_margin="10dp" 
                android:text="button3" 
                android:background="@drawable/button_selector" 
                />  
        </LinearLayout> 
        <ImageView 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:src="@drawable/bg2" 
            android:focusable="false" 
            /> 
    </RelativeLayout>

     

    button_selector.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    <selector 
        xmlns:android="
    http://schemas.android.com/apk/res/android"
        <item android:state_pressed="true" > 
            <shape> 
                <!-- 实心,即填充 --> 
                <solid android:color="#8470FF"/> 
                <!-- 描边 --> 
                <stroke 
                    android:width="2dp" 
                    android:color="#FFFF00"/> 
                <!-- 圆角 --> 
                <corners 
                    android:radius="5dp" /> 
                <padding 
                    android:left="10dp" 
                    android:top="10dp" 
                    android:right="10dp" 
                    android:bottom="10dp" /> 
            </shape> 
        </item>

        <item>       
            <shape> 
                <!-- 实心,即填充 --> 
                <solid android:color="#8470FF"/> 
                <corners 
                    android:radius="5dp" /> 
                <padding 
                    android:left="10dp" 
                    android:top="10dp" 
                    android:right="10dp" 
                    android:bottom="10dp" /> 
            </shape> 
        </item> 
    </selector>

    关于button_selector.xml中shape的使用有疑问的可以看我上次的文章:Android中shape的使用

    ok,就说这么多……

     

     

     

  • 相关阅读:
    向工信部投诉中国联通、移动、电信等运营服务商的权威途径
    如何把本机Sql Sever数据库转移到虚拟主机sql数据库
    SQL Server 2005如何远程连接数据库?
    mssql server 2005还原数据库bak文件与“备份集中的数据库备份与现有的xx数据库不同”解决方法
    傲游5里保存的网址,在傲游4不能同步?外加几句吐槽
    mysql数据库基础的简单操作指南
    MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
    Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库
    Jupyter Notebook导入自定义模块时ImportError
    Pandas数据处理(2): 数据透视表,行转列、列转行、以及一行生成多行
  • 原文地址:https://www.cnblogs.com/firecode/p/2670834.html
Copyright © 2020-2023  润新知