Android – 具有州列表背景的仪表板布局仅适用于图标

Android – 具有州列表背景的仪表板布局仅适用于图标,第1张

概述我正在尝试创建仪表板布局.它与 google i/o’s dashboard的不同之处在于图像图标的背景和图标下方的文字不同. 换句话说,图标(仅图像)的背景具有StateListDrawable,而文本具有透明背景.这样做的一种方法是将图像和文本的这种组合放在LinearLayout中,并在每个项目的仪表板布局中使用它,这似乎不那么简单.这是我能做到的唯一方法吗?还是有更好更简单的解决方案? 更 我正在尝试创建仪表板布局.它与 google i/o’s dashboard的不同之处在于图像图标的背景和图标下方的文字不同.

换句话说,图标(仅图像)的背景具有StateListDrawable,而文本具有透明背景.这样做的一种方法是将图像和文本的这种组合放在linearLayout中,并在每个项目的仪表板布局中使用它,这似乎不那么简单.这是我能做到的唯一方法吗?还是有更好更简单的解决方案?

更新:您可以从here进行项目设置并进行实验.

>布局文件dashboard2.xml正在使用Google的DashboardLayout类.在主要活动中,我只是将视图的内容设置为dashboard2
>在该项目中,您将在名为dashboard_icon_bg_selector.xml的drawable文件夹中找到可绘制的状态列表.我希望所有仪表板图标的背景都是这个状态列表可绘制的.

任何建议表示赞赏.

解决方法 我能想到的一个可能的解决方案是使用LayerDrawable作为TextVIEw的topDrawable.我将概述这个想法,列举一些细节并附上下面修改后的示例项目的链接.

按钮的代码(在布局文件中):

<button androID:ID="@+ID/home_btn_schedule"        androID:text="button 1"    androID:drawabletop="@drawable/dashboard_icon_bg_selector" />

两个LayerDrawable,一个用于“按下/聚焦/选定”状态,另一个用于其他每个状态(其余):

dashboard_icon_layer_background_selected.xml:

<?xml version="1.0" enCoding="utf-8"?><@R_417_3419@ xmlns:androID="http://schemas.androID.com/apk/res/androID">    <item androID:drawable="@drawable/dashboard_icon_background_selected" />    <item androID:bottom="14dip">        <bitmap androID:src="@drawable/btn_star_big_on_pressed"            androID:gravity="center" />    </item></@R_417_3419@>

dashboard_icon_layer_background_rest.xml:

<?xml version="1.0" enCoding="utf-8"?><@R_417_3419@ xmlns:androID="http://schemas.androID.com/apk/res/androID">    <item androID:drawable="@drawable/dashboard_icon_background_rest" />    <item androID:bottom="14dip">        <bitmap androID:src="@drawable/btn_star_big_on_rest"            androID:gravity="center" />    </item></@R_417_3419@>

这个具体例子的一些特殊性:

>将星形图像作为位图引用的原因是为了防止AndroID将它们缩放到容器的全宽和高度.添加底部距离实际上使星形相对于背景图像居中(textSize = 12,加上2用于填充),老实说,像这样硬编码非常难看.如果没有此偏移,则居中重力会将星形图像放在整个容器的中心内,因此包括文本添加的空间.
>因此,用< item androID:drawable =“@ drawable / btn_star_big_on_rest”/>替换带有位图的项目将导致星形图像被放大.只需尝试一次即可了解效果.
>这种现象非常不幸,因为我们可以利用上面所有已经定义的状态来引用另一个xml drawable!这就是为什么我实际上必须从AndroID存储库中复制两个星形图像的原因:您不能将xml drawable引用为位图源,也不能公开引用实际图像.尝试用< item androID:drawable =“@ androID:drawable / btn_star”/>替换位图定义看到图像按比例放大,但保持预定义状态不变.
>您可以通过从星形图像中创建9个样本来解决缩放问题,为不同的状态创建StateListDrawable并在图层项中引用生成的xml drawable.虽然AndroID仍然可以将整个图像拉伸到容器的全尺寸,但9个补丁可以确保只有透明像素可以缩放.
> //编辑:我意识到这种方法还有另一个限制,因为点击文本不会使图标的状态发生变化.这可能就是你所追求的,但就我个人而言,从用户的角度来看,让整个事情响应触摸事件是有意义的……

希望这是有道理的!只是为了向您显示结果:左侧全部处于静止状态,右侧是按下按钮.

Zipped project here.

总结

以上是内存溢出为你收集整理的Android – 具有州列表背景的仪表板布局仅适用于图标全部内容,希望文章能够帮你解决Android – 具有州列表背景的仪表板布局仅适用于图标所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1124342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存