web-dev-qa-db-ja.com

android:CheckedTextViewをチェックできませんか?

最初は、テキストがチェックマークの左側に配置されるチェックマークが必要でした。このサイトで検索した後、最善の回避策はAndroid:CheckedTextView?であることがわかりました。しかし、ユーザーがチェックマークを手動で変更できないことがわかりました。設計によるものですか?

<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android" 
 Android:id="@+id/autoupdatecheckboxview" 
 Android:layout_width="fill_parent" 
 Android:layout_height="wrap_content" 
 Android:gravity="center_vertical" 
 Android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
 Android:paddingLeft="6dip" 
 Android:paddingRight="6dip" 
 Android:text="Pop up a message when new data available" 
 Android:typeface="sans" Android:textSize="16dip"/> 
46
Yang

おそらく、通常の CheckBoxButton、したがってTextViewから継承する)を使用するだけです。 CheckedTextViewはリストビューで動作するように設計されています。例CheckBoxレイアウトXMLは以下のとおりです。

<CheckBox
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:text="Pop up a message when new data available"
    Android:textSize="16dip" />
37
Roman Nurik

探しているものを実装することは可能であり、いくぶん簡単です。はい。CheckedTextViewは、主にCheckableの行に単一のListViewビューを持つために使用され、choiceModeを使用して子のチェック可能な状態を制御します。ただし、CheckBoxはそれ自体では右揃えのチェックボックスをサポートしていないようで、CheckedTextView isは右揃えのチェックボックスなので、そこにあるものを使用したいのは理にかなっています。

ListViewはリストアイテムのチェック状態を制御するため、CheckedTextView自体はクリックイベントに応答せず、デフォルトではクリック可能またはフォーカス可能ではありません。ただし、押された状態とフォーカスされた状態には応答します。つまり、フォーカスイベントとクリックイベントを受け取ることができ、チェックボックスが見える限り正しいように見えます。唯一欠けているのは、クリック時にチェック状態を切り替えないことです。したがって、.toggle()を呼び出すクイックOnClickListenerは、探している最終結果を提供します。

要約すると、クリック可能、フォーカス可能、およびonClickListenerの3つのものが必要です。

    CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01);
    chkBox.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            ((CheckedTextView) v).toggle();
        }
    });

およびレイアウトファイル:

<CheckedTextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:id="@+id/CheckedTextView01"
    Android:checked="true"
    Android:clickable="true"
    Android:focusable="true"
    Android:text="Label on Left Side of Checkbox."
    />
121
Joe

次の方法でCheckedTextViewを使用して切り替えることができます。

レイアウト内:

<CheckedTextView
        Android:id="@+id/cv_id"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Some text here" 
        Android:textSize="18sp"
        Android:gravity="center_vertical"
        Android:clickable="true"
        Android:checkMark="@drawable/btn_check_off"
        Android:focusable="true"
        Android:checked="false"
        Android:onClick="toggle"/>

あなたの活動:

public void toggle(View v)
{
    CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name);
        if (cView.isSelected())
        {
            cView.setSelected(false);
            cView.setCheckMarkDrawable (R.drawable.btn_check_off);
        }
        else
        {
            cView.setSelected(true);
            cView.setCheckMarkDrawable (R.drawable.btn_check_on);
        }
}

そして、ドローアブルを置くことを忘れないでください。 SDKから取得します...\Android-sdk-windows\platforms\Android-10\data\res\drawable-mdpi \

9

簡単な答えはisChecked()の代わりにisSelected()メソッドを使用することです。

_CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01);
chkBox.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v)
    {
        if(((CheckedTextView) v).isChecked()){
            ((CheckedTextView) v).setChecked(false);
        }else{
            ((CheckedTextView) v).setChecked(true);            
        }
    }
});
_

view.isChecked()メソッドを使用してステータスを取得します。

2
vikoo

これがSingleChoiceDialogでの私の使用です

1.select_dialog_singlechoice.xml

<?xml version="1.0" encoding="UTF-8"?>
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@Android:id/text1"
    style="@style/PopupSelectList"
    Android:checkMark="@drawable/radio"
    Android:ellipsize="Marquee"
    Android:gravity="center_vertical"
    Android:paddingLeft="12.0dip"
    Android:paddingRight="10.0dip" />

2.style.xml

<style name="PopupSelectList">
    <item name="Android:textSize">16.0sp</item>
    <item name="Android:textColor">@color/white</item>
    <item name="Android:background">@drawable/list_item_selector</item>
    <item name="Android:layout_width">fill_parent</item>
    <item name="Android:layout_height">wrap_content</item>
    <item name="Android:minHeight">@dimen/dialog_select_height</item>
</style>

3.ratio.xml

<?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/dot_selected" Android:state_checked="true" Android:state_window_focused="false"/>
    <item Android:drawable="@drawable/dot_normal" Android:state_checked="false" Android:state_window_focused="false"/>
    <item Android:drawable="@drawable/dot_normal" Android:state_checked="false"/>
    <item Android:drawable="@drawable/dot_selected" Android:state_checked="true"/>
</selector>

4.アダプタのgetViewで

CheckedTextView title = (CheckedTextView) convertView
                .findViewById(Android.R.id.text1);
        title.setText(mItems[position]);
        title.setSelected(mCheckedItem == position ? true : false);
                    title.setCheckMarkDrawable(position == mCheckedItem ?                   R.drawable.dot_selected
                : R.drawable.dot_normal);
1
Geek4IT

このレイアウトの外観と動作は、CheckedTextViewと同じです。

_<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/dropdownListPreferredItemHeight"
    Android:gravity="center_vertical" >

    <TextView
        Android:id="@Android:id/text1"
        style="?android:attr/spinnerDropDownItemStyle"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:ellipsize="Marquee"
        Android:singleLine="true" />

    <CheckBox
        Android:id="@Android:id/checkbox"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:clickable="false"
        Android:duplicateParentState="true"
        Android:focusable="false" />

</LinearLayout>
_

余分な作業は、ルートビューでOnClickListenerを設定し、CheckBoxcheckBox.toggle()を呼び出すことだけです。

1
Jason Robinson

ラベルとチェックボックスをさらにきめ細かく制御したい場合は、RelativeLayoutとAndroid:layout_alignParentRight属性を使用することもできます。

<RelativeLayout 
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content">
    <TextView
        Android:id="@+id/my_checkbox_label" 
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="my checkbox label" />
    <CheckBox
        Android:id="@+id/my_checkbox" 
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentRight="true" />
</RelativeLayout>

その後、ニーズに合わせてtextviewとチェックボックスのマージンなどを調整できます。

0
Kent McNeill