Android: لا يمكن التحقق من CheckedTextView؟
-
26-09-2019 - |
سؤال
في البداية كنت أرغب في وضع علامة فحص حيث يتم وضع النص على يسار علامة الاختيار. بعد البحث على هذا الموقع ، اكتشفت أن أفضل حلول هو 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
. ومع ذلك ، نظرًا لأن مربع الاختيار لا يبدو أنه يدعم خانة اختيار محاذاة من تلقاء نفسها ، و checkedTextView هو خانة اختيار محاذاة ، من المنطقي أن ترغب في استخدام ما هو موجود.
نظرًا لأن ListView يتحكم في الحالة التي تم فحصها لعنصر القائمة ، فإن CheckedTextView نفسه لا يستجيب للنقر فوق الأحداث ، ولا يمكن النقر عليه أو القابل للتركيز افتراضيًا. ومع ذلك ، فإنه يستجيب للحالات المضغوطة والمركزة - هذا يعني أنه يمكن أن يتلقى التركيز والنقر فوق الأحداث ، ويبدو صحيحًا بقدر ما يجب أن يبدو مربع الاختيار. الشيء الوحيد المفقود هو أنه لا يقوم بتبديل حالتها التي تم فحصها عند النقر. لذلك ، فإن onclickListener سريع يتصل .toggle()
سوف تعطيك النتيجة النهائية التي تبحث عنها.
باختصار ، تحتاج إلى 3 أشياء: قابلة للنقر ، قابلة للتركيز ، و onClickListener:
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()
طريقة.
يبدو هذا التصميم ويتصرف بنفس الطريقة 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
.
هذا هو استخدامي في 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);
إذا كنت تريد المزيد من التحكم في الحبيبات على الملصق وعلامة الاختيار ، فهو بديل آخر هو استخدام Relativelayout و Android: Syte_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 ومربع الاختيار لتناسب احتياجاتك.