最初は、テキストがチェックマークの左側に配置されるチェックマークが必要でした。このサイトで検索した後、最善の回避策は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"/>
おそらく、通常の 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" />
探しているものを実装することは可能であり、いくぶん簡単です。はい。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."
/>
次の方法で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 \
簡単な答えは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()
メソッドを使用してステータスを取得します。
これが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);
このレイアウトの外観と動作は、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
でcheckBox.toggle()
を呼び出すことだけです。
ラベルとチェックボックスをさらにきめ細かく制御したい場合は、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とチェックボックスのマージンなどを調整できます。