Android如何制作漂亮的自适布局的键盘

摘要:
最近,我们做了一个定制键盘,但面对不同分辨率的型号,数字键盘无法根据接口大小填充,但无法为每个型号制作。因此,我们需要使其具有适应性。这是主要的想法。这里,顶部标题栏的高度是固定的,下面输入的金额也是固定的。它主要是在中间的数字键盘。高度和宽度需要自适应。为每行设置LinearLayout的布局_ height=0dp,layout_ Weight=1,具体设置如下:match_Print0dp11dpcenterhorizontal˃这确保了上下方向自适应布局。与布局_权重(layout_ Weight)相结合,它可以使控件以正比例显示,很容易解决当前Android开发中最麻烦的碎片问题之一。

  最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思路。

  这里最上面的titlebar高度固定,下面输入的金额高度也固定(当然也可以自适应),主要是中间的数字键盘,高度和宽度需要自适应。先来张效果图:

Android如何制作漂亮的自适布局的键盘第1张

  最常见的解决方案是用线性布局,自适应当然是按比例,但布局中无%的概念,那就要用到layout_weight了,该属性的作用是决定控件在其父布局中的显示权重(具体概念就不多说了)

  这里用一个LinearLayout 将数字键盘与下面的支付类型进行包装,然后用一个大LinearLayout包住所有的数字键盘如下图,它与下面支付类型比例是6:1,这样数字键盘就会按屏幕大小高度与宽度进行变化,每一行数字键盘用一个LinearLayout,里面包3个数字显示Button按钮。

Android如何制作漂亮的自适布局的键盘第2张

  设置每行的LinearLayout的layout_height=0dp,layout_weight=1,具体设置如下:

 <style name="layout_input_amount_style">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">0dp</item>
        <item name="android:layout_weight">1</item>
        <item name="android:layout_marginBottom">1dp</item>
        <item name="android:gravity">center</item>
        <item name="android:orientation">horizontal</item>
    </style>

  这样就保证了上下自适应布局。然后行里面的Button也是平均分配,不过这里是横向布局:layout_width=0dp,layout_weight=1,具体设置如下:

 <style name="btn_input_amount_style">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:layout_weight">1</item>
        <item name="android:textSize">40sp</item>
        <item name="android:textColor">#333333</item>
        <item name="android:background">@color/white</item>
    </style>

  这样就达到了上面的数字键盘的上下左右自适应了。现在的问题是其中的灰色边框怎么出来呢?TextView中没有设置border的属性,网上找的方法又很麻烦。

  这里需要用到一个技巧,利用灰色背景,让两个按键间的margin=1,上下也是margin=1,但是最右边的3、6、9和最后一行不用加。

<Button
   android:id="@+id/btn_1"
   style="@style/btn_input_amount_style"
   android:layout_marginRight="1dp"
   android:text="1" />

   为什么要设置layout_width=0dp?结合layout_weight,可以使控件成正比例显示,轻松解决了当前Android开发最为头疼的碎片化问题之一。如果设置成wrap_content,内容过长会导致上下无法对齐的情况。

  下面为整个布局内容:

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context="com.view.InputAmountActivity">

    <RelativeLayout
        android:id="@+id/bar_input"
        android:layout_width="match_parent"
        android:layout_height="@dimen/title_bar_height"
        android:background="@color/logo_background"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/bar_back"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@color/transparent"
            android:drawableLeft="@drawable/btn_back_detail"
            android:paddingLeft="17dip"
            android:paddingRight="17dip" />

        <TextView
            android:id="@+id/bar_title"
            style="@style/title_text_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:singleLine="true"
            android:text="输入金额" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/txt_amount"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/bar_input"
        android:background="@color/logo_background">

        <TextView
            android:id="@+id/txt_pay_amount"
            android:layout_width="match_parent"
            android:layout_height="115dp"
            android:background="@color/transparent"
            android:gravity="right|center"
            android:paddingLeft="17dip"
            android:paddingRight="20dp"
            android:text="¥998"
            android:textColor="@color/white"
            android:textSize="40sp"
            android:textStyle="bold" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/txt_amount"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/table_num"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="6"
            android:background="#c8cbcc"
            android:orientation="vertical">

            <LinearLayout style="@style/layout_input_amount_style">

                <Button
                    android:id="@+id/btn_1"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="1" />

                <Button
                    android:id="@+id/btn_2"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="2" />

                <Button
                    android:id="@+id/btn_3"
                    style="@style/btn_input_amount_style"
                    android:text="3" />
            </LinearLayout>

            <LinearLayout style="@style/layout_input_amount_style">

                <Button
                    android:id="@+id/btn_4"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="4" />

                <Button
                    android:id="@+id/btn_5"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="5" />

                <Button
                    android:id="@+id/btn_6"
                    style="@style/btn_input_amount_style"
                    android:text="6" />
            </LinearLayout>

            <LinearLayout style="@style/layout_input_amount_style">

                <Button
                    android:id="@+id/btn_7"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="7" />

                <Button
                    android:id="@+id/btn_8"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="8" />

                <Button
                    android:id="@+id/btn_9"
                    style="@style/btn_input_amount_style"
                    android:text="9" />
            </LinearLayout>

            <LinearLayout style="@style/layout_input_amount_style">

                <Button
                    android:id="@+id/btn_t"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="." />

                <Button
                    android:id="@+id/btn_0"
                    style="@style/btn_input_amount_style"
                    android:layout_marginRight="1dp"
                    android:text="0" />

                <ImageButton
                    android:id="@+id/btn_d"
                    style="@style/btn_input_amount_style"
                    android:src="@drawable/ico_del" />

            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="68dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <LinearLayout
                android:id="@+id/layout_zhifubao"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/logo_background"
                android:gravity="center"
                android:orientation="vertical">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="9dp"
                    android:src="@drawable/ico_zhifubao" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="9dp"
                    android:text="支付宝"
                    android:textColor="@color/white"
                    android:textSize="12sp" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/layout_wechat"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="#3cb034"
                android:gravity="center"
                android:orientation="vertical">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="9dp"
                    android:src="@drawable/ico_wechat" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="9dp"
                    android:text="微信"
                    android:textColor="@color/white"
                    android:textSize="12sp" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/layout_pay"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="#ff7700"
                android:gravity="center"
                android:orientation="vertical">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="9dp"
                    android:src="@drawable/ico_pay" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="9dp"
                    android:text="储值"
                    android:textColor="@color/white"
                    android:textSize="12sp" />
            </LinearLayout>
        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

  是不是很酷?

  图标什么的自己上网找吧,这里就不贴出来了。

     微信支付的源码和支付碰到的部分问题解决方法已上传至微信公众号【一个码农的日常】,其它知识可回复:数据库,NET ,JS 即可自行下载,以后会定期更新内容。

免责声明:文章转载自《Android如何制作漂亮的自适布局的键盘》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何解决Visual Studio调试Debug很卡很慢QQ三方登录步骤详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何生成Android签名证书、安卓签名获取工具获取APP签名报错:NameNotFoundException: Signs is null的问题

  每个安卓APP,都要签名证书才能安装在手机上,测试的应用有测试的签名证书,生产环境有生产环境的签名证书,在开发APP之前,我们首先生成一个用于该APP的签名证书,用于测试调试应用,像微信支付、分享、地图,这些等等都需要用到生产环境的签名证书。   生成 Android 签名文件,目前有两种一种是 eclipse 开发工具生成的后缀名  .keystor...

android 应用在启动后进行全局的的初始化操作

例如对于Volley的使用: 1:定义一个类使其继承Application package com.wzh.app; import com.wzh.volley.WzhVolley; import android.app.Application; import android.util.Log; public class WzhShshtA...

uniapp 微信小程序 微信7.0.12版本IOS端部分request请求被缓存

在IOS端微信更新深色模式后(7.0.12版本),IOS端小程序会出现实时请求的数据无法实时渲染到页面上。 也在微信社区向官方反映过该情况 ----> https://developers.weixin.qq.com/community/develop/doc/00064a827907e869a61a7220456c00 但是官方要求提供原生代码(我...

安卓手机清缓存方式

1,安卓手机清除缓存访问:debugx5.qq.com 2, 安卓手机清除缓存三步走:1、点击 debugtbs.qq.com 后退出;2、点击 debugmm.qq.com/?forcex5=true 后退出;3、访问 debugx5.qq.com,在这个页面清除缓存;...

(转载)Qt:给QLineEdit加上一个搜索按钮

(转载)http://www.cppblog.com/biao/archive/2011/10/27/159209.html   效果图如下:     工程文件:/Files/biao/SearchButton.7z   /**********************************************  *               ...

玩转Android Camera开发(一):Surfaceview预览Camera,基础拍照功能完整demo

是在2012年的除夕之夜仓促完成,后来很多人指出了一些问题,琐事缠身一直没有进行升级。后来随着我自己的使用,越来越发现不出个升级版的demo是不行了。有时候就连我自己用这个demo测一些性能、功能点,用着都不顺手。当初代码是在linux下写的,弄到windows里下全是乱码。还要自己改几分钟才能改好。另外,很多人说不能正常预览,原因是我在布局里把Surfa...