6

我在我的 xml 文件中创建了一个复选框。我正在尝试在复选框的文本上设置一个 onClickListener,但是我没有找到真正的解决方案。换句话说,我希望能够单击复选框(使复选框可选择)以及单击文本以使用协议条款打开一个新活动。谢谢你。

主.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

5 回答 5

5

getText()不是一个按钮它是一个字符串,所以你不能把它转换成一个按钮。

您最好不要为复选框设置文本,而只在复选框旁边使用常规文本视图并将侦听器放在文本上。

那么您必须在单击文本时管理复选框。所以你会有 2 个点击监听器,一个用于复选框,一个用于 textview

于 2013-10-14T19:52:50.950 回答
4

鉴于以前的答案都没有真正给您想要的东西,因此您可能只需将 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 和 Gravity 以获得您想要的方式。

希望这可以帮助!祝你好运

于 2013-10-14T20:39:21.030 回答
1

CheckBox 旁边带有 TextView 的结果

似乎没有真正的解决方案。唯一的可能是将其放在复选框中。这样做的目的是避免 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 代码中为 TextView 设置一个 onClickListener 并为 CheckBox 本身设置一个单独的侦听器。

于 2013-10-14T20:14:42.437 回答
1

可能有点作弊,但是如何将文本视图(带有文本)放在复选框(没有文本)旁边,这样您就可以使用文本视图的 ontouch/onclick 事件来设置复选框并打开活动,然后按该复选框只会选中/取消选中它。

于 2013-10-14T20:00:05.727 回答
0

onclick 不是正确的侦听器,它:

onCheckedChanged

编辑:并将侦听器设置为:

setOnCheckedChangeListener
于 2013-10-14T19:53:31.063 回答