2013-10-14 61 views
4

我在我的xml文件中創建了一個複選框。我試圖在checkBox的文本上設置onClickListener,但是我找不到真正的解決方案。換句話說,我希望能夠點擊複選框(使複選框可選),並點擊文本以協議期限開啓新的活動。謝謝。在複選框文本上設置onClickListener

main.xml中

<CheckBox 
    android:id="@+id/checkBox1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="I agree to the Terms of Agreement." 
    android:textColor="#CC000000" 
    android:checked="true"/> 

這是下面的代碼我嘗試,但它只會導致崩潰。

CheckBox checkBox1 = (CheckBox) findViewById(R.id.checkBox1); 
Button termsOfAgreement = (Button) checkBox2.getText(); 

.... 

termsOfAgreement.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      //Launch activity 
     }   
    }); 

回答

4

getText()不是一個按鈕,它是一個字符串,所以你不能把它轉換爲一個按鈕。

你最好不要設置複選框的文本,只使用常規textview旁邊的複選框,並將一個監聽器放在文本上。

然後您必須在單擊文本時管理複選框。所以你有2個點擊監聽器,一個用於複選框和一個TextView的

+0

是的,我已經考慮到了,並打算作爲我最後的解決方案。如果可能的話,最好從checkBox中執行它。想知道是否有任何可能的方法。 – ChallengeAccepted

+0

不,不存在 – tyczj

+0

謝謝。我繼續做,並做你的建議。可能不是答案,但它是最好的選擇。 – ChallengeAccepted

0

的onclick是不正確的監聽器,它的:

onCheckedChanged 

編輯: 並設置監聽其:

setOnCheckedChangeListener 
+0

我完全知道。我想要兩個功能。一個是複選框本身,另一個能夠在點擊文本時打開活動。 – ChallengeAccepted

+0

我不認爲這可能..也許你應該通過擴展android.widget.CompoundButton創建你自己的複選框 – Tom

+0

謝謝你的幫助。我解決了它。看到我發佈的答案。 – ChallengeAccepted

1

可能是一個騙子,但如何將複選框(沒有文本)旁邊的文本視圖(與您的文本),這樣你可以使用文本視圖的ontouch/onclick事件來設置複選框並打開該活動,並按複選框將只有通道eck /取消選中它。

+0

謝謝。我繼續做你和tyczj的建議。這些並沒有真正回答這個問題,但它最終完成了這項工作。 – ChallengeAccepted

1

Result with TextView beside the CheckBox

看起來沒有真正解決這一點。唯一的可能性是把它放在複選框旁邊。這樣做的目的是爲了避免textView和checkBox之間的任何錯位對齊,但這是最好的解決方案。這是代碼。

<CheckBox 
    android:id="@+id/checkBox" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/checkBox" 
    android:layout_margin="5dp" 
    android:textColor="#CC000000" 
    android:checked="true"/> 

    <TextView 
    android:id="@+id/termsOfAgreement" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="I agree to the Terms of Agreement." 
    android:textColor="#CC000000" 
    android:layout_toRightOf="@id/checkBox" 
    android:layout_alignTop="@id/checkBox" 
    android:textSize="16sp"/> 

然後在Java代碼設置爲onClickListener TextView的和爲CheckBox本身一個單獨的監聽器。

+1

只需將文本對齊複選框底部 – tyczj

+0

不錯的建議,但這使得它看起來更糟糕。它使它在底部,超過了盒子。我想alignTop現在應該做。 – ChallengeAccepted

+1

添加填充到底部,您可以很容易地使它看起來像定位和填充複選框。 'android:paddingBottom =「5dp」' – tyczj

3

由於沒有以前的答案真的給你你想要的東西,所以你可能只需將你的CheckBox和TextView包裝在一個更大的視圖組(如LinearLayout)中。

你在XML實現將如下所示:

<LinearLayout 
    android:id="@+id/check_box_and_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clickable="true" 
    android:orientation="horizontal"> 

    <CheckBox 
     android:id="@+id/checkBox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:textColor="#CC000000" 
     android:checked="true"/> 

    <TextView 
     android:id="@+id/termsOfAgreement" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="I agree to the Terms of Agreement." 
     android:textColor="#CC000000" 
     android:textSize="16sp"/> 

</LinearLayout> 

有了這個,你現在可以只設置OnClickListener到的LinearLayout而不是有一個爲你的CheckBox和你的TextView兩者。請注意,我在LinearLayout下將clickable設置爲true。這是一件值得注意的事情,因爲默認情況下,LinearLayout上的clickable屬性爲false。在Java代碼中

實施情況如下:

LinearLayout myCheckbox = (LinearLayout)findViewById(R.id.check_box_and_text); 
myCheckbox.setOnClickListener(yourListener); 

作爲一個快速的最後一點,如果您發現校準是靠不住與CheckBox和TextView的,直視使用XML屬性layout_gravity和重力讓他們像你想要的那樣。

希望這會有所幫助!祝你好運

+0

偉大的使用layout_gravity和重力!我似乎忘記了這個屬性。謝謝! – ChallengeAccepted