2015-10-19 81 views
2

我在android編程方面是全新的,爲了能夠爲舊的(android 2.3.3)設備生成應用程序,我在佈局上進行了一些修改。我在Android工作室的GUI編輯器中混淆了很多東西,使得(在我看來)一個非常漂亮的GUI。然後我才注意到我在API 23中工作。這導致我的舊設備(API 10)完全搞砸了GUI,然後我開始改變一切,以至於看起來對於我想開發的設備對於。適用於較舊設備的Android佈局

我與垂直方向的LinearLayout工作,把一些TextView S和在那裏Chronometer和大結局(我的問題的原因)一個ToggleButton,改變顏色,因爲它被點擊。我該切換按鈕代碼如下:

<ToggleButton android:id="@+id/toggleButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:layout_margin="10dip" 
    android:enabled="true" 

    android:background="@drawable/toggle_button" 
    android:button="@android:drawable/ic_btn_speak_now" 
    android:buttonTint="#FFFFFF" 


    android:textAllCaps="false" 
    android:textOn="@string/toggle_on" 
    android:textOff="@string/toggle_off" 
    android:textColor="#FFFFFF" 
    android:gravity="center" /> 

在此代碼片段ic_btn_speak_now一些揚聲器圖標我在系統可繪製中。 toggle_button,另一方面是我寫的,看起來如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

     <solid android:color="@drawable/toggle_color" /> 
     <corners android:radius="5dip" /> 
</shape> 

其中toggle_color它轉的樣子:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="#669900" 
     android:state_checked="true" /> 
    <item android:color="#cc0000" 
     android:state_checked="false" /> 
</selector> 

這導致了這個非常漂亮的按鈕,這完全適用於API 23 ,但不能爲API 10

What I want to achieve (1) What I want to achieve (2)

工作210

我一直在環顧四周,處處都有其他的解決方案和其他原因,爲什麼某些事情不起作用。我嘗試了很多東西,但沒有任何結果。我甚至省略了我的按鈕的漂亮形狀,希望能夠實現顏色變化,但我也沒有設法做到這一點。

我的問題因此可以提如下:

  1. 是什麼讓我的代碼不會對API 10工作?
  2. 我怎樣才能讓我心愛的按鈕適用於API 10?

每一位的幫助表示讚賞。

+1

如果您使用的是較低版本(尤其是api級別14以下),則應使用支持庫及其UI組件(例如,在api 10和23上獲得類似的結果。 – Rich

+0

@Rithe然後我應該查找哪些庫在這種情況下?一個支持選擇器的庫?一個支持按鈕在一個切換按鈕中着色的庫?我該如何使用這樣一個庫?我有這種感覺,我已經無意中使用了這樣的庫,但我應該怎麼知道如何使用庫等?謝謝在任何情況下的暗示 –

+0

如果你想在所有版本中有相同的設計我推薦支持庫v7(AppCompat),它允許你使用材料設計到版本2.1。有關更多信息,請參閱本網站:https://developer.android.com/tools/support-library/features.html#v7 – Rich

回答

0

我不知道爲什麼我的代碼無法正常工作,但我設法通過以編程方式更改形狀來輕鬆解決此問題。所以我在res/drawable文件夾中了2種形狀(每種顏色一個),如下所示:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

     <solid android:color="#cc0000" /> 
     <corners android:radius="5dip" /> 
</shape> 

這將被red_toggle.xml和我做了另一種顏色,使green_toggle.xml相同。我ToggleButton被修改調用onToggle()方法單擊時,並最終看起來像:

<ToggleButton android:id="@+id/toggleButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:layout_margin="10dip" 
    android:onClick="onToggle" 

    android:padding="15dp" 
    android:background="@drawable/toggle_button" 
    android:button="@android:drawable/ic_btn_speak_now" 
    android:buttonTint="#FFFFFF" 

    android:textAllCaps="false" 
    android:textOn="@string/toggle_on" 
    android:textOff="@string/toggle_off" 
    android:textColor="#FFFFFF" 
    android:gravity="center" /> 

在我Activity,我再有這樣的方法onToggle()其執行以下操作:

public void onToggle(View view) { 
    //only togglebutton should be calling this method 
    if(((ToggleButton) view).isChecked()) { 
     toggle.setBackgroundResource(R.drawable.red_toggle); 
    } else { 
     toggle.setBackgroundResource(R.drawable.green_toggle); 
    } 
} 

而且實際上所有我需要...