tutorial studio modify item create bar activity actionbar android android-actionbar android-actionmode

android - studio - Eliminar el botón "Hecho" de ActionMode



modify action bar (5)

0Estoy usando startActionMode (ActionMode) en mi aplicación.

Por defecto es agregar un botón "Hecho" en la barra, quiero eliminarlo.

Además, si hay una manera de cambiar su texto, también quiero saberlo, ya que una descripción diferente a "Hecho" puede hacer que la acción se corresponda con el comportamiento de lo que hace.


Estoy de acuerdo con @CommonsWare en que no es válido diseñar para ocultar el botón Hecho .

Sin embargo, hay clientes que desean que se elimine este botón y puedo entender que la marca de verificación puede causar confusión a los usuarios porque en realidad no hace nada en algunos casos.

Entonces, aquí está cómo quitar el botón con estilos:

<style name="AppTheme" parent="android:Theme.Holo"> <item name="android:actionModeCloseButtonStyle">@style/NoCloseButton</item> </style> <style name="NoCloseButton" parent="@android:style/Widget.ActionButton.CloseMode"> <item name="android:visibility">gone</item> </style>


Gracias por , funciona. Pero yo prefiero usar "invisible":

<style name="NoCloseButtonActionModeStyle"> <item name="android:visibility">invisible</item> </style>

Por lo tanto, la posición de vista personalizada en ActionMode no se sangrará a la izquierda principal.


Incluso me estancé con el mismo y encontré esta manera de resolverlo.

int doneButtonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "android"); LinearLayout layout = (LinearLayout) findViewById(doneButtonId); TextView doneview = (TextView) layout.getChildAt(1); doneview.setText("");

¡¡Espero que esto ayude!!


Si está utilizando ActionBarSherlock, puede ocultar el botón "Listo" con este estilo:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="NoCloseButton" parent="@style/Widget.Sherlock.ActionButton.CloseMode"> <item name="android:visibility">gone</item> </style> <style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar"> <item name="actionModeCloseButtonStyle">@style/NoCloseButton</item> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> </style> </resources>

Asegúrese de poner este estilo en cada directorio de estilo (valores, valor-v11, valores-v14). Después de eso puedes crear un menú personalizado con este código:

LayoutInflater inflater = LayoutInflater.from(getSherlockActivity()); View actionView = inflater.inflate(R.layout.actionmode, null); ActionMode am = getSherlockActivity().startActionMode(mActionModeCallback); am.setCustomView(actionView);


¿Alguien encuentra solución de ancho de pantalla? - Mayur R. Amipara el 5 de junio de 2015 a las 10:27

anule su vista personalizada en Medida, establezca el ancho al ancho de la pantalla. y en onLayout, retransmite las vistas de sus hijos.

esto funciona para mi.

import android.content.Context; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.View; import android.widget.RelativeLayout; import com.android.gallery3d.R; public class SelectActionModeCustomView extends RelativeLayout { private View mLeftButton; private View mRightButton; private int mScreenWidth; private static final String TAG = "SelectActionView"; public SelectActionModeCustomView(Context context, AttributeSet attrs) { super(context, attrs); DisplayMetrics metrics = context.getResources().getDisplayMetrics(); mScreenWidth = metrics.widthPixels; } @Override protected void onFinishInflate() { super.onFinishInflate(); mLeftButton = findViewById(R.id.cancel); mRightButton = findViewById(R.id.select_action); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); this.setMeasuredDimension(mScreenWidth, this.getMeasuredHeight()); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); int childLeft = 0; int childTop = 0; childLeft = 0; childTop = ((b - t) - mLeftButton.getMeasuredHeight()) / 2; mLeftButton.layout(childLeft, childTop, childLeft + mLeftButton.getMeasuredWidth(), childTop + mLeftButton.getMeasuredHeight()); childLeft = (r - l) - mRightButton.getMeasuredWidth(); childTop = ((b - t) - mRightButton.getMeasuredHeight()) / 2; mRightButton.layout(childLeft, childTop, childLeft + mRightButton.getMeasuredWidth(), childTop + mRightButton.getMeasuredHeight()); } }