2010-04-21 148 views
20

我想要將按鈕內的文本更改爲突出顯示或按下按鈕時變爲粗體。我目前使用一個XML文件來定義按鈕,並使用XML來改變它按下時的樣子,但我想這樣做,而不使用圖像。Android如何在按下或聚焦時使按鈕文本加粗

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" 
      android:state_pressed="false" 
      android:drawable="@drawable/reset_hover" /> 
    <item android:state_focused="true" 
      android:state_pressed="true" 
      android:drawable="@drawable/reset_hover" /> 
    <item android:state_focused="false" 
      android:state_pressed="true" 
     android:drawable="@drawable/reset_hover" /> 
    <item android:drawable="@drawable/reset" /> 
</selector> 

我試過使用類似下面的東西,但它似乎並沒有被調用。

final Button btn_reset = (Button) findViewById(R.id.btn_reset); 
    btn_reset.setOnClickListener(this); 
    btn_reset.setOn(new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus){btn_reset.setTypeface(null, Typeface.BOLD);} 
     else{btn_reset.setTypeface(null, Typeface.NORMAL);} 
    } 
    }); 
+0

你肯定是沒有得到叫什麼名字?也許可以在onfocuschange方法中添加一個logcat調用。 我猜測它可能被調用很多次(取消粗體) – DEzra 2010-05-09 16:31:18

回答

8

你可以創建自己的style.xml在您定義的文本樣式。在你的選擇器中,你可以參考風格。 style.xml

<style name="myStyle"> 
    <item name="android:textSize">9px</item> 
    <item name="android:gravity">center_horizontal</item> 
    <item name="android:textColor">#fff</item> 
    <item name="android:textStyle">bold</item> 
</style> 

而在你選擇

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_focused="true" 
     android:state_pressed="false" 
     style="@style/myStyle" /> </selector> 
+3

是否有任何技巧可以讓選擇器使用樣式?我無法在我的代碼中完成這項工作。 – 2010-06-07 23:14:42

+0

這個理論聽起來不錯,但是當試圖使用像這樣的東西(至少基於我有限的測試)時,現實是aapt扼流圈。我希望能夠完成與此相似的事情,而且這似乎並不那麼簡單。 – Joe 2011-06-03 21:26:28

+0

而你如何參考佈局中的選擇器?你把你的選擇器文件放在哪裏? – ejel 2012-11-10 01:57:41

35

你可以嘗試把大膽的代碼按鈕的點擊事件中:

final Button button = (Button) findViewById(R.id.button_id); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Set bold on click 
       button.setTypeface(null, Typeface.BOLD); 
      } 
     }); 
+0

Eclipse沒有爲我自動找到Typeface類。我不得不輸入'import android.graphics.Typeface;' – 2014-01-09 14:21:34

+2

@mickey感謝導入行,確定它會幫助未來的讀者。 – DEzra 2014-01-10 22:38:06

+1

沒辦法通過XML來做到這一點? – pblead26 2014-07-08 19:23:01

1

樣式不中選擇允許。 Reference


而且使文本加粗,使用此代碼:

btn_reset.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch (event.getAction()) { 
      // When the user clicks the Button 
      case MotionEvent.ACTION_DOWN: 
       btn_reset.setTypeface(Typeface.DEFAULT_BOLD); 
       break; 

      // When the user releases the Button 
      case MotionEvent.ACTION_UP: 
       btn_reset.setTypeface(Typeface.DEFAULT); 
       break; 
     } 
     return false; 
    } 
}); 
相關問題