我有一个Android应用程序,它使用带有MapView
控件的ImageButton
(移动到用户的当前位置)我已添加到右上角。我遇到的问题是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"
我明白了:
请注意,虽然这基本上是我想要的不透明度,但更改背景会影响填充,并且在按下时也不会显示蓝色“闪光”(显然在此问题中未说明)。< / p>
所以我的问题是,如何保持非按下状态下的背景颜色/不透明度,同时保留按钮的其他视觉质量?我简单地阅读了关于Android风格和主题的内容,但是甚至无法弄清楚这个按钮从哪个样式获取其样式/主题,以及如何在保留所有其他视觉功能的同时覆盖背景颜色/不透明度。
答案 0 :(得分: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" />
通过上述更改,当按下按钮时,按钮使用的bacground颜色将会改变,并且您可以获得“闪光”效果。
答案 1 :(得分:0)
我最终使用样式来继承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
的背景,似乎只是略微透明,这就是我之后的情况,所以我现在根本没有设置透明度。