2013-01-17 88 views
4

你如何以編程方式添加/刪除樣式到android按鈕?是否可以在運行時應用樣式?Android按鈕造型編程

我有一個看起來像這些

 
    ---------- ---------- 
    | Button A | | Button B | 
    ---------- ----------

什麼我想要做的就是點擊一個按鈕時,兩個按鈕(可以說按鈕B),它運行一些代碼,然後更改按鈕B的風格,其他的東西(即突出顯示的邊框),將如下所示:

 
    ---------- ========== 
    | Button A | || Button B || 
    ---------- ==========

我知道如何在XML中完成樣式(即創建樣式),我只想知道如何在運行時應用樣式/使用java代碼。

+1

你的意思是「編程式」嗎? –

+0

您可以通過xml設置的任何內容都可以在運行時用Java代碼設置。通常有一個setXXX函數,其中XXX是你想改變的東西。查看Button類和它的祖先以找到它。 –

+0

XML文件中的所有佈局屬性在Java中都有相應的getter和setter函數。您應該查看Android SDK文檔以找到您想要的確切文檔。如果您需要幫助查找這些內容,請發佈您想要更改按鈕的XML樣式的片段。 –

回答

11

讓我們爲你做一些代碼案例... :) 爲了將動態應用到你的視圖(在這種情況下按鈕)動態是你必須做以下你的佈局文件夾(res/layout)。

我把它命名爲,buttonstyle.xml

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

    <item android:state_pressed="true"> 
     <shape> 
      <solid android:color="#449def"/> 
      <stroke android:width="1dp" android:color="#2f6699"/> 
      <corners android:radius="3dp"/> 
      <padding android:left="10dp" android:top="10dp" android:right="10dp" 
        android:bottom="10dp"/> 
     </shape> 
    </item> 

    <item> 
     <shape> 
      <gradient android:startColor="#449def" android:endColor="#2f6699" android:angle="270"/> 
      <stroke android:width="1dp" android:color="#2f6699"/> 
      <corners android:radius="4dp"/> 
      <padding android:left="10dp" android:top="10dp" android:right="10dp" 
        android:bottom="10dp"/> 
     </shape> 
    </item> 

</selector> 

現在應用樣式的按鈕,下面的代碼添加到的onCreate()的活動的方法..

Button transferBtn = new Button(this); 
transferBtn.setText("Test Example"); 
transferBtn.setId(R.string.transferBtn); 
transferBtn.setBackgroundResource(R.layout.buttonstyle); 
+0

我發現有必要將** buttonstyle.xml **文件放在** res/drawable **目錄中。 (注意我必須先創建目錄) – Sydwell

3

您不能在運行時應用xml定義的樣式(來自代碼)。如果您想在點擊按下按鈕時更改背景和字體樣式,您應該創建selector,其中定義了用於普通按鈕或點擊狀態的背景。

如果選擇器不是你想要的,你應該通過Button類的setXXX方法手動將每個按鈕屬性設置爲期望值。

P.S.您可以將舊按鈕替換爲另一個不同樣式的xml充填的新按鈕。但這不是我想的好方法...

+0

是appologize是的我找到了一個選擇器XML並修改了代碼,我用setBackgroundResource(...)來更新它。謝謝! – ibaguio

0

由於我在另一個線程中回答,你可以按照某些人的建議設置背景,或者如果使用支持庫,可以以編程方式設置樣式(因爲我建議here)。