【问题标题】:How to change Button drawable tint color on button click inside fragment如何在片段内单击按钮时更改按钮可绘制色调颜色
【发布时间】:2020-05-21 02:30:27
【问题描述】:

我正在尝试将按钮单击时可绘制的色调颜色更改为我想要的颜色,单击时无法更改请帮助 我希望它是按钮而不是 ImageButton。

我将在下面发布代码 我正在使用选项卡布局,其中两个选项卡是单向的并返回片段。 我遇到了 onewayfragment 中的问题。从(经济、商务和头等舱)中选择类型时,我需要当我在经济按钮上选择时,经济按钮中的可绘制对象应更改为我想要的颜色。

1) 主页

2) 家庭适配器

3) 单向片段

4) 返回片段

下面是我用过的文件的编码

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

这是 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、Java 类文件以进一步说明
  • @AtishAgrawal 我用代码和图像编辑了问题。我希望现在仍然可以理解,如果有任何澄清,请告诉我,我会尽力而为。谢谢。

标签: android button colors onclick drawable


【解决方案1】:

你可以使用setBackgroundTintList()方法。

【讨论】:

  • 当然。实际上,您可以使用图像按钮并添加此代码块; nopeButton.getBackground().setColorFilter();@bunty785
  • 我也尝试过,但仍然无法正常工作,我想可能是代码无法正常工作,因为它位于片段内。
【解决方案2】:

要更改 Button 的可绘制对象,您必须知道一些事情。显然,您的按钮上可以有多个可绘制的复合对象,但如果您只有一个,则可以这样做

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

你可以看到 compundDrawables 返回一个可绘制列表,所以如果你只想编辑一个,你可以调用 first() 然后你可以设置根据您的需要进行着色。干杯!

【讨论】:

  • 我想更改按钮可绘制颜色。我认为上面的代码是改变按钮颜色
  • @bunty785 我相应地编辑了我的答案,请验证这是否是你需要的
  • 在这里面什么是绑定和mybutton?我的按钮名称是经济,资源 ID 是 button11。
  • 我在此处使用视图绑定,您可以阅读更多相关信息here 要适合您的情况,请再次查看我的答案
  • 上面给出了一个错误“无法解析符号compoundDrawables”
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2021-07-07
  • 2021-07-21
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多