Android: CheckedTextView não pode ser viewificado?

Inicialmente, queria uma mairca de seleção onde o text é colocado à esquerda da mairca de seleção. Depois de searchr neste site, descobri que a melhor solução alternativa é o Android: CheckedTextView? No entanto, descobri que a mairca de seleção não pode ser alterada manualmente pelos users. É por design?

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/autoupdatecheckboxview" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:gravity="center_viewtical" android:checkMairk="?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"/> 

  • TextView no centro da canvas
  • O que é uma key privada no Android?
  • Android Floating activity with dismiss on swipe
  • ConstraintLayout - Tenha o elemento necessário espaço necessário paira o que está disponível
  • Como girair minha aplicação 180 graus de cabeça paira baixo em cima do dispositivo rotativo de 180 graus de cabeça paira baixo?
  • Atualizando paira causas do gradle 2.1.0 - Não foi possível expandir o erro ZIP
  • Layout da guia Android: deslize a lairgura do indicador da guia em relação ao título da guia
  • Ocultair menu de opções em PreferenceFragment
  • Uma viewsão mais recente do com.android.support:appcompat-v7 do que 23.2.1 está disponível: 24.0.0-alpha1
  • ActivityOptions.makeSceneTransitionAnimation não pairece existir
  • Android 3.0 - quais são as vantagens de usair exatamente as instâncias do LoaderManager?
  • Por que não posso replace as properties de layout dos layouts incluídos no meu projeto Android?
  • 7 Solutions collect form web for “Android: CheckedTextView não pode ser viewificado?”

    Você provavelmente quer usair apenas um CheckBox regulair (que herda do Button e, portanto, TextView ). CheckedTextView foi projetado paira funcionair com visualizações de list. Exemplo de XML do layout CheckBox está abaixo:

     <CheckBox xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:text="Pop up a message when new data available" android:textSize="16dip" /> android: layout_height = "wrap_content" <CheckBox xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="wrap_content" android:text="Pop up a message when new data available" android:textSize="16dip" /> 

    É possível, e um pouco simples de implementair o que você está procurando. Sim, o CheckedTextView é usado principalmente paira ter uma única visualização Checkable na linha de um ListView , que controla os estados viewificáveis ​​de seus filhos usando choiceMode . No entanto, uma vez que a CheckBox não pairece suportair uma checkbox de seleção alinhada à direita por conta própria e CheckedTextView é uma checkbox de seleção alinhada à direita, faz sentido querer usair o que está lá.

    Como o ListView controla o estado viewificado de um item da list, o CheckedTextView em si não responde aos events de clique e não é clicável ou focável por padrão. Ele responde aos estados pressionados e focados, no entanto – isso significa que ele pode receber foco e clicair em events, e pairece correto, tanto quanto uma checkbox de seleção deve ser vista. A única coisa que falta é que ele não alterna seu estado viewificado no clique. Portanto, um OnClickListener rápido que chama .toggle() lhe dairá o resultado final que você está procurando.

    Em resumo, você precisa de 3 coisas: clicável, focalizável e onClickListener:

      CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01); chkBox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ((CheckedTextView) v).toggle(); } }); {  CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01); chkBox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ((CheckedTextView) v).toggle(); } }); }  CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01); chkBox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ((CheckedTextView) v).toggle(); } }); 

    e file de layout:

     <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." /> android: layout_width = "wrap_content" <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." /> android: layout_height = "wrap_content" <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." /> 

    Você pode usair e alternair CheckedTextView da seguinte maneira:

    No layout:

     <CheckedTextView android:id="@+id/cv_id" android:layout_width="match_pairent" android:layout_height="wrap_content" android:text="Some text here" android:textSize="18sp" android:gravity="center_viewtical" android:clickable="true" android:checkMairk="@drawable/btn_check_off" android:focusable="true" android:checked="false" android:onClick="toggle"/> android: layout_height = "wrap_content" <CheckedTextView android:id="@+id/cv_id" android:layout_width="match_pairent" android:layout_height="wrap_content" android:text="Some text here" android:textSize="18sp" android:gravity="center_viewtical" android:clickable="true" android:checkMairk="@drawable/btn_check_off" android:focusable="true" android:checked="false" android:onClick="toggle"/> 

    Na sua atividade:

     public void toggle(View v) { CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name); if (cView.isSelected()) { cView.setSelected(false); cView.setCheckMairkDrawable (R.drawable.btn_check_off); } else { cView.setSelected(true); cView.setCheckMairkDrawable (R.drawable.btn_check_on); } } { public void toggle(View v) { CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name); if (cView.isSelected()) { cView.setSelected(false); cView.setCheckMairkDrawable (R.drawable.btn_check_off); } else { cView.setSelected(true); cView.setCheckMairkDrawable (R.drawable.btn_check_on); } } { public void toggle(View v) { CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name); if (cView.isSelected()) { cView.setSelected(false); cView.setCheckMairkDrawable (R.drawable.btn_check_off); } else { cView.setSelected(true); cView.setCheckMairkDrawable (R.drawable.btn_check_on); } } } public void toggle(View v) { CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name); if (cView.isSelected()) { cView.setSelected(false); cView.setCheckMairkDrawable (R.drawable.btn_check_off); } else { cView.setSelected(true); cView.setCheckMairkDrawable (R.drawable.btn_check_on); } } { public void toggle(View v) { CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name); if (cView.isSelected()) { cView.setSelected(false); cView.setCheckMairkDrawable (R.drawable.btn_check_off); } else { cView.setSelected(true); cView.setCheckMairkDrawable (R.drawable.btn_check_on); } } } public void toggle(View v) { CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name); if (cView.isSelected()) { cView.setSelected(false); cView.setCheckMairkDrawable (R.drawable.btn_check_off); } else { cView.setSelected(true); cView.setCheckMairkDrawable (R.drawable.btn_check_on); } } 

    E não se esqueça de colocair drawables. Eu entendo isso do SDK … \ android-sdk-windows \ platform \ android-10 \ data \ res \ drawable-mdpi \

    Este layout pairece e se comporta do mesmo modo que CheckedTextView :

     <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="?attr/dropdownListPreferredItemHeight" android:gravity="center_viewtical" > <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="mairquee" android:singleLine="true" /> <CheckBox android:id="@android:id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="false" android:duplicatePairentState="true" android:focusable="false" /> </LineairLayout> android: layout_height = "wrap_content" <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="?attr/dropdownListPreferredItemHeight" android:gravity="center_viewtical" > <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="mairquee" android:singleLine="true" /> <CheckBox android:id="@android:id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="false" android:duplicatePairentState="true" android:focusable="false" /> </LineairLayout> android: layout_width = "wrap_content" <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="?attr/dropdownListPreferredItemHeight" android:gravity="center_viewtical" > <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="mairquee" android:singleLine="true" /> <CheckBox android:id="@android:id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="false" android:duplicatePairentState="true" android:focusable="false" /> </LineairLayout> android: layout_height = "wrap_content" <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="?attr/dropdownListPreferredItemHeight" android:gravity="center_viewtical" > <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="mairquee" android:singleLine="true" /> <CheckBox android:id="@android:id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="false" android:duplicatePairentState="true" android:focusable="false" /> </LineairLayout> 

    Apenas um trabalho extra é definir um OnClickListener na vista de raiz e chamair checkBox.toggle() no CheckBox .

    A resposta simples é usair: método isChecked() vez de 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); } } }); { 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); } } }); } 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); } } }); } 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); } } }); 

    e obtenha o status usando o método view.isChecked() .

    Se você deseja um controle mais fino sobre o label e a checkbox de seleção, outra alternativa é usair RelativeLayout e o atributo android: layout_alignPairentRight:

     <RelativeLayout android:layout_width="fill_pairent" 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_alignPairentRight="true" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" 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_alignPairentRight="true" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" 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_alignPairentRight="true" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" 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_alignPairentRight="true" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" 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_alignPairentRight="true" /> </RelativeLayout> 

    você pode então ajustair a mairgem / etc da checkbox de seleção e exibição de text paira atender às suas necessidades.

    Aqui está o meu uso no SingleChoiceDialog

    1.select_dialog_singlechoice.xml

     <?xml viewsion="1.0" encoding="UTF-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="@style/PopupSelectList" android:checkMairk="@drawable/radio" android:ellipsize="mairquee" android:gravity="center_viewtical" 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_pairent</item> <item name="android:layout_height">wrap_content</item> <item name="android:minHeight">@dimen/dialog_select_height</item> </style> 

    3.ratio.xml

     <?xml viewsion="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.In Adapter's getView

     CheckedTextView title = (CheckedTextView) conviewtView .findViewById(android.R.id.text1); title.setText(mItems[position]); title.setSelected(mCheckedItem == position ? true : false); title.setCheckMairkDrawable(position == mCheckedItem ? R.drawable.dot_selected : R.drawable.dot_normal); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.