21

0アプリで startActionMode(ActionMode) を使用しています。

デフォルトでは、バーに「完了」ボタンが追加されていますが、削除したいと思います。

また、テキストを変更する方法があれば、私も知りたいのですが、「完了」とは異なる説明が原因で、アクションがその動作の動作に対応するようになる可能性があります。

4

5 に答える 5

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>
于 2013-02-20T11:54:38.820 に答える
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);
于 2013-05-25T23:24:22.683 に答える
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("");

お役に立てれば!!

于 2013-06-17T10:00:41.947 に答える
0

画面幅の解決策を見つけた人はいますか?— Mayur R. Amipara 15 年 6 月 5 日 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());
    }


}
于 2016-07-08T09:27:37.197 に答える