登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [目录位置未定]手工设置控件背景色和边框     [回主站]     [分站链接]
[目录位置未定]手工设置控件背景色和边框
clq
浏览(336) - 2020-11-10 15:10:27 发表 编辑

关键字: android_dev_self_book

[2020-11-10 16:34:26 最后更新]
[目录位置未定]手工设置控件背景色和边框

说是 ide 安卓和 ios 的界面设计器其实 bug 较多。ios 就不吐槽了,安卓的在 asd 中好了很多,但有时候还是很困难。最后折腾好久后我最终选择 ide 结合手工编写 xml 的方式修改界面,会省很多事。用 ide 画个大概,然后直接改 xml ,好在这方面安卓比 ios 好很多,基本上没出过什么大问题。

我强烈建议大家手写各种对齐代码。这里先简单介绍一下对按钮控件的属性修改。

首先是它的目录藏得很深,一般在 \src\main\res\layout 这样的位置。是纯 xml 与 java 代码无关,直接把它当作 html/css 编辑就好了。

背景色
android:background="#00ff0000"

字体颜色
android:textColor="#ffffff"

设置边框就没那么好运了,一般要上什么 drawable 。我很讨厌这个反人类的东西。所以我是不用 drawable 的。而且用这种思想编程你会觉得和其它开发语言格格不入,我更倾向于用 h5 的方法用 div 拼凑出需要的界面。

所以我的做法是叠加了个自定义的 android.view.View 来画出它的边框,然后将其位置于控件“关联”起来。
对于大家来说自己写或者是维护这个类太什么了一点,变通的方法不用也可以。直接用 android.view.View 然后设置它的 android:background="#cccccc" 背景色就可以了。本来是把这个标准 view 做父控件更好的,不过不知为什么设计器不允许,具体原因我就没去研究了。变通方法是将 view 与控件做成同级的界面元素。用以下属性定义它们的相对位置:

android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"

以上表示与关联控件的边距是多少,类似的还有另外两个属性 layout_marginTop, layout_marginBottom (还有更难理解的 layout_marginStart layout_marginEnd ,搞不懂的话全部设置也是可以的)。而这 4 个距离是作用在哪个控件是由以下属性控制的:
app:layout_constraintBottom_toBottomOf="@+id/pnlBtnLogin"
app:layout_constraintEnd_toEndOf ="@+id/pnlBtnLogin"
app:layout_constraintStart_toStartOf ="@+id/pnlBtnLogin"
app:layout_constraintTop_toTopOf ="@+id/pnlBtnLogin"

可以看到它们指向了同一个控件。要说明的是,这 4 个属性在界面中拖放 view 的 4 个边中的圆点就可以设置了,实在不行再手写吧。因为字符太多了,容易写错。
不过上面的 4 个距离就不太好设置,推荐手写(好像在属性设置器中也是可以设置的)。

要注意的是,原理上它们的父控件(父容器)必须是 RelativeLayout 相对布局类的,只不过,现在 asd 默认会生成这样的容器,所以可以不用管那么多。

另外还有一个比较重要的,在 asd 可视化插入 view 时是不能选择基础的 android.view.View 的(原因不明,还请大伙指教)。这时可以随便选择一个,然后再手写修改 class 节点为 android.view.View 就可以了,类似下面的代码。

<view
android:id="@+id/pnlBtnLogin"
class="android.view.View"
id="@+id/view"
android:layout_width2="327dp"
android:layout_height="127dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:background="#cccccc"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnLogin" / >

<view
class="android.view.View"
id="@+id/view2"
android:layout_width2="320dp"
android:layout_height="120dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="#FF8040"
app:layout_constraintBottom_toBottomOf="@+id/pnlBtnLogin"
app:layout_constraintEnd_toEndOf="@+id/pnlBtnLogin"
app:layout_constraintStart_toStartOf="@+id/pnlBtnLogin"
app:layout_constraintTop_toTopOf="@+id/pnlBtnLogin" />

以上代码在 asd 中会报错,因为它解析不了 android:layout_width2 这样不存在的属性,所以要去掉。我这里之所以有,是因为要取消原有的 android:layout_width 属性,以使控件的宽度能随关联控件改变而改变。这样可间接的实现 h5 中的 div 布局或者是 delphi 中的对齐。

这个值也不能不写,也不能写 fill_parent 或 wrap_content 这样的,要写为 0 而且还得带单位。
android:layout_width="0dp" /正确的写法

android:layout_width="0" //这个会报错

完成后的效果,pnlBtnLogin 就相当于是边框了。
这样组合出来的标准 view 同样是可以设置点击事件的。


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
简式 android 开发教程 for xmppmini 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1