更改操作模式的颜色或在工具栏中启动操作模式

时间:2015-11-01 22:52:43

标签: android android-fragments android-toolbar android-actionmode

我想更改动作模式的颜色或在动作栏上显示它,但我尝试的任何内容(比如更改动作上的动作模式背景)都有效。我怎么能这样做?

我将发布应用程序的代码和屏幕截图。

来自styles.xml的

代码

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionModeOverlay">true</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionModeOverlay">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark" />

来自colors.xml的

代码

<resources>
<color name="colorPrimary">#ef7102</color>
<color name="colorPrimaryDark">#ff7300</color>
<color name="colorAccent">#000000</color>
<color name="Icones">#03A9F4</color>
<color name="black">#000000</color>
<color name="actionMode">#ffffff</color>

来自片段的

代码

    public class SaldoProdutos extends Fragment {
    private static final String ARG_PARAM1 = "id";
    private String mParam1;
    SaldoProdutosAdpter adpt;
    bonus.app.bonuscard.Classes.SaldoProdutos item;
    public static final int CONNECTION_TIME = 1000 * 15;
    public static final String SERVIDOR = "http://bonusfidelidade.com.br/app";
    int caraio;
    int coisao;
    List<Integer> posicao = new ArrayList<Integer>();

    private ActionMode mActionMode;
    List<bonus.app.bonuscard.Classes.SaldoProdutos> contadores = new ArrayList<bonus.app.bonuscard.Classes.SaldoProdutos>();


    public static SaldoProdutos newInstance(String param1) {
        SaldoProdutos fragment = new SaldoProdutos();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);


        fragment.setArguments(args);
        return fragment;
    }

    public SaldoProdutos() {


    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
         }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                             final Bundle savedInstanceState) {
        FrameLayout frameLayout = (FrameLayout) getActivity().findViewById(R.id.frame_container);
        frameLayout.removeAllViews();
        final View tela = inflater.inflate(R.layout.fragment_saldo_produtos, container, false);
        Bundle id = getArguments();
        caraio = 0;
        getActivity().setTitle("" + id.getString("empresa") + "");
        Toolbar bar = (Toolbar) getActivity().findViewById(R.id.app_bar);
        bar.setSubtitle(id.getString("pontos")+" Pontos");
        bar.setSubtitleTextColor(Color.WHITE);

        final ListView lista = (ListView) tela.findViewById(R.id.listaprodutos);
        item = new bonus.app.bonuscard.Classes.SaldoProdutos(id.getString("filial"));
        List<bonus.app.bonuscard.Classes.SaldoProdutos> itens = new ArrayList<bonus.app.bonuscard.Classes.SaldoProdutos>();
        adpt = new SaldoProdutosAdpter(new ArrayList<bonus.app.bonuscard.Classes.SaldoProdutos>(), getActivity());
        lista.setAdapter(adpt);
        lista.setEmptyView(tela.findViewById(android.R.id.empty));
        (new Carregadados()).execute();
        lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                     Marcar(position, adpt.getItem(position), view);
            }
        });



        return tela;


    }



    public boolean Marcar(int position,  bonus.app.bonuscard.Classes.SaldoProdutos item, View view) {
        adpt.toggleSelection(position);

        boolean hasCheckedItems = adpt.getSelectedCount() > 0;
        boolean retorno = false;
        Bundle id = getArguments();
        String coiso = id.getString("pontos");
        coisao = Integer.parseInt(coiso);
        TextView Pontos = (TextView) view.findViewById(R.id.PontosSaldo);
        String pontos = Pontos.getText().toString().replace(" Pontos", "");
        Integer valor = Integer.parseInt(pontos);
        if (hasCheckedItems && mActionMode == null) {

            mActionMode = getActivity().startActionMode(new ActionModeCallback());
            if (contadores.contains(item)) {

                caraio = caraio - valor;
                contadores.remove(item);
                posicao.remove(position);
                retorno = false;
            } else {
                contadores.add(item);
                posicao.add(position);
                caraio = caraio + valor;
                retorno = true;


            }
            mActionMode.setTitle(+caraio + "/" + coisao + " Pontos Selecionados");
        } else if (!hasCheckedItems && mActionMode != null) {
            contadores.clear();
            posicao.clear();
            adpt.notifyDataSetChanged();
            caraio = 0;
            mActionMode.finish();
        }

        else if (hasCheckedItems && mActionMode != null) {

            if (contadores.contains(item)) {

                caraio = caraio - valor;
                contadores.remove(item);
                posicao.remove(position);
                retorno = false;
            } else {
                contadores.add(item);
                posicao.add(position);
                caraio = caraio + valor;
                retorno = true;


            }
            mActionMode.setTitle(+caraio + "/" + coisao + " Pontos Selecionados");

        }
        return retorno;

    }



    private class Carregadados extends AsyncTask<String, Void, List<bonus.app.bonuscard.Classes.SaldoProdutos>> {

        private final ProgressDialog dialog = new ProgressDialog(getActivity());

        @Override
        protected void onPostExecute(List<bonus.app.bonuscard.Classes.SaldoProdutos> result) {
            super.onPostExecute(result);
            dialog.dismiss();
            adpt.setItemList(result);
            adpt.notifyDataSetChanged();

        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog.setCancelable(false);
            dialog.setTitle("Carregando");
            dialog.setMessage("Por Favor Aguarde");
            dialog.show();
        }

        @Override
        protected List<bonus.app.bonuscard.Classes.SaldoProdutos> doInBackground(String... params) {
            List<bonus.app.bonuscard.Classes.SaldoProdutos> result = new ArrayList<bonus.app.bonuscard.Classes.SaldoProdutos>();
            ArrayList<NameValuePair> data = new ArrayList<>();
            Bundle id = getArguments();
            String filial = id.getString("filial");
            data.add(new BasicNameValuePair("empresa", filial));
            HttpParams httprequestparams = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httprequestparams, CONNECTION_TIME);
            HttpConnectionParams.setSoTimeout(httprequestparams, CONNECTION_TIME) ;
            HttpClient cliente =  new DefaultHttpClient(httprequestparams);
            HttpPost post = new HttpPost(SERVIDOR + "/saldoprodutos.php");

            try {

                post.setEntity(new UrlEncodedFormEntity(data));
                HttpResponse response =  cliente.execute(post);
                HttpEntity entity =  response.getEntity();
                String JSONResp = EntityUtils.toString(entity);
                JSONArray arr = new JSONArray(JSONResp);
                for (int i=0; i < arr.length(); i++) {
                    result.add(ConvertDados(arr.getJSONObject(i)));
                }

                return result;
            }
            catch(Throwable t) {
                t.printStackTrace();
            }
            return null;
        }

        public bonus.app.bonuscard.Classes.SaldoProdutos ConvertDados(JSONObject obj) throws JSONException {
            Bundle id = getArguments();
            String filial = id.getString("filial");
            int ID = obj.getInt("id");
            int pontos = obj.getInt("pontos");
            int segunda = obj.getInt("segunda");
            int terca = obj.getInt("terca");
            int quarta = obj.getInt("quarta");
            int quinta = obj.getInt("quinta");
            int sexta = obj.getInt("sexta");
            int sabado = obj.getInt("sabado");
            int domingo = obj.getInt("domingo");
            int ativo = obj.getInt("ativo");
            String produto = obj.getString("produto");

            return new bonus.app.bonuscard.Classes.SaldoProdutos(ID,pontos,segunda,terca,quarta,quinta,sexta,sabado,domingo,ativo,produto,filial);
        }


    }


    private class ActionModeCallback implements ActionMode.Callback {

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            getActivity().findViewById(R.id.app_bar).setVisibility(View.GONE);
             mode.getMenuInflater().inflate(R.menu.action_menu, menu);
            getActivity().findViewById(R.id.app_bar).setVisibility(View.GONE);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

            int id = item.getItemId();


           if(id == R.id.criarvoucher){
              if (caraio > coisao)
              {
                  AlertDialog.Builder alerta = new AlertDialog.Builder(getActivity());
                  alerta.setTitle("Erro");
                  alerta.setMessage("Pontos Insuficientes para geração do Voucher");
                  alerta.setPositiveButton("OK", null);
                  alerta.show();
                  mode.finish();
              }
               else {
                  FragmentManager fm = getFragmentManager();
                  GerarVoucher fragment = new GerarVoucher();
                //  Bundle bundle = new Bundle();
                  fragment.show(fm, "Gerar Voucher");
              }
           }
            adpt.notifyDataSetChanged();
            contadores.clear();
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {


            mActionMode = null;
            caraio = 0;
            Log.d("posicao", ""+posicao);
            for (Integer item:posicao)
            {
                adpt.toggleSelection(item);
            }

            posicao.clear();
            contadores.clear();
            getActivity().findViewById(R.id.app_bar).setVisibility(View.VISIBLE);
        }
    }
}

片段截图

Fragment PrintScreen

动作模式屏幕截图 ActionMode Print

0 个答案:

没有答案