Android--Day02

尝试把button形状改变

button改圆之旅:

1.首先,我经过思考,如果按钮为圆,那么只需两个半径相等,我查看了模拟机尺寸为1080*2220,于是果断给上面两个textview一共1140dp,然后按钮全没了,此时是第一个滑铁卢

2.我经过思考,发现是单位不对,1080*2220是px,于是在师傅指导下发现虚拟机给出了393*808dp,然后我又继续分配给GridLayout393dp的布局,发现还不是圆的,此时是第二个滑铁卢

3.我又经过思考,发现我给每个按钮设置了margin,于是我把margin值算上,再次分配hight,结果还不是圆的,此时是第三个滑铁卢

4.我再次经过思考,终于发现两个半径确实是相同的,但是这个圆的面积超出了GridLayout给定的长方形面积,所以按钮被压扁了,此时已经破防

5.心灰意冷之下我随便输了个250dp(一个这种问题纠结这么久我觉得我是250),然后他就圆了(也不知道是不是真的圆,反正看起来是圆了)。。。。

鼠标左键单击要选择的代码开头,然后按住【Shift】键,鼠标左键单击要选择的代码尾,即可快速选择多行代码

 ALT + 左键    多行编辑

 ALT + shift + 左键  特定焦点多行编辑

ALT + shift + insert进入多行编辑模式

GridLayout.spec()

计算器demo问题:

1.Constant expression required:switch的case中要求常量表达式,R.id.button名称会报错:原因:gradle8.0之后不让用(R文件下的id值未被final修饰,即不是常量表达式)

2.点等号没反应

3.null和""不是一个东西!!!!

“”是一个实际的字符串,尽管是一个空字符串。

然而,null 意味着 String 变量不指向任何内容。

a==b返回 false,因为 "" 和 null 不占用内存中的相同空间——换句话说,它们的变量不指向相同的对象。

a.equals(b)显然,返回 false 是因为“”不等于 null。

区别在于,由于“”是一个实际的字符串,您仍然可以调用它的方法或函数,例如

a.length()

a.substring(0, 1)

4.charSeque

setBackground

今日总结:(研究了一整天,进展很小,但是收获颇丰)

1.计算器demo:

遇到的问题:

(1)Constant expression required

出现原因:switch的case中要求常量表达式,就是我直接用case R.id.按钮名称

问题原因:gradle8.0之后不让用(R文件下的id值未被final修饰,即不是常量表达式)

解决方法:改用if-else或者把gradle版本降低(我选择了前者)

(2)点等号没反应(问题是小问题,但是耗费了很多时间,不过提升很大)

出现原因:原因1:后来加的等号的button没有设置监听器。原因2:OnClick方法中我初始化的各个变量,导致每次触发会把之前的变量全部清0

解决方法/找到问题的过程:第一个原因找了很久,尝试打断点没有输出结果,说明,我的elseif语句没有执行,我去判断了判断语句的可执行没有问题,才想到可能是监听器的问题。设置监听器后,断点有了反应,但是无法正常执行语句,再次断点,打印输出发现firstNumber一直都是一个值,比如输入21,那么它只保存有1,多次调试后发现每次它都被初始化为0,于是找到问题所在

(3)(究极重量级)String 赋值为null与""的区别

出现原因:点等号爆String类型转Double类型对象为空,那么fiestNumber和secondNumber肯定有一个是空,打断点

以为是secondNumber为空,按此调试一直还是报错误,

解决方法:后来我把两个变量打印输出不同的验证消息,发现原来firstNumber的赋值从未执行过,而该赋值的if判定语句是:operator.equals(null)。我寻思这句话好像没问题,但它就是不执行,一直迷惑,后来突发奇想换成""试试,然后就成功了。去搜了null和""的区别,然后也通过JVM的内存结构图成功理解了二者区别:null相当于在堆中创建了一个对象,但是不指向字符串,而""相当于指向了一个空的字符串

(搜这个问题的时候有个解答附的图我觉得很形象)

2.圆形ui

早上的设置尺寸是硬凑的方法。我搜索相关解答后得到了可以用shape来自定义button的形状,最初尝试用rectangle,但是corner很难设置,在师傅的指导下选用了oval。

但是我尝试去给button设置该background时,发现button形状仍然不是圆形。查询Goole加询问师傅得知如果自定义的shape想要是圆形,需要外框为正方形,但是在xml中无法动态设置width和height相同,于是我尝试用java代码实现。

java代码我有两个思路,一个是自己想的,初始化一个GridLayout,然后调用getwidth方法得到宽度值,然后赋给height,之后初始化button,用button.setBackground(getDrawable(R.drawable.round_shape_test));

来设定button的形状,但是这种方法设置出来的Gridlayout的两属性仍不相同,导致button形状仍然不是圆形

于是我采用第二种方法:

自定义ViewGroup,继承RelativeLayout或者LinearLayout,重写onMeasure()方法

但是还是失败了

最后我选择在xml布局下指定GridLayout的宽高一致,但是他下面的每个网格还不是正方形,尝试多次后,这样设置button属性:

android:layout_width="0dp"

android:layout_columnWeight="1"

android:layout_height="0dp"

android:layout_rowWeight="1"

成功实现每个button所在的网格都是正方形,最终成功实现每个button形状都是圆形,我尝试用xml下切换其他分辨率的屏幕,也都能成功实现

明日计划:

1.按网课继续学习

2.实际操作网课的案例,发现问题,解决问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值