簡體   English   中英

在膨脹視圖上更改形狀-Android

[英]Change shape on an inflated View - Android

我有以下形狀: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事件上更改按鈕的形狀。 這是一些我的活動代碼,可以正常工作:

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

我希望在視圖對象中單擊時給出一個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>  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM