【问题标题】:Android MapView control change background color without affecting other visual propertiesAndroid MapView 控件更改背景颜色而不影响其他视觉属性
【发布时间】:2023-03-24 18:25:01
【问题描述】:

我有一个使用MapViewImageButton 控件的Android 应用程序(移动到用户的当前位置),我已在右上角添加。我遇到的问题是 ImageButton 控件的背景太透明了,但是用 android:background="#BBFFFFFF" 更改它会改变背景的大小并删除您通常在按下按钮时看到的蓝色“闪光” - 我希望有两种品质保留。

我从这样的事情开始:

<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" >

<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="my api key"
/>

<ImageButton android:id="@+id/googlemaps_select_location"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_marginTop="13dp"
    android:layout_marginRight="13dp"

    android:src="@drawable/device_access_location_found"/> 

</RelativeLayout>

实现如下所示:

那么我补充一下:

android:background="#BBFFFFFF"

我明白了:

请注意,虽然这基本上是我想要的不透明度级别,但更改背景会影响填充,并且按下时也不会显示蓝色“闪光”(这显然没有在这个问题中说明)。

所以我的问题是,如何在未按下状态下仅更改背景颜色/不透明度,同时保留按钮的其他视觉质量?我简要阅读了有关 Android 样式和主题的内容,但甚至无法弄清楚该按钮的样式/主题来自何处,以及如何在保留所有其他视觉功能的同时覆盖背景颜色/不透明度。

【问题讨论】:

  • 发布您的完整布局 xml,因为解决方案取决于您添加不同视图的顺序。
  • @Luis 将其余布局添加到问题中。
  • 这很奇怪...您将ImageButton 添加到MapView 上,您将获得具有高透明度的图像(在第一张图像中)。必须发生两件事之一,您的原始图像(png 文件)正在使用较低的 alfa 值,或者您正在代码中的某处以编程方式更改它。
  • 图片来自 Google 提供的标准 Android 设计图标,是的,它似乎具有透明背景。这并不能解释背景大小的差异/点击时蓝色“闪光”行为的损失,这是我真正想弄清楚如何解决的问题......

标签: android background styles android-mapview


【解决方案1】:

问题

当您为视图背景分配固定颜色时,您正在将视图中的默认背景替换为您定义的固定颜色。

实际上,按钮的背景并不是简单的固定颜色。它是颜色或可绘制对象的状态列表,这意味着,根据按钮状态(焦点、选定、按下等),使用不同的背景,从而在按下按钮时产生“闪烁”动画。如果你用一个简单的固定颜色替换这个状态列表,而不是依赖于按钮的状态,你会得到一个固定的背景(即当按钮被按下时不改变)。

分辨率

有一个 xml 参数可以用来改变图像视图的 alfa(即透明度),即:

        android:alpha="1"

上面的值1 可以是0 到1 之间的任何浮点数,1 是最大不透明度。 但是,我相信这并不能解决您的问题,因为如果我正确理解您的问题,您想更改背景的 alfa 而不是图像 alfa。无论如何,默认值似乎是1

应该为您工作的一种可能性是定义一个selector 用作背景。选择器会根据他的状态选择drawable。

示例

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" android:drawable="@android:color/darker_gray" />
  <item android:drawable="@android:color/white" />
</selector>

将上面的 xml 文件保存在您的 drawable-xxxx 文件夹中,名称为 my_selector 在本例中,我使用标准的 android 颜色,但您可以定义自己的颜色。您需要为每个想要具有不同颜色的不同按钮状态分配一种颜色。

然后您需要将您的ImageView 背景定义为您在上面定义的选择器:

<ImageButton
    android:id="@+id/googlemaps_select_location"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="13dp"
    android:layout_marginTop="13dp"
    android:background="@drawable/my_selector"
    android:src="@drawable/device_access_location_found" />

通过以上的改变,按钮使用的背景颜色会随着按钮被按下而改变,你可以有“闪光”的效果。

【讨论】:

  • 感谢您的出色回答,如果没有更好的答案,我会尽快接受。我最终可能不得不求助于您所描述的方法,但是否有任何替代方法涉及“手术”设置 just 在未单击时设置背景颜色/透明度,并继承所有现有行为/出现在其他州?
  • 还有另一种解决方案,只是改变背景的alpha,但它更复杂。它涉及扩展 ImageView 并覆盖更改 aplha 的方法。您可以在stackoverflow.com/questions/2838757/…shikii.net/blog/… 中找到更多信息,您有一个完整的示例。
【解决方案2】:

我最终使用 style 来继承 Widget.ImageButton 的外观,只为我的目的做了一些小的调整:

我的/res/values/styles.xml 文件现在看起来像:

<resources>

<style name="AppTheme" parent="android:Theme.Light" />

<style name="my_loc_btn_style" parent="@android:style/Widget.ImageButton">
    <item name="android:layout_marginTop">8dp</item>
    <item name="android:layout_marginRight">8dp</item>
</style>

</resources>

我的布局文件有:

<ImageButton android:id="@+id/googlemaps_select_location"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    style="@style/my_loc_btn_style"
    android:src="@drawable/device_access_location_found"/>

这似乎继承了Widget.ImageButton 的背景,似乎只是略微透明,这正是我所追求的,所以我现在根本不设置透明度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2014-12-23
    • 2018-06-20
    相关资源
    最近更新 更多