Pequeño contador de Android junto a un botón
Me gustaría añadir un pequeño contador junto a un botón para mostrar la cantidad restante de algunos elementos, por ejemplo, el número restante de consejos restantes no utilizados. El diseño específico sería como se muestra:
- Botón de diseño de material con borde
- Cambiar el color del botón en el cursor
- El botón no se muestra en LinearLayout
- Los textos de los botones desaparecen en KitKat (API nivel 19)
- Android: ListView con botones -> OnItemClick no hacer nada
Pregunta:
He investigado la web y he encontrado que algunos dicen que utilizar diferentes imágenes para cada cantidad. Sin embargo, ¿cómo podría resolverse si la cantidad puede ser de hasta 100? ¿Realmente necesario dibujar tal fuera?
Estoy pensando en pegar 2 botones juntos en un RelativeLayout
tal manera que cuando el usuario pulsa el botón inferior, el botón superior contará hacia arriba y hacia abajo y setText
sí, pero hay algunas mejores soluciones o importaciones?
Editar:
Gracias Rupesh por sus códigos y consejos! He implementado lo siguiente. Sin embargo, ¿sabes cómo mover el círculo rojo textview más a la derecha? y el 20 no se puede mostrar adecuadamente en el círculo rojo también …
Código:
<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" > <Button android:id="@+id/button_tip" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginBottom="1dp" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:layout_marginTop="5dp" android:background="@drawable/orange_btn" android:onClick="button_tip_click" android:text="Hello" /> <TextView android:layout_width="15dp" android:layout_height="15dp" android:layout_gravity="top|right" android:background="@drawable/red_circle_btn" android:gravity="center" android:text="20" android:textColor="@color/white" android:textSize="8sp" android:textStyle="bold" /> </FrameLayout>
- Botón de encargo de Holo
- Mantener el estado seleccionado botón de Android
- ¿Cómo puedo aplicar un estilo a todos los botones de una aplicación de Android?
- Ayuda de Android con cambiar el tipo de fuente del botón, ¿cómo?
- Repetir una acción mientras se pulsa el botón
- Un OnClickHandler para varios botones
- Creación dinámica de botones y configuración onClickListener
- Botón de retroceso de Android y cuadro de diálogo de progreso
set El fondo del botón Drawable a un Drawable de encargo como éste:
public class DecoratedTextViewDrawable extends LayerDrawable { private int mCnt = 0; private Paint mPaint; private TextView mParent; private ColorStateList mColors; private Rect mBounds; public DecoratedTextViewDrawable(TextView tv, Drawable[] layers, int cnt) { super(layers); mParent = tv; mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setTextAlign(Align.CENTER); mPaint.setTextSize(tv.getTextSize()); mPaint.setTypeface(Typeface.DEFAULT_BOLD); int[][] states = { {android.R.attr.state_pressed}, {android.R.attr.state_focused}, {} }; int[] colors = { 0xff0000aa, 0xff880000, 0xff00aa00 }; mColors = new ColorStateList(states, colors); mBounds = new Rect(); setCnt(cnt); } public void setCnt(int cnt) { mCnt = cnt; String s = Integer.toString(cnt); mPaint.getTextBounds(s, 0, s.length(), mBounds); invalidateSelf(); } @Override protected boolean onStateChange(int[] state) { invalidateSelf(); return super.onStateChange(state); } @Override public boolean isStateful() { return true; } @Override public void draw(Canvas canvas) { super.draw(canvas); float x = mPaint.getTextSize() * 1.5f; float r = mPaint.getTextSize() * 0.9f; int base = mParent.getBaseline(); int[] stateSet = getState(); // Log.d(TAG, "draw " + StateSet.dump(stateSet)); int color = mColors.getColorForState(stateSet, 0xff000000); mPaint.setColor(color); canvas.drawCircle(x, base + mBounds.top + mBounds.height() / 2, r, mPaint); mPaint.setColor(0xffeeeeee); canvas.drawText(Integer.toString(mCnt), x, base, mPaint); } }
Puedes usarlo así:
// Activity.onCreate method LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); int NUM = 5; final int[] cnt = new int[NUM]; Random r = new Random(); for (int i = 0; i < NUM; i++) { cnt[i] = r.nextInt(20); Button b = new Button(this); b.setText("Click me"); b.setTextSize(18); b.setTag(i); Drawable[] layers = {b.getBackground()}; Drawable d = new DecoratedTextViewDrawable(b, layers, cnt[i]); b.setBackgroundDrawable(d); OnClickListener l = new OnClickListener() { @Override public void onClick(View v) { DecoratedTextViewDrawable d = (DecoratedTextViewDrawable) v.getBackground(); int idx = (Integer) v.getTag(); d.setCnt(++cnt[idx]); } }; b.setOnClickListener(l); ll.addView(b); } setContentView(ll);
usar esto – y seguir actualizando el texto textviews con el conteo
<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/your_phone_call_image" android:gravity="center" android:scaletype="matrix"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" android:padding="5dp" android:gravity="top|right" <!--this is important--> android:background="@drawable/your_counter_red_background"/> </FrameLayout>
Le sugiero que puede utilizar un FrameLayout. 1.- puedes usar 2 imágenes una para tu botón, una para el pequeño círculo y usar una textview para los números … 2.- puedes usar una imagen para tu botón, y crear un degradado para el pequeño círculo y un vista de texto..
Para el frameLayout vea: http://developer.android.com/reference/android/widget/FrameLayout.html Para el gradiente, vea: Cómo hacer el fondo de degradado en android .