在膨胀视图上更改形状-Android

在膨胀视图上更改形状-Android,android,android-layout,android-studio,android-inflate,Android,Android Layout,Android Studio,Android Inflate,我有以下形状: 1) quizgenerallanswershape.xml: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="100dp"/> <g

我有以下形状: 1) quizgenerallanswershape.xml:

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

<corners android:radius="100dp"/>


<gradient
    android:angle="45"
    android:centerX="35%"
    android:startColor="#E8E8E8"
    android:centerColor="#7995A8"
    android:endColor="#000000"
    android:type="linear"
    />
<padding
    android:left="0dp"
    android:top="0dp"
    android:right="0dp"
    android:bottom="0dp"
/>
<size
    android:width="270dp"
    android:height="60dp"
    />
<stroke
    android:width="3dp"
    android:color="#878787"
    />

我想在视图对象中单击时给出一个quizrightanswershape形状。这怎么可能?我想到的一个解决方案是删除旧形状并使用旧视图的特定参数(如文本)膨胀新形状,但我认为这是不对的,一点也不快。

这很容易。您正在将常规形状设置为按钮的背景,对吗?是的,那么,使用findViewById在布局中查找按钮,然后附加OnClickListener,在其中您将使用setBackground或setBackgroundDrawable来更改按钮的背景形状。

为什么不简单地更改按钮的背景

您可以通过以下简单方式进行更改:

mButton.setBackground(getResources().getDrawable(R.drawable.yourShape));  
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" >

    <item android:state_pressed="true" android:state_focused="true">
        <shape>
            <gradient
                android:startColor="#f00"
                android:endColor="#f00"
                android:angle="270"/>
            <stroke
                android:width="2dp"
                android:color="#eee"/>
            <corners
                android:radius="3dp" />

        </shape>
    </item>

    <item>
        <shape>
            <gradient
                android:startColor="#ccc"
                android:endColor="#ccc"
                android:angle="270"/>
            <stroke
                android:width="2dp"
                android:color="#ccc"/>
            <corners
                android:radius="3dp" />

        </shape>
    </item>
</selector>  
如果您想更改按钮形状,如果用户单击按钮,如果不再次按下按钮,请使用旧形状,以便
您可以使用如下形状:

mButton.setBackground(getResources().getDrawable(R.drawable.yourShape));  
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" >

    <item android:state_pressed="true" android:state_focused="true">
        <shape>
            <gradient
                android:startColor="#f00"
                android:endColor="#f00"
                android:angle="270"/>
            <stroke
                android:width="2dp"
                android:color="#eee"/>
            <corners
                android:radius="3dp" />

        </shape>
    </item>

    <item>
        <shape>
            <gradient
                android:startColor="#ccc"
                android:endColor="#ccc"
                android:angle="270"/>
            <stroke
                android:width="2dp"
                android:color="#ccc"/>
            <corners
                android:radius="3dp" />

        </shape>
    </item>
</selector>  

太棒了。。我想再次给我的东西充气,谢谢!
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" >

    <item android:state_pressed="true" android:state_focused="true">
        <shape>
            <gradient
                android:startColor="#f00"
                android:endColor="#f00"
                android:angle="270"/>
            <stroke
                android:width="2dp"
                android:color="#eee"/>
            <corners
                android:radius="3dp" />

        </shape>
    </item>

    <item>
        <shape>
            <gradient
                android:startColor="#ccc"
                android:endColor="#ccc"
                android:angle="270"/>
            <stroke
                android:width="2dp"
                android:color="#ccc"/>
            <corners
                android:radius="3dp" />

        </shape>
    </item>
</selector>