当前位置: 首页 > 知识库问答 >
问题:

更改主活动中按钮的背景

居英资
2023-03-14

我已经创建了一个类,它扩展了对话片段。在该类中,当我按下一个按钮时,我想更改一个按钮的背景,该按钮被放置在主活动中。

我试图创建一个内部类来访问Main Active对象,但我得到的是这个错误:

尝试在空对象引用上调用虚拟方法android.content.pm.Application ationInfoandroid.content.Context.getApplication ationInfo()


@SuppressLint("ValidFragment")
public class Popup extends DialogFragment {
    private final MediaPlayer _mediaPlayer = new MediaPlayer();
    private final int _layout;
    private TextInputEditText _customTextField;
    private final Dialog mDialog = new Dialog();
    public boolean dialogIsActive = false;

    @SuppressLint("ValidFragment")
    public Popup(int layout) {
        _layout = layout;
    }

    public interface ICustomTts {
        void customTts(String input, Activity activity);
    }
    public ICustomTts iCustomTts;

    public interface  ITarget {
        String getTarget(String input);
    }
    public ITarget iTarget;

    @SuppressLint({"ClickableViewAccessibility", "ResourceType"})
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        final View view =  inflater.inflate(_layout, container, false);

        // Display fragment_dialog
        if (_layout == R.layout.fragment_dialog) {
            // Read and display the expressions
            view.findViewById(R.id.dialogHelp).setOnClickListener(v -> {
                String expressions = null;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    expressions = Helper.readFile(getContext(), "expressions.yml");
                }
                TextView models = view.findViewById(R.id.dialogModels);
                models.setText(expressions);
            });
            // Toggle the listener
            Button cta = view.findViewById(R.id.dialogCta);

            // Gain access to MainActivity
            class InnerMainActivity extends my.app.MainActivity {
                @RequiresApi(api = Build.VERSION_CODES.M)
                public void dialog(boolean active) {
                    int button = (active) ? R.drawable.button_red : R.drawable.button_yellow;
                    findViewById(R.id.dialog).setBackground(ContextCompat.getDrawable(getContext(), button));
                }
            }
            InnerMainActivity innerMainActivity = new InnerMainActivity();

            cta.setOnClickListener(v -> {
                if (!dialogIsActive) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        if (mDialog.hasRecordPermission(getContext())) {
                            mDialog.startService(getContext());
                            cta.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.button_red));
                            cta.setText(R.string.dialog_do_not_listen);
                            cta.setTextSize(17);
                            innerMainActivity.dialog(true);
                            dialogIsActive = true;
                        }
                    }
                }
                else {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        mDialog.stopTheService(getContext());
                        cta.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.button_yellow));
                        cta.setText(R.string.dialog_listen);
                        innerMainActivity.dialog(false);
                        dialogIsActive = false;
                    }
                }
            });
        }
                
        return view;
    }      

}

共有1个答案

谢清野
2023-03-14

你可以使用接口做到这一点。在你的对话片段:

public class MyDialog extends DialogFragment {

public interface OnButtonClick {
    void onButtonClick(boolean active);
}

private OnButtonClick onButtonClick;

public MyDialog(OnButtonClick onButtonClick) {
    this.onButtonClick = onButtonClick;
}
...

在你的活动中

MyDialog myDialog= new MyDialog(new MyDialog.OnButtonClick(){
        @Override
        public void onButtonClick(boolean active) {
            // TODO change background
        }
    });
 类似资料:
  • 问题内容: 我想更改主视图(而不是按钮或文本视图)的背景颜色,而只是通常是黑色的真实背景…我得到了以下代码: 它在的内部,但只是更改了Button的背景。 问题答案: 尝试用类似的方法创建一个方法… 然后从您的OnClickListener调用它,并传递您想要的任何颜色。

  • 我已将设置为 样式表中的全局。现在每个活动都有相同的图标。 如何将操作栏中的图标更改为左箭头( 我尝试访问android。R、 可抽出式。ic\u menu\u back但我无法访问它(它似乎是私有的):

  • 本文向大家介绍使用CSS更改按钮的背景色,包括了使用CSS更改按钮的背景色的使用技巧和注意事项,需要的朋友参考一下 要更改按钮的背景色,请使用background-color属性。 您可以尝试运行以下代码来更改按钮的背景色 示例

  • 我想在我的应用程序中应用不同的主题。我想更改导航栏和浮动操作按钮的颜色。 现在我可以更改导航栏的颜色,但浮动操作按钮的颜色没有变化。当主题更改时,如何动态更改工厂的颜色? 风格: 绝妙的: 晶圆厂选择器: 谢谢你...

  • 问题内容: 我在主要活动中创建了三个按钮。我为按钮一使用了以下代码 问题是当我按下后退按钮而不是在主要活动中不可见的按钮时。 问题答案: 如果您按下返回按钮,则会返回活动状态,但是您已经将按钮的可见性设置为“消失”,这就是为什么您看不到这些按钮的原因。您必须处理后退按钮,并将按钮的可见性再次设置为“可见”。

  • 许多Android设备在屏幕底部使用软件home/back按钮。各种应用程序会更改这些按钮的颜色以更好地匹配应用程序颜色主题。 如何在React Native中更改这些颜色?(最好是通过编程方式,这样明暗屏幕可以使用不同的按钮颜色。) 三星Galaxy S10的示例: 团队: 松弛第一屏: 第二屏松弛: