0

アイコンのサンプルを使ってボタンのデザインをしていますが、アイコンを押さないときは黒、押すと白になるようにしたいと思っています。次のようにコーディングします。

レイアウトxmlで:

<Button
     android:layout_height="wrap_content"
     android:layout_width="fill_parent"
     android:layout_weight="1"
     android:background="@drawable/icon_new_btn"
     android:scaleType="fitXY"                
     android:id="@+id/newBtn" />

icon_new_btn.xml で:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >         
        <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
            <solid android:drawableTop="@drawable/icon_new_white"
                android:background="@android:color/transparent"/>> 
        </shape>    
    </item>

    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android">            
            <solid android:drawableTop="@drawable/icon_new"
                android:background="@android:color/transparent"/>                        
        </shape>
    </item>

</selector>

質問1(以下の変更を使用して解決されるようです):

ボタン全体が画面上で見えなくなります (その画面の場所ではまだ押すことができます!)。定義された目的を満たすために、上記のコーディングをどのように変更できますか? ありがとう!!

変更されたが新しい質問 (Question2):

次の変更されたレイアウトとセレクターは、上記の質問 1 を解決しているように見えます。しかし、解像度が大幅に低下し、アイコンが歪んで大きく見えます。以下の変更されたコードを使用した 1 番目と 2 番目のアイコンについては、以下のスクリーンショットを参照してください (アイコン 3 から 6 はandroid:drawableTop="@drawable/icon_save" 、プレス効果なしで単純に使用され、より高い解像度を示しています)。

ここに画像の説明を入力

変更されたレイアウト

    <Button
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:background="@drawable/icon_new_btn"
            android:scaleType="fitXY"                
            android:id="@+id/newBtn" /> 

変更されたセレクター:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/icon_new_white"
          android:state_pressed="true" />    

    <item android:drawable="@drawable/icon_new" />
</selector>
4

2 に答える 2

1

グラフィックが歪んでいる理由は、背景として設定されているためです。これを解決するには、代わりに次を使用できますImageButton

<ImageButton
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        android:src="@drawable/icon_new_btn"
        android:background="@null"
        android:id="@+id/newBtn" /> 

また、指定していましたandroid:scaleType="fitXY"。代わりに が必要になる場合がありandroid:scaleType="centerInside"ます。

于 2013-02-05T17:44:39.943 に答える
0

こんにちは私はあなたのために答えを投稿しています。res/layout に 4 つの xml ファイルを作成します。

状態.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Button Focused-->
    <item   android:state_focused="true"
            android:state_pressed="false"
            android:drawable="@layout/state1"
            />
<!-- Button Focused Pressed-->
    <item   android:state_focused="true"
            android:state_pressed="true"
             android:drawable="@layout/state1"
            />
<!-- Button Pressed-->
    <item   android:state_focused="false"
            android:state_pressed="true"
             android:drawable="@layout/state1"
            />
<!-- Button Default Image-->
    <item   android:drawable="@layout/state2"/>

</selector>

state1.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" shape="rectangle">
<!--this is to give gradient effect -->
<gradient   android:angle="270"
               android:startColor="#6b6b6b"
               android:endColor="#0e0e0e"
               />
<!-- this is make corners of button rounded -->
<corners    android:topLeftRadius="5dip"
               android:bottomRightRadius="5dip"
               android:topRightRadius="5dip"
               android:bottomLeftRadius="5dip"/>

</shape>

state2.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" shape="rectangle">
<!--this is to give gradient effect -->
<gradient   android:angle="270"
            android:startColor="#e7ff47"
            android:endColor="#90a501"
            />
<!-- this is make corners of button rounded -->
<corners    android:topLeftRadius="5dip"
               android:bottomRightRadius="5dip"
               android:topRightRadius="5dip"
               android:bottomLeftRadius="5dip"/>

</shape>

activity_main.xml 内

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

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="183dp"
        android:text="Click Here To Change Color" 
        android:background="@layout/state"/>

</RelativeLayout>

Java ファイル MainActivity.java

package com.example.getimage;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

それはすべてコーディングを楽しんでいます:)

于 2013-02-05T17:47:49.907 に答える