簡體   English   中英

如何在片段內單擊按鈕時更改按鈕可繪制色調顏色

[英]How to change Button drawable tint color on button click inside fragment

我正在嘗試將按鈕單擊時的按鈕可繪制色調顏色更改為我想要的顏色,單擊時無法更改,請幫助我希望它是按鈕而不是 ImageButton。

在下面,我將發布我使用的選項卡布局的代碼,其中兩個選項卡是單向的並返回片段。 在 onewayfragment 中遇到了問題 當我從(經濟、商務和頭等艙)中選擇類型時,當我選擇經濟按鈕時,經濟按鈕中的可繪制對象應更改為我想要的顏色。

1) 主頁

2) 家庭適配器

3) OneWayFragment

4)返回片段

當我選擇經濟按鈕時,這就是我想要做的,經濟按鈕內的可繪制應將可繪制色調更改為我想要的顏色

下面是我使用過的文件的編碼

主頁.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

這是 OneWayFragment.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

這是按鈕xml

這是我嘗試過的代碼圖像,但出現錯誤,但無法正常工作,我還沒有一次嘗試所有代碼,我正在此圖像中一一嘗試,我取消了所有注釋以表明它們顯示錯誤。
在此處輸入圖片說明

我希望這是對代碼的清晰解釋:) 和我遇到的問題。 請幫我解決這個錯誤。 提前致謝

要更改 Button 的 drawable,您必須了解一些事情。 顯然,您的按鈕上可以有多個可繪制的復合,但是如果您只有一個,您可以這樣做

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

正如您所看到的, compundDrawables返回一個可繪制列表,因此如果您只想編輯一個,您只需調用first() ,然后您就可以根據您的需要相應地設置色調。 干杯!

您可以使用setBackgroundTintList()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM