我有以下形状: 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形状。这怎么可能?我认为解决方案是使用旧视图的特定参数(如文本)删除旧形状并使用新的形状进行充气,但我认为这不是正确的,而且根本不快。
答案 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>