2013-03-12 20 views
0

我試圖在運行時爲我的應用製作一些按鈕。大多數情況下,它是有效的,所以我知道我很接近。Android實用按鈕背景繪製不正確

- 已解決 - 問題是,背景首先不會爲正常的UNPRESSED狀態繪製。但那是因爲我沒有看到可以選擇的「正常」狀態。那麼如何設置正常狀態?/- 已解決 -

其次,它在我點擊文本時確實繪製,但是它圍繞第三個按鈕繪製背景,無論點擊哪個按鈕。爲什麼它不會在任何按鈕被按下時繪製gdPressed drawable?

這裏是我的代碼:

GradientDrawable gdNormal = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] { 0, 0, 0 }); 
gdNormal.setGradientType(GradientDrawable.LINEAR_GRADIENT); 
gdNormal.setCornerRadii(new float[] { 8, 8, 8, 8, 8, 8, 8, 8 }); 
gdNormal.setStroke(1, contentColor); 

GradientDrawable gdPressed = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] { 0, 0, contentColor }); 
gdPressed.setGradientType(GradientDrawable.LINEAR_GRADIENT); 
gdPressed.setCornerRadii(new float[] { 8, 8, 8, 8, 8, 8, 8, 8 }); 
gdPressed.setStroke(1, contentColor); 

StateListDrawable sld = new StateListDrawable(); 
sld.addState(new int[] { android.R.attr.state_pressed }, gdPressed); 
sld.addState(new int[] { android.R.attr.state_focused }, gdPressed); 
// sld.addState(new int[] {android.R.attr.state_normal}, gdPressed); // 
// no such state 

btnAlarmSettings.setBackgroundDrawable(sld); 
btnSettings.setBackgroundDrawable(sld); 
btnSkipNextAlarm.setBackgroundDrawable(sld); 

btnAlarmSettings.setText("Alarm Settings"); 
btnAlarmSettings.setTextColor(contentColor); 
btnAlarmSettings.setTextSize(24); 
btnAlarmSettings.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     btnAlarmSettings_clicked(v); 
    } 
}); 

btnSettings.setText("Settings"); 
btnSettings.setTextColor(contentColor); 
btnSettings.setTextSize(24); 
btnSettings.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     btnSettings_clicked(v); 
    } 
}); 

btnSkipNextAlarm.setText("Skip Next Alarm"); 
btnSkipNextAlarm.setTextColor(contentColor); 
btnSkipNextAlarm.setTextSize(24); 
btnSkipNextAlarm.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // not implemented yet 
    } 
}); 

llButtonRow.addView(btnAlarmSettings); 
llButtonRow.addView(btnSettings); 
llButtonRow.addView(btnSkipNextAlarm); 

btnAlarmSettings.setBackgroundDrawable(sld); 
btnSettings.setBackgroundDrawable(sld); 
btnSkipNextAlarm.setBackgroundDrawable(sld); 

謝謝,@AwadKab。你解決了缺少的常規drawable。

我仍然有問題,當我按下前兩個按鈕時,突出顯示總是出現在「跳過下一個鬧鐘」按鈕周圍,而不是點擊按鈕。突出顯示的gdPressed狀態從不在前兩個按鈕周圍顯示。當我點擊前兩個按鈕時,他們關聯的onClickListener會觸發,下一個活動會啓動。只是突出顯示不顯示在按鈕周圍。

此外,當我從後續活動中返回(通過按下後退按鈕)並返回到此活動時,按鈕周圍的筆畫變得不完整。具體來說,前兩個按鈕的右側消失。第三個按鈕已完成。

回答

0

要繪製正常狀態試試這個:

sld.addState(new int[] { -android.R.attr.state_focused,-android.R.attr.state_pressed }, gdNormal); 

android.R.attr.state_focusedandroid.R.attr.state_pressed

希望這有助於你看到-