0

右上隅に追加した(ユーザーの現在の場所に移動するための)コントロールMapView付きのを使用するAndroidアプリケーションがあります。ImageButton私が抱えている問題は、ImageButtonコントロールの背景が透明すぎることですが、それをandroid:background="#BBFFFFFF"変更すると、背景のサイズが変更され、ボタンが押されたときに通常表示される青い「フラッシュ」が削除されます。これは、保持したい2つの品質です。

私はこのようなものから始めます:

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

これは次のようなものを実現します:

背景が透明すぎるImageButtonコントロール

だから私は追加します:

android:background="#BBFFFFFF"

そして私はこれを手に入れます:

背景が不透明なImageButtonコントロールですが、他のプロパティが影響を受けます

これは基本的に私が望む不透明度のレベルですが、背景を変更するとパディングに影響し、押したときに青い「フラッシュ」が表示されないことに注意してください(これは明らかにこの質問には示されていません)。

だから私の質問は、ボタンの他​​の視覚的品質を維持しながら、押されていない状態で背景色/不透明度だけを変更するにはどうすればよいですか?Androidのスタイルとテーマについて簡単に読んだのですが、このボタンがそのスタイル/テーマをどこから取得しているのか、他のすべての視覚的機能を保持しながら背景色/不透明度をオーバーライドする方法を理解することさえできません。

4

2 に答える 2

1

問題

ビューの背景に固定色を割り当てる場合、ビューのデフォルトの背景を、定義した固定色に置き換えます。

実際には、ボタンの背景は単純な固定色ではありません。これは、色またはドローアブルの状態リストです。つまり、ボタンのステータス(フォーカス、選択、押されたなど)に応じて、異なる背景が使用され、ボタンが押されたときに表示される「フラッシュ」アニメーションになります。この状態リストを、ボタンのステータスに関係なく、単純な固定色に置き換えると、背景が固定されます(つまり、ボタンが押されても変化しません)。

解像度

画像ビューのアルファ(つまり透明度)を変更するために使用できるxmlパラメータがあります。これは次のとおりです。

        android:alpha="1"

ここで、上記の値1は0から1までの任意の浮動小数点数であり、1が最大不透明度です。しかし、私があなたの問題を正しく理解していれば、画像アルファではなく背景のアルファを変更したいので、これはあなたの問題を解決していないと思います。とにかく、デフォルトはのようです1

selectorうまくいくはずの1つの可能性は、背景として使用するを定義することです。セレクターは、自分のステータスに基づいてドローアブルを選択します。

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

上記の変更により、ボタンを押すとボタンが使用する背景色が変化し、「フラッシュ」効果を得ることができます。

于 2012-10-20T18:47:15.013 に答える
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いるようで、少し透明に見えますが、とにかく透明度を設定していません。

于 2012-10-23T04:58:52.187 に答える