Как изменить оттенок цвета кнопки при нажатии кнопки внутри фрагмента - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь изменить оттенок оттягиваемой кнопки при нажатии кнопки на цвет, который я хочу, невозможно изменить при нажатии, пожалуйста, помогите. Я хочу, чтобы это была кнопка, а не ImageButton.

здесь ниже я буду публиковать коды, которые я , используя макет вкладки , где две вкладки являются односторонними и возвращают фрагменты. У меня проблема в одном фрагменте . где при выборе типа из (экономика, бизнес и первый класс) мне нужно , когда я выбираю на кнопку экономии, нарисованная кнопка экономии должна смениться на нужный мне цвет.

1) Домашняя страница

2) HomeAdapter

3) OneWayFragment

4) ReturnFragment

this is what i want to be done when i select on economy button the drawable inside the economy button should be change the drawable tint to the color i want

здесь ниже приведена кодировка файлов, которые я использовал

HomePage. java

package com.example.gomerry.Home_Page;
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.TextView;
import androidx.viewpager.widget.ViewPager;
import com.example.gomerry.Menu;
import com.example.gomerry.R;
import com.google.android.material.tabs.TabLayout;

public class HomePage extends Menu {


TextView date;
TextView month;
TextView dayofWeek,day;
DatePickerDialog datePickerDialog1;
DatePickerDialog datePickerDialog2;
Adapter adapter;


TabLayout tabLayout;
ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_page);

    tabLayout=(TabLayout)findViewById(R.id.tabLayout);
    viewPager=(ViewPager)findViewById(R.id.viewPager);

    tabLayout.addTab(tabLayout.newTab().setText("One Way"));
    tabLayout.addTab(tabLayout.newTab().setText("Return"));
    // tabLayout.addTab(tabLayout.newTab().setText("Movie"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final HomeAdapter adapter = new HomeAdapter(this,getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));



    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
}
}//end of code

Это HomeAdapter. java

package com.example.gomerry.Home_Page;

import android.content.Context;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import com.example.gomerry.CancelBooking.CancellationFragment;
import com.example.gomerry.CancelBooking.ChargesFragment;

public class HomeAdapter extends FragmentPagerAdapter {

private Context myContext;
int totalTabs;

public HomeAdapter(Context context, FragmentManager fm, int totalTabs) {
    super(fm);
    myContext = context;
    this.totalTabs = totalTabs;
}

// this is for fragment tabs
@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            OneWayFragment oneWayFragment = new OneWayFragment();
            return oneWayFragment;
        case 1:
            ReturnFragment returnFragment = new ReturnFragment();
            return returnFragment;

        default:
            return null;
    }
}
// this counts total number of tabs
@Override
public int getCount() {
    return totalTabs;
}
}//end of code

Это фрагмент OneWay. java

package com.example.gomerry.Home_Page;

import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;

import com.example.gomerry.R;

public class OneWayFragment extends Fragment {


Button economy;

public OneWayFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
   // return inflater.inflate(R.layout.one_way_fragment, container, false);

    Log.d("link_fly",Data_URL);
    final View view = inflater.inflate(R.layout.one_way_fragment, container, false);

    economy =(Button) view.findViewById(R.id.button11);

    economy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            economy.setTextColor(R.color.cyan92a6);
            ImageButton button = (ImageButton) this.findViewById(R.id.button_i_want_to_modify);
            economy.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint
            economy.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.cyanBcD4), PorterDuff.Mode.MULTIPLY);
            economy.setCompoundDrawableTintMode();
            binding.myButton.compoundDrawables.first().setTint(Color.RED);
            view.economy.compoundDrawables.first().setTint(Color.RED);
            economy.compoundDrawables.first().setTint(Color.RED);
            economy.getBackground().setColorFilter();
        }
    });

    return view;
}
}//end of code

это кнопка xml

this is the button xml

это изображение кодов, которые я пробовал, и я получаю ошибки, которые не работают, и я не пробовал все сразу i я пытаюсь один за другим в этом изображении я раскомментировал все, чтобы показать, что они показывают ошибки.
enter image description here

Я надеюсь, что это четкое объяснение кода :) и проблема я иметь. пожалуйста, помогите мне решить эту ошибку. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Вы можете использовать setBackgroundTintList() метод.

0 голосов
/ 05 февраля 2020

Чтобы изменить рисунок вашей кнопки, вам нужно знать несколько вещей. Очевидно, у вас может быть несколько составных элементов, которые можно нарисовать на вашей кнопке, но если у вас есть только один, вы можете сделать это следующим образом

    Button economy = findViewById(R.id.button11)
    economy.setOnClickListener {
        economy.compoundDrawables.first().setTint(Color.RED)
    }

Как видите, compundDrawables возвращает список рисовать, поэтому, если вы хотите редактировать только один, вы можете просто позвонить сначала () , а затем вы можете установить оттенок в соответствии с вашими потребностями. Ура!

...