删除ActionMode的“完成”按钮

时间:2013-02-19 18:38:50

标签: android android-actionbar android-actionmode

0我正在我的应用上使用startActionMode(ActionMode)。

默认情况下,它会添加"完成"栏上的按钮,我想删除它。

另外,如果有办法改变它的文字,我也想知道,导致与“#34;完成"可以使行动与其行为相对应。

5 个答案:

答案 0 :(得分:44)

我同意@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>

答案 1 :(得分:2)

如果您使用的是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>

请确保将此样式放在每个样式目录中(values,value-v11,values-v14)。之后,您可以使用以下代码创建自定义菜单:

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

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

答案 2 :(得分: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("");

希望这会有所帮助!!

答案 3 :(得分:1)

感谢Matthias Robbers,它有效。但我更喜欢使用&#34;隐形&#34;:

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

因此,ActionMode中的自定义视图位置不会缩进到父左侧。

答案 4 :(得分:0)

任何人找到屏幕宽度解决方案? - Mayur R. Amipara 6月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());
    }


}