Вопрос

Первоначально я хотел галочку, где текст помещен слева от галочки. После поиска на этом сайте я узнал лучший обходной путь - это 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>

Затем вы можете настроить маржу / и т. Д. Текстовой просмотр и флажок, чтобы удовлетворить ваши потребности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top