android按钮从屏幕上消失

时间:2013-02-05 16:36:30

标签: android button

我正在使用图标样本设计按钮,并希望在未按下图标时,它是黑色,按下时变为白色。编码如下:

布局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"而没有任何按下效果并显示更高的分辨率):

enter image description here

修改布局

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

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

您好,我正在为您发布答案。   在res / layout中创建4个xml文件。

state.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;
    }
}

那些都喜欢编码:)