根据从微调器中选择的颜色切换 android 应用程序的背景
Switching the background of an android app, based on a selected color form a spinner
我想问一下如何更改 android 应用程序的背景颜色/前提是我有一组颜色/下面我应用我尝试编写的代码来执行此操作任务:任务是根据当前从下拉列表(微调器)中选择的颜色更改应用程序的背景颜色。如果您能给我一些关于如何解决此问题的提示,我将不胜感激。
package com.example.assignment3_yoanivanov_322321010;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
LinearLayout linearLayout;
Spinner spinner;
String[] items = {"red","green","blue","orange","yellow","gray"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//textView = (TextView) findViewById(R.id.txtMsg);
spinner = (Spinner) findViewById(R.id.spinner2);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_dropdown_item, items);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String color = parent.getItemAtPosition(position).toString();
//Toast.makeText(parent.getContext(),color,Toast.LENGTH_LONG).show();
switch(color){
case "red":
linearLayout.setBackgroundColor(Color.RED);
case "green":
linearLayout.setBackgroundColor(Color.GREEN);
case "blue":
linearLayout.setBackgroundColor(Color.BLUE);
case "orange":
linearLayout.setBackgroundColor(Color.rgb(255, 165, 0));
case "yellow":
linearLayout.setBackgroundColor(Color.YELLOW);
case "GRAY":
linearLayout.setBackgroundColor(Color.GRAY);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
你的问题可能是
LinearLayout linearLayout;
没有赋值(我在你的代码中没有看到)。
像使用微调器一样分配值
linearLayout = (LinearLayout) findViewById(R.id.**your_layout_id**);
然后就可以了
您有一些问题,我将在以下几点中提及:
1. 正如@Drogheda 所说你错过了 LinearLayout
,但这不是主要问题。
注意:您可以省略多余的定义,例如Spinner = (Spinner) findViewById(R.id.spinner);
如果上面有一个变量 Spinner spinner;
。
因此: 删除 (Spinner)
或写入 Spinner spinner = findViewById(R.id.spinner);
2. 在您的 Switch
中,您在设置颜色后忘记设置 break;
。它将 运行 不间断地遍历每种颜色,这就是为什么什么都没有改变的原因。
3. 如果要比较 String
名称,则需要 spinner.getSelectedItem()
而不是 parent.getItemAtPosition()
。否则您需要提供 Integer
而不是 String
.
看看我的代码。进行了一些小的改进,您可以从中学习如何做出更好的方法。
我提供从 MainActivity.java
:
开始的完整代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = findViewById(R.id.mySpinner);
ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, Arrays.asList("red", "green", "blue", "orange", "yellow", "gray"));
spinner.setAdapter(arrayAdapter);
LinearLayout linearLayout = findViewById(R.id.linear_layout);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String color = spinner.getSelectedItem().toString();
switch (color) {
case "red":
linearLayout.setBackgroundColor(Color.RED);
break;
case "green":
linearLayout.setBackgroundColor(Color.GREEN);
break;
case "blue":
linearLayout.setBackgroundColor(Color.BLUE);
break;
case "orange":
linearLayout.setBackgroundColor(Color.rgb(255, 165, 0));
break;
case "yellow":
linearLayout.setBackgroundColor(Color.YELLOW);
break;
case "gray":
linearLayout.setBackgroundColor(Color.GRAY);
break;
default:
linearLayout.setBackgroundColor(Color.RED);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}
还有它的布局 activity_main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Your LinearLayout switch color through Spinner"
android:textColor="@color/white"
android:textSize="18sp" />
<Spinner
android:id="@+id/mySpinner"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_gravity="center" />
</LinearLayout>
结果:
我想问一下如何更改 android 应用程序的背景颜色/前提是我有一组颜色/下面我应用我尝试编写的代码来执行此操作任务:任务是根据当前从下拉列表(微调器)中选择的颜色更改应用程序的背景颜色。如果您能给我一些关于如何解决此问题的提示,我将不胜感激。
package com.example.assignment3_yoanivanov_322321010;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
LinearLayout linearLayout;
Spinner spinner;
String[] items = {"red","green","blue","orange","yellow","gray"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//textView = (TextView) findViewById(R.id.txtMsg);
spinner = (Spinner) findViewById(R.id.spinner2);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_dropdown_item, items);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String color = parent.getItemAtPosition(position).toString();
//Toast.makeText(parent.getContext(),color,Toast.LENGTH_LONG).show();
switch(color){
case "red":
linearLayout.setBackgroundColor(Color.RED);
case "green":
linearLayout.setBackgroundColor(Color.GREEN);
case "blue":
linearLayout.setBackgroundColor(Color.BLUE);
case "orange":
linearLayout.setBackgroundColor(Color.rgb(255, 165, 0));
case "yellow":
linearLayout.setBackgroundColor(Color.YELLOW);
case "GRAY":
linearLayout.setBackgroundColor(Color.GRAY);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
你的问题可能是
LinearLayout linearLayout;
没有赋值(我在你的代码中没有看到)。
像使用微调器一样分配值
linearLayout = (LinearLayout) findViewById(R.id.**your_layout_id**);
然后就可以了
您有一些问题,我将在以下几点中提及:
1. 正如@Drogheda 所说你错过了 LinearLayout
,但这不是主要问题。
注意:您可以省略多余的定义,例如Spinner = (Spinner) findViewById(R.id.spinner);
如果上面有一个变量 Spinner spinner;
。
因此: 删除 (Spinner)
或写入 Spinner spinner = findViewById(R.id.spinner);
2. 在您的 Switch
中,您在设置颜色后忘记设置 break;
。它将 运行 不间断地遍历每种颜色,这就是为什么什么都没有改变的原因。
3. 如果要比较 String
名称,则需要 spinner.getSelectedItem()
而不是 parent.getItemAtPosition()
。否则您需要提供 Integer
而不是 String
.
看看我的代码。进行了一些小的改进,您可以从中学习如何做出更好的方法。
我提供从 MainActivity.java
:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = findViewById(R.id.mySpinner);
ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, Arrays.asList("red", "green", "blue", "orange", "yellow", "gray"));
spinner.setAdapter(arrayAdapter);
LinearLayout linearLayout = findViewById(R.id.linear_layout);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String color = spinner.getSelectedItem().toString();
switch (color) {
case "red":
linearLayout.setBackgroundColor(Color.RED);
break;
case "green":
linearLayout.setBackgroundColor(Color.GREEN);
break;
case "blue":
linearLayout.setBackgroundColor(Color.BLUE);
break;
case "orange":
linearLayout.setBackgroundColor(Color.rgb(255, 165, 0));
break;
case "yellow":
linearLayout.setBackgroundColor(Color.YELLOW);
break;
case "gray":
linearLayout.setBackgroundColor(Color.GRAY);
break;
default:
linearLayout.setBackgroundColor(Color.RED);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}
还有它的布局 activity_main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Your LinearLayout switch color through Spinner"
android:textColor="@color/white"
android:textSize="18sp" />
<Spinner
android:id="@+id/mySpinner"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_gravity="center" />
</LinearLayout>
结果: