2011-04-25 23 views
6

Estoy mostrando la lista de aguijones en formato de vista de lista, utilicé la vista de lista predeterminada y coloqué un botón de opción usando simple_list_item_single_choice. Pero esto muestra el botón de Radio en el lado derecho, quiero mostrar el botón de radio en el lado izquierdo. es que es posible mostrar el botón de opción en el lado izquierdo usando la vista de lista predeterminadaBotón de radio en la vista de lista

Respuesta

6

simple_list_item_single_choice.xml uso CheckedTextView clase

Aquí está el simple_list_item_single_choice.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
    /> 

lo necesario para crear un XML personalizado a sus necesidades, y utilizar un CheckBox para lograr su objetivo Aquí está su custom.xml

<CheckBox 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:button="?android:attr/listChoiceIndicatorSingle" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
    /> 

Simplemente use custom.xml en lugar de simple_list_item_single_choice.xml en su código.

Espero que te ayude.

+1

Gracias Tanmay, está funcionando, coloqué el botón de radio en el costado izquierdo, pero el problema al que me enfrenté es el botón de radio y el texto en la vista de lista ambos se fusionaron. Quiero separar tanto el botón de radio como las cuerdas en la vista de lista Es posible hacer esto..?? – RAAAAM

+0

Opps ... !! Esto sucede debido a 'android: paddingLeft =" 6dip "' ..Sólo quítalo y por favor, avísame el resultado. –

+0

Sí, hombre, eres genial. Acepto tu respuesta, está funcionando bien. Pero ahora, la lista de vista de oyente clic no funcionará ... ¿por qué sucedió esto? – RAAAAM

0

No es posible, de forma predeterminada, el botón de opción está a la derecha. Si lo desea a la izquierda, debe obtener las fuentes para el diseño simple_list_item_single_choice.xml del SDK y realizar los cambios apropiados, luego use este diseño personalizado en lugar del predeterminado.

0

simple_list_item_single_choice use la clase CheckedTextView.

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2008 The Android Open Source Project 

    Licensed under the Apache License, Version 2.0 (the "License"); 
    you may not use this file except in compliance with the License. 
    You may obtain a copy of the License at 

      http://www.apache.org/licenses/LICENSE-2.0 

    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
--> 

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
/> 

CheckedTextView class es el paquete android.widget.

Esta fuente de clase a continuación.

/*

* Copyright (C) 2007 The Android Open Source Project 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

package android.widget; 

import com.android.internal.R; 

import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.view.Gravity; 
import android.view.ViewDebug; 
import android.view.accessibility.AccessibilityEvent; 


/** 
* An extension to TextView that supports the {@link android.widget.Checkable} interface. 
* This is useful when used in a {@link android.widget.ListView ListView} where the it's 
* {@link android.widget.ListView#setChoiceMode(int) setChoiceMode} has been set to 
* something other than {@link android.widget.ListView#CHOICE_MODE_NONE CHOICE_MODE_NONE}. 
* 
*/ 
public class CheckedTextView extends TextView implements Checkable { 
    private boolean mChecked; 
    private int mCheckMarkResource; 
    private Drawable mCheckMarkDrawable; 
    private int mBasePaddingRight; 
    private int mCheckMarkWidth; 

    private static final int[] CHECKED_STATE_SET = { 
     R.attr.state_checked 
    }; 

    public CheckedTextView(Context context) { 
     this(context, null); 
    } 

    public CheckedTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public CheckedTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

     TypedArray a = context.obtainStyledAttributes(attrs, 
       R.styleable.CheckedTextView, defStyle, 0); 

     Drawable d = a.getDrawable(R.styleable.CheckedTextView_checkMark); 
     if (d != null) { 
      setCheckMarkDrawable(d); 
     } 

     boolean checked = a.getBoolean(R.styleable.CheckedTextView_checked, false); 
     setChecked(checked); 

     a.recycle(); 
    } 

    public void toggle() { 
     setChecked(!mChecked); 
    } 

    @ViewDebug.ExportedProperty 
    public boolean isChecked() { 
     return mChecked; 
    } 

    /** 
    * <p>Changes the checked state of this text view.</p> 
    * 
    * @param checked true to check the text, false to uncheck it 
    */ 
    public void setChecked(boolean checked) { 
     if (mChecked != checked) { 
      mChecked = checked; 
      refreshDrawableState(); 
     } 
    } 


    /** 
    * Set the checkmark to a given Drawable, identified by its resourece id. This will be drawn 
    * when {@link #isChecked()} is true. 
    * 
    * @param resid The Drawable to use for the checkmark. 
    */ 
    public void setCheckMarkDrawable(int resid) { 
     if (resid != 0 && resid == mCheckMarkResource) { 
      return; 
     } 

     mCheckMarkResource = resid; 

     Drawable d = null; 
     if (mCheckMarkResource != 0) { 
      d = getResources().getDrawable(mCheckMarkResource); 
     } 
     setCheckMarkDrawable(d); 
    } 

    /** 
    * Set the checkmark to a given Drawable. This will be drawn when {@link #isChecked()} is true. 
    * 
    * @param d The Drawable to use for the checkmark. 
    */ 
    public void setCheckMarkDrawable(Drawable d) { 
     if (mCheckMarkDrawable != null) { 
      mCheckMarkDrawable.setCallback(null); 
      unscheduleDrawable(mCheckMarkDrawable); 
     } 
     if (d != null) { 
      d.setCallback(this); 
      d.setVisible(getVisibility() == VISIBLE, false); 
      d.setState(CHECKED_STATE_SET); 
      setMinHeight(d.getIntrinsicHeight()); 

      mCheckMarkWidth = d.getIntrinsicWidth(); 
      mPaddingRight = mCheckMarkWidth + mBasePaddingRight; 
      d.setState(getDrawableState()); 
     } else { 
      mPaddingRight = mBasePaddingRight; 
     } 
     mCheckMarkDrawable = d; 
     requestLayout(); 
    } 

    @Override 
    public void setPadding(int left, int top, int right, int bottom) { 
     super.setPadding(left, top, right, bottom); 
     mBasePaddingRight = mPaddingRight; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     final Drawable checkMarkDrawable = mCheckMarkDrawable; 
     if (checkMarkDrawable != null) { 
      final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK; 
      final int height = checkMarkDrawable.getIntrinsicHeight(); 

      int y = 0; 

      switch (verticalGravity) { 
       case Gravity.BOTTOM: 
        y = getHeight() - height; 
        break; 
       case Gravity.CENTER_VERTICAL: 
        y = (getHeight() - height)/2; 
        break; 
      } 

      int right = getWidth(); 
      checkMarkDrawable.setBounds(
        right - mCheckMarkWidth - mBasePaddingRight, 
        y, 
        right - mBasePaddingRight, 
        y + height); 
      checkMarkDrawable.draw(canvas); 
     } 
    } 

    @Override 
    protected int[] onCreateDrawableState(int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (isChecked()) { 
      mergeDrawableStates(drawableState, CHECKED_STATE_SET); 
     } 
     return drawableState; 
    } 

    @Override 
    protected void drawableStateChanged() { 
     super.drawableStateChanged(); 

     if (mCheckMarkDrawable != null) { 
      int[] myDrawableState = getDrawableState(); 

      // Set the state of the Drawable 
      mCheckMarkDrawable.setState(myDrawableState); 

      invalidate(); 
     } 
    } 

    @Override 
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 
     boolean populated = super.dispatchPopulateAccessibilityEvent(event); 
     if (!populated) { 
      event.setChecked(mChecked); 
     } 
     return populated; 
    } 
} 

Eres onDraw modificar. y simple_list_item_single_choice.xml modify.

ex.

<**your class(modifyed CheckedTextView)** xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
/> 
Cuestiones relacionadas