51

最初は、テキストがチェックマークの左側に配置されるチェックマークが必要でした。このサイトを検索した後、最善の回避策は 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"/> 
4

7 に答える 7

130

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

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

要約すると、クリッカブル、フォーカス可能、および 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."
    />
于 2010-05-10T21:44:42.633 に答える
38

おそらく、通常のCheckBox(から継承しButton、したがって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" />
于 2010-04-15T05:41:45.157 に答える
9

次の方法で 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);
        }
}

また、drawable を配置することを忘れないでください。SDK から取得します ...\android-sdk-windows\platforms\android-10\data\res\drawable-mdpi\

于 2012-02-01T09:37:46.423 に答える
3

簡単な答えは、独自の onClickListener を追加し、 の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()メソッドを使用してステータスを取得します。

于 2015-05-08T09:16:30.083 に答える
2

このレイアウトは、 と同じように見え、動作します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、ルート ビューに を設定し、 を呼び出すcheckBox.toggle()ことだけCheckBoxです。

于 2013-07-03T20:16:33.077 に答える
0

ラベルとチェックボックスをより細かく制御したい場合は、別の方法として 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>

次に、テキストビューとチェックボックスのマージンなどをニーズに合わせて調整できます。

于 2011-09-26T13:56:02.027 に答える