2011-11-23 61 views
14

我想在應用中放置一顆星形按鈕,就像評分明星一樣。我已經嘗試使用一個星級評分欄,但不幸的是它不能用作按鈕。Android中的星形按鈕

我喜歡它作爲一個按鈕,甚至更好,如果所選狀態的背景是黃色的......任何建議?謝謝。

回答

27

當然,使用佈局資源這樣的:

<ImageButton android:id="@+id/favorite" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:src="@drawable/star" 
     android:background="#00ffffff" 
     android:onClick="onToggleStar"/> 

您可以在res/drawable/star.xml像這樣被保存爲XML文件中定義的狀態列表繪製配對的:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/button_pressed" /> <!-- pressed --> 
    <item android:state_focused="true" 
      android:drawable="@drawable/button_focused" /> <!-- focused --> 
    <item android:state_hovered="true" 
      android:drawable="@drawable/button_focused" /> <!-- hovered --> 
    <item android:drawable="@drawable/button_normal" /> <!-- default --> 
</selector> 

這裏是Android自帶的圖像:

  • Off關閉
  • On
  • Disabled殘疾人
  • On Pressed所按
  • Off Pressed關按下
+1

如何獲得更好的分辨率的圖像? – user1012480

+5

我直接從 \ platforms \ android-14 \ data \ res \ drawable-hdpi文件夾中找到了我的。這些文件以名稱「btn_star」開頭 – jkschneider

+0

我得到,無法解析drawable button_focused ..我該如何解決這個問題?非常感謝! –

1

恐怕沒有這種內置的Android控制。您將需要使用Button(或ImageButton),並將背景(或圖像資源)設置爲a drawable with states

0

可能是你需要使用selector這是一個Button(或ImageButton)的狀態很有幫助。請參考this

13

您可以使用內置的btn_star狀態列表drawable。

<ImageButton 
    android:id="@+id/favorite_button" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:src="@android:drawable/btn_star" //This one! 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:background="#00ffffff" /> //Needed to remove the button background 
+0

請參閱http://developer.android.com/reference/android/R.drawable.html獲取可繪製的規範列表。 –

+2

如何使它變黃? – 2016-01-25 07:51:24

3

我想我最喜歡的按鈕,像一個複選框,所以這個工作很適合我,而無需添加任何圖像切換邏輯在我onClickListener。在我的Java代碼中,我可以使用myFavoriteToggleButton.isChecked()來確定採取的操作。

<CheckBox 
    android:button="@android:drawable/btn_star" 
    android:padding="@dimen/activity_horizontal_margin" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/favorite" 

    android:background="@android:color/transparent" 
    android:layout_gravity="center"/> 
1

只需添加下面的代碼在你的活動:

final ImageButton ButtonStar = (ImageButton) findViewById(R.id.star); 
    ButtonStar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (isEnable){ 
       ButtonStar.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),android.R.drawable.btn_star_big_off)); 
      }else{ 
       ButtonStar.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),android.R.drawable.btn_star_big_on)); 
      } 
      isEnable = !isEnable; 
     } 
    }); 

需要注意的是:定義布爾isEnable = FALSE全球。 這是我的ImageButton XML代碼:

<ImageButton 
       android:id="@+id/star" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@null" 
       android:src="@android:drawable/btn_star" /> 
1

你可以嘗試將它插入一個文本視圖。這是我發現的最簡單的方法。

在佈局XML我添加它作爲一個文本視圖

<TextView 
    android:id="@+id/tv_star_fav" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#00ffffff" 
    android:onClick="onToggleStar" 
    android:text="★" 
    android:textSize="40sp" /> 

然後,在代碼寫到類似下面的功能。

boolean isfavourite; 


public void onToggleStar(View view){ 
    TextView favouriteStar = (TextView) view; 
    if(!isfavourite){ 
     // if the star is not already selected and you select it 
     isfavourite = true; 
     favouriteStar.setTextColor(Color.parseColor("#FFD600")); 
    }else{ 
     // if the star is already selected and you unselect it 
     isfavourite = false; 
     favouriteStar.setTextColor(Color.parseColor("#9E9E9E")); 
    } 

}