我在这里找到了这段代码,但我无法让它在我的应用程序中运行
public void setActivityBackground(int color) {
View v = this.getWindow().getDecorView();
v.setBackgroundColor(color);
}
我正在尝试在交换机监听器(onCheckedChanged)中实现它,并且我在我的片段中的监听器内调用它
((MainActivity) getActivity()).setActivityBackground(Color.CYAN);
但没有任何反应。可能有什么不对?我可以用这种方式改变这种变化吗?
答案 0 :(得分:2)
我不确定你的意思是'可能是它的动画'。我假设你想要动画背景颜色的变化。对?这个解决方案并不完全正确,但它可以帮助您了解如何做到这一点。
1)片段布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="app.ola.com.example.FragmentExample">
<Switch
android:id="@+id/switchFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</RelativeLayout>
2)片段类
public class FragmentExample extends Fragment {
private OnCheckedChangeListener mListener;
private Switch switchFragment;
public FragmentExample() {
// 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.fragment_fragment_example, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
switchFragment = (Switch)view.findViewById(R.id.switchFragment);
switchFragment.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(null != mListener)
mListener.onCheckChange(b);
}
});
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnCheckedChangeListener) {
mListener = (OnCheckedChangeListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnCheckedChangeListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnCheckedChangeListener {
// TODO: Update argument type and name
void onCheckChange(boolean b);
}
}
3)活动布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootView"
android:background="@android:color/white"
tools:context="app.ola.com.example.MainActivity">
<FrameLayout
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
4)活动类
public class MainActivity extends AppCompatActivity implements FragmentExample.OnCheckedChangeListener{
private RelativeLayout rootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rootView = (RelativeLayout)findViewById(R.id.rootView);
getSupportFragmentManager().beginTransaction()
.add(R.id.mainContent, new FragmentExample()).commit();
}
@Override
public void onCheckChange(boolean isChecked) {
//animate
if(isChecked){
ObjectAnimator.ofObject(rootView, "backgroundColor", new ArgbEvaluator(), Color.argb(0, 255, 255, 255), Color.argb(200, 0, 0, 0))
.setDuration(300)
.start();
}
else{
ObjectAnimator.ofObject(rootView, "backgroundColor", new ArgbEvaluator(), Color.argb(200, 0, 0, 0), Color.argb(0, 255, 255, 255))
.setDuration(300)
.start();
}
}
}
5)结果
注意强>
1)您可以在片段类中创建接口,并在Activity类中实现接口,而不是调用((MainActivity) getActivity()).setActivityBackground(Color.CYAN)
。这是在fragment-activity之间进行通信的正确方法。您可以参考Android开发者文档以获得简要说明:Communication with other fragments
2)我使用ObjectAnimator为背景颜色的变化设置动画,从白色到黑色,不透明度为78%。 'rootView'是布局活动的父视图。您可以参考活动布局。
答案 1 :(得分:0)
你可以设置方法&#34; setActivityBackground(int color)&#34;作为公共类中的静态,并在fragmengt中将其称为“class.setActivityBackground(Color.CYAN)”,试试吧;