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
.
Вот мое использование в SinglechoiceiCialog
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 Adapter
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: Layout_alignParentright Attribute:
<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>
Затем вы можете настроить маржу / и т. Д. Текстовой просмотр и флажок, чтобы удовлетворить ваши потребности.