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(似乎使用以下修改解决):

整个按钮在屏幕上变得不可见(它仍然可以在该屏幕位置按下!)。我如何修改上述编码以满足定义的目的?谢谢!!

修改但新的问题(问题2):

以下修改后的布局和选择器似乎解决了上述问题1。但是分辨率变得更差,图标扭曲并且看起来更大。第一个和第二个图标见下面的截图,使用下面的修改代码(图标 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 回答