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

时间:2014-08-26 17:46:53

标签: android android-layout android-studio android-inflate

我有以下形状: 1)quizgeneralanswershape.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"
    />

2)quizrightanswer.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="#00FF80"
    android:centerColor="#66FFB2"
    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"
    />

我在创建的布局文件夹中还有2个xml文件,以便使用我想要的形状描述我想要的布局。这是一个:quizrightanswer.xml:

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/quizButton"
android:text="Button"
android:textColor="#FFFFFF"
android:textSize="13sp"
android:layout_width="270dp"
android:layout_height="60dp"
android:background="@drawable/quizrightanswershape"
android:clickable="true"
/>

我可以膨胀一个特定的形状并使用它。但是,我想知道是否有任何方法可以为已存在的对象赋予新的形状。为了更清楚,我想在OnClick事件中更改按钮的形状。以下是我的活动的一些代码:#/ p>

    quizTableLayout = (TableLayout) findViewById(R.id.quizTableLayout);
    view = LayoutInflater.from(this).inflate(R.layout.quizquestion, null);//works fine

我想在view对象中点击一下quizrightanswershape形状。这怎么可能?我认为解决方案是使用旧视图的特定参数(如文本)删除旧形状并使用新的形状进行充气,但我认为这不是正确的,而且根本不快。

2 个答案:

答案 0 :(得分:1)

这很简单。您是否将一般形状设置为按钮的背景?是的,使用findViewById在你的布局中找到你的按钮,然后附上一个OnClickListener,你将使用setBackground或setBackgroundDrawable来改变背景形状。

答案 1 :(得分:1)

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

以简单的方式你可以像这样改变它:

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>