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

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

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

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

  设置每行的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和最后一行不用加。

<Buttonandroid: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"><RelativeLayoutandroid:id="@+id/bar_input"android:layout_width="match_parent"android:layout_height="@dimen/title_bar_height"android:background="@color/logo_background"android:orientation="horizontal"><TextViewandroid: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" /><TextViewandroid: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><LinearLayoutandroid: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"><TextViewandroid: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><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/txt_amount"android:orientation="vertical"><LinearLayoutandroid: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"><Buttonandroid:id="@+id/btn_1"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="1" /><Buttonandroid:id="@+id/btn_2"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="2" /><Buttonandroid:id="@+id/btn_3"style="@style/btn_input_amount_style"android:text="3" /></LinearLayout><LinearLayout style="@style/layout_input_amount_style"><Buttonandroid:id="@+id/btn_4"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="4" /><Buttonandroid:id="@+id/btn_5"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="5" /><Buttonandroid:id="@+id/btn_6"style="@style/btn_input_amount_style"android:text="6" /></LinearLayout><LinearLayout style="@style/layout_input_amount_style"><Buttonandroid:id="@+id/btn_7"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="7" /><Buttonandroid:id="@+id/btn_8"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="8" /><Buttonandroid:id="@+id/btn_9"style="@style/btn_input_amount_style"android:text="9" /></LinearLayout><LinearLayout style="@style/layout_input_amount_style"><Buttonandroid:id="@+id/btn_t"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="." /><Buttonandroid:id="@+id/btn_0"style="@style/btn_input_amount_style"android:layout_marginRight="1dp"android:text="0" /><ImageButtonandroid:id="@+id/btn_d"style="@style/btn_input_amount_style"android:src="@drawable/ico_del" /></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="68dp"android:layout_weight="1"android:orientation="horizontal"><LinearLayoutandroid: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"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="9dp"android:src="@drawable/ico_zhifubao" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="9dp"android:text="支付宝"android:textColor="@color/white"android:textSize="12sp" /></LinearLayout><LinearLayoutandroid: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"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="9dp"android:src="@drawable/ico_wechat" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="9dp"android:text="微信"android:textColor="@color/white"android:textSize="12sp" /></LinearLayout><LinearLayoutandroid: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"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="9dp"android:src="@drawable/ico_pay" /><TextViewandroid: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 即可自行下载,以后会定期更新内容。

本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/5054575.html如需转载请自行联系原作者


欢醉

Android如何制作漂亮的自适布局的键盘相关推荐

  1. android页面布局计算机,Android Studio制作简单计算器App

    Android Studio制作简单计算器App 计算机界面如图: 程序设计步骤: (1)在布局文件中声明编辑文件框EditText,按钮Button等组件. (2)在MainActivity中获取组 ...

  2. 制作android布局模板,Android模板制作

    本文详细介绍模板相关的知识和如何制作Android模版及使用,便于较少不必要的重复性工作.比如我在工作中如果要创建一个新的模块,就不要需要创建MVP相关的几个类:Model.View.Presente ...

  3. 怎么用Android做登录界面,利用Android怎么制作一个APP登录界面

    利用Android怎么制作一个APP登录界面 发布时间:2020-12-02 17:09:10 来源:亿速云 阅读:79 作者:Leah 这期内容当中小编将会给大家带来有关利用Android怎么制作一 ...

  4. Flutter 制作漂亮的登录表单

    在本教程中,我将向您展示如何在 Flutter 和 Android studio 中制作漂亮的登录表单, 您将学习如何制作背景图像.如何在 Flutter中制作圆形按钮.如何添加一些不透明度以及如何添 ...

  5. Lottie Android 动画制作与使用

    Lottie Android 动画制作与使用 还未了解Lottie的同志,请观看我上篇文章: Lottie Android 初探 一.效果图预览 二.Adobe After Effects安装 作为I ...

  6. Android Studio 制作微信界面 上

    工程功能介绍 打开app,首先是个闪屏界面(常见于一般打开app时的小广告),设置时间为2s后进入登录界面.在登录界面中,中间可以输入密码,点击登录按钮进入微信的界面.   微信的界面由4个fragm ...

  7. Android studio制作计算器源代码

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://mp.csdn.net/postedit/82623704 一.Android studio制作计算器源代码 这是我学Android ...

  8. Android手电筒制作

    Android 手电筒制作 一.SystemUI中手电筒的控制 推荐:Android QuickSetting-手电筒控制 通过手机下拉状态栏,可以找到手电筒图标.也就是说SystemUI中存在控制手 ...

  9. Android Studio制作搜索栏

    Android Studio制作搜索栏 前言 一.何为自定义控件? 二.制作步骤 1.引入布局 2.布局解析 测试 前言 一.何为自定义控件? 系统自带的控件都是直接或间接继承自View的,View是 ...

最新文章

  1. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享_PHP教程
  2. codeforces Gargari and Permutations(DAG+BFS)
  3. 如何配置Ubuntu17的软件库(sortware update)
  4. jquery获得当前元素父级元素_jquery怎么获取当前元素的父元素
  5. stm32中的延时函数
  6. NUC1840 Graveyard Design【尺取法】
  7. C# 0xC0000005 捕获
  8. 计算机c程序题孔融让梨,幼儿园大班语言游戏教案《孔融让梨》含PPT课件
  9. QT高级编程技巧(一)-- 编写高效的signal slot通信代码
  10. java 求方差_java计算方差、标准差(均方差)实例代码
  11. BTA前瞻 | CyberMiles创始人卢亮:愿拿百万年薪求区块链人才
  12. 用showdown给HTML网页插入markdown笔记
  13. 钉钉如何调整组织架构_钉钉组织架构与员工同步指南
  14. json oracle 导入,JsonToOracle(Json导入Oracle工具)
  15. SpringBoot之RMI的简单使用
  16. FireFox必备插件(一)
  17. 我来玩转一下arp -a (pc ping 手机)
  18. windows系统通过命令行方式修改多字符串值类型的注册表
  19. 【Arcgis】绘制甘肃省行政区划地图
  20. MySQL的完美卸载

热门文章

  1. 思科交换机IOS升级
  2. linux-unzip解压文件
  3. 远程桌面登录时提示:出现了内部错误
  4. Android dependencies External Libraries 依赖包存放路径
  5. java instanceof 报错_instanceof关键字
  6. 批处理设置计算机不休眠,虚拟机状态下怎样设置电脑不休眠
  7. Flex是咋回事之一 集CS和BS之大成的RIA
  8. StringBuilder 拼接
  9. android盒子开发招聘,[原创]Android沙盒开发之系统libc库定制修改
  10. STM32 你不知道的看门狗细节