Удалить кнопку "Готово" в ActionMode
0 Я использую startActionMode (ActionMode) в своем приложении.
По умолчанию он добавляет кнопку "Готово" на панели, я хочу ее удалить.
Кроме того, если есть способ изменить его текст, я тоже хочу знать, вызывать другое описание, чем "Готово", чтобы заставить действие соответствовать поведению того, что он делает.
Ответы
Ответ 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("");
Надеюсь, это поможет!
Ответ 2
Я согласен с @CommonsWare в том, что это неправильный дизайн, чтобы скрыть кнопку "Готово".
Однако есть клиенты, которые хотят удалить эту кнопку, и я могу понять, что эта галочка может вызвать путаницу для пользователей, поскольку в некоторых случаях она фактически ничего не делает.
Итак, вот как удалить кнопку со стилями:
<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>
Ответ 3
Если вы используете ActionBarSherlock, вы можете скрыть кнопку "Готово" с помощью этого стиля:
<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);
Ответ 4
Спасибо за Matthias Robbers, он работает. Но я предпочитаю использовать "невидимый":
<style name="NoCloseButtonActionModeStyle">
<item name="android:visibility">invisible</item>
</style>
Таким образом, пользовательская позиция представления в ActionMode не будет отступать от родительского слева.
Ответ 5
любой найдет решение ширины экрана? - Mayur R. Amipara Jun 5 '15 в 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());
}
}