2013-02-19 2 views
20

0 Я использую startActionMode (ActionMode) в своем приложении.Удалить кнопку «Готово» в ActionMode

По умолчанию он добавляет кнопку «Готово» на панели, я хочу ее удалить.

Кроме того, если есть способ изменить его текст, я тоже хочу знать, вызывать другое описание, чем «Готово», чтобы действие соответствовало поведению того, что он делает.

+0

Предоставление рисунка делает его более понятным, о чем вы говорите. – JoxTraex

+2

IMHO, то, что вы хотите, является недействительным. По определению пользователь может отменить режим действия, например, нажать кнопку BACK. Режим действия должен быть неразрушающим по умолчанию: активирование режима действия, а затем нажатие BACK (или нажатие Done) не должно вызывать никаких изменений в данных пользователя. – CommonsWare

+0

Хм .. это тоже так. Итак, есть способ изменить его текст, чтобы пользователь не смутился? Иногда «Отмена» - лучшее описание, чем «Готово». Ty! –

ответ

1

Даже я застрял с таким же, и я нашел способ решить эту проблему.

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

Надеюсь, это поможет!

+10

Это ненадежное решение, так как оно предполагает детали реализации, которые могут быть изменены. – CommonsWare

+1

не работает Я попытался это получить исключение нулевой указатель, когда я должен вызвать этот метод, я использую фрагмент –

+0

Он отлично работает, если вы используете планшетное устройство – MohammadReza

43

Я согласен с @CommonsУказать, что это неправильный дизайн, чтобы скрыть Готово.

Однако есть клиенты, которые хотят удалить эту кнопку, и я могу понять, что эта галочка может вызвать путаницу у пользователей, поскольку в некоторых случаях она фактически ничего не делает.

Итак, вот как удалить кнопку со стилями:

<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> 
+1

не работает для меня! Действительно ли это применительно к ICS? – rupps

+0

Отличное решение для API 11+, но есть ли способ сделать это в API 8+?Я использую ActionBarSherlok, есть ли способ скрыть его? ActionModeCloseButtonStyle требует API 11+ – Cilenco

+3

@Cilenco: 'actionModeCloseButtonStyle' (без' android: ') должен работать для ABS. –

2

Если вы используете ActionBarSherlock вы можете скрыть кнопку «Done» с этим стилем:

<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> 

Пожалуйста, убедитесь, поместить этот стиль в каждый каталог стиля (значения, значение-v11, values-v14). После этого вы можете создать пользовательское меню с этим кодом:

LayoutInflater inflater = LayoutInflater.from(getSherlockActivity()); 
View actionView = inflater.inflate(R.layout.actionmode, null); 

ActionMode am = getSherlockActivity().startActionMode(mActionModeCallback); 
am.setCustomView(actionView); 
+1

Но здесь actionView не занимает всю ширину экрана. – sandeepmaaram

+1

Да. Но здесь actionView не занимает всю ширину экрана –

+0

любое решение для определения ширины экрана? –

1

Спасибо за Matthias Robbers, он работает. Но, я предпочитаю использовать «невидимый»:

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

Так обычай позиция вида в ActionMode не отступ родитель налево.

0

любой найдет решение ширины экрана? - Mayur R. Amipara Jun 5 '15 at 10:27

переопределить ваш пользовательский вид onMeasure, установить ширину экрана на ширину экрана. и в onLayout, ретранслируйте ваши представления для детей.

это работает для меня.

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()); 
    } 


} 
Смежные вопросы