本人所写的Hy计算器,已在豌豆荚发布,在此公开界面布局代码,并配注释。该界面布局通过自动压缩计算器显示屏的大小,可以使得按键的布局在不同分辨率手机上相对保持不变。
本人能力有限,兴许在诸位大拿看来,此计算器界面粗鄙不堪,但若是有同我一般的初学者在阅读了本篇文章后,自己的一些疑惑得到了解答,那我不惜耗费时间写下这篇文章,也就不是完全没有意义了。
在写这个计算器的过程中,也是遇到了很多困难,在网上搜索后,很多问题没能找到答案,有些问题即使找到了答案,也耗费了诸多时间。若是这篇文章能够抛砖引玉,大家能多多分享自己的心得见解,让后来人学习的过程稍稍平坦,那更是意外之喜了。
好了,下边且听我细细道来,若有不对之处,还望斧正,若有更佳之方法,欢迎补充。(最下方有效果图)
<!-- 线性布局为大框架,里边有两个表格布局,第一个表格布局里装的是EditText,作为 计算器显示屏,第二个表格布局里装的是GridLayout布局,Gridlayout里装的是所有的按键 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 采用线性布局为大框架,目的是可以设置权重,然后可以自由分配剩余的空间, 第一个tablelayout权重为999,第二个tablelayout权重为1,这样在不同分辨率下, 被拉伸、被收缩的就只有tablelayout1,即显示屏,而tablelayout2即按键几乎不会 改变相对大小 --> <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="999" > <EditText android:id="@+id/EditText" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="" android:textSize="15sp" /> </TableLayout> <!-- 注意android:layout_height="wrap_content"这句话,如果不是wrap的话, 当显示屏的字符占满屏幕后,继续输入的话,显示屏会不断扩张,按键会被挤出手机屏幕外 --> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" > <!-- 采用Gridlayout是因为有些按键需要占据两个,不使用Gridlayout,当分辨率变化,显示 的按键就会错位 --> <GridLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnCount="4" android:orientation="horizontal" android:rowCount="9" > <!-- android:layout_gravity="fill"这句话让所有按键充满网格,避免按键大小不统一, android:textSize="15sp"、 android:minHeight="45dp"这两个参数是我多次调整后的结果 以适应不同分辨率手机,android:textSize="15sp"是设置按键字体的大小,android:minHeight="45dp" 是设置按键上下边框距离文字的长度 --> <Button android:id="@+id/clearall" android:layout_gravity="fill" android:text="清屏" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/fun" android:layout_gravity="fill" android:text="功能" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/backspace" android:layout_columnSpan="2" android:layout_gravity="fill" android:text="退格" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/tentotwo" android:layout_gravity="fill" android:text="10->2" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/twotosixteen" android:layout_gravity="fill" android:text="2->16" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/sixteentotwo" android:layout_gravity="fill" android:text="16->2" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/twototen" android:layout_gravity="fill" android:text="2->10" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/sinasin" android:layout_gravity="fill" android:text="sin/asin" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/cosacos" android:layout_gravity="fill" android:text="cos/acos" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/tanatan" android:layout_gravity="fill" android:text="tan/atan" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/exp" android:layout_gravity="fill" android:text="^" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/sqrt" android:layout_gravity="fill" android:text="√" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/zuokuohao" android:layout_gravity="fill" android:text="(" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/youkuohao" android:layout_gravity="fill" android:text=")" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/add" android:layout_gravity="fill" android:text="+" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/seven" android:layout_gravity="fill" android:text="7" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/eight" android:layout_gravity="fill" android:text="8" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/nine" android:layout_gravity="fill" android:text="9" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/sub" android:layout_gravity="fill" android:text="-" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/fourandD" android:layout_gravity="fill" android:text="4/d" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/fiveandE" android:layout_gravity="fill" android:text="5/e" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/sixandF" android:layout_gravity="fill" android:text="6/f" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/mul" android:layout_gravity="fill" android:text="x" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/oneandA" android:layout_gravity="fill" android:text="1/a" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/twoandB" android:layout_gravity="fill" android:text="2/b" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/threeandC" android:layout_gravity="fill" android:text="3/c" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/div" android:layout_gravity="fill" android:text="÷" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/zero" android:layout_gravity="fill" android:text="0" android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/point" android:layout_gravity="fill" android:text="." android:textSize="15sp" android:minHeight="45dp" /> <Button android:id="@+id/eql" android:layout_columnSpan="2" android:layout_gravity="fill" android:text="=" android:textSize="15sp" android:minHeight="45dp" /> </GridLayout> </TableLayout> </LinearLayout>
下边是效果图: