作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 PreferenceScreen,我在其中保存一些参数,并且我想使用此参数来更改位于应用程序其他位置的 recyclerview 的所有元素的视觉效果。
我不知道在创建元素时如何或在何处放置值来设置此首选项。
Recycler 的所有元素都包含在一个带有一些 Textview 的水平线性布局中;我想更改布局的背景颜色和 TextView 的文本颜色(使用首选项值)
我尝试从 RecyclerView 所在的 View 恢复并传递这些数据,但我不知道如何在适配器中执行此操作
这是适配器代码
public class Adaptagrande extends RecyclerView.Adapter<Adaptagrande.jHolder>{
List<Juego> jueguiss;
private Context micontext;
public Adaptagrande(Context micontext, List<Juego> jueguiss){
this.jueguiss = jueguiss;
this.micontext = micontext;
}
@NonNull
@Override
public jHolder onCreateViewHolder(ViewGroup grupo, int i){
View vv = LayoutInflater.from(grupo.getContext()).inflate(R.layout.layout_juegofull, grupo, false);
jHolder holdeer = new jHolder(vv);
return holdeer;
}
@Override
public void onBindViewHolder(final jHolder holder, final int pos){
final Juego j1 = jueguiss.get(pos);
holder.titxtlist.setText(j1.getTitulo());
holder.platxtlist.setText(j1.getPlataforma());
holder.posetxtlist.setText(j1.getPosesion());
holder.formatxtlist.setText(j1.getFisico());
holder.avatxtlist.setText(j1.getAvance());
holder.vectxtlist.setText(j1.getVeces());
//cargapref();
}
@Override
public int getItemCount() {
return jueguiss.size();
}
public static class jHolder extends RecyclerView.ViewHolder{
public TextView titxtlist;
public TextView platxtlist;
public TextView posetxtlist;
public TextView formatxtlist;
public TextView avatxtlist;
public TextView vectxtlist;
//SharedPreferences preferences;
public jHolder(View itemViewer){
super(itemViewer);
titxtlist=(TextView) itemView.findViewById(R.id.titxtlist);
platxtlist=(TextView) itemView.findViewById(R.id.platxtlist);
posetxtlist=(TextView) itemView.findViewById(R.id.posetxtlist);
formatxtlist=(TextView) itemView.findViewById(R.id.formatxtlist);
avatxtlist=(TextView) itemView.findViewById(R.id.avatxtlist);
vectxtlist=(TextView) itemView.findViewById(R.id.vectxtlist);
}
}
}
这是回收器中每个元素的 XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#505050"
android:orientation="vertical">
<TextView
android:id="@+id/textView8"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#C4E0E0E0"
android:paddingLeft="8dp"
android:paddingTop="2dp"
android:paddingRight="8dp"
android:paddingBottom="2dp" />
<LinearLayout
android:id="@+id/contene2"
android:layout_width="match_parent"
android:background="#525252"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/titxtlist"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView"
android:textColor="#FFF" />
<TextView
android:id="@+id/platxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />
<TextView
android:id="@+id/posetxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />
<TextView
android:id="@+id/formatxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />
<TextView
android:id="@+id/avatxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />
<TextView
android:id="@+id/vectxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />
</LinearLayout>
<TextView
android:id="@+id/textView10"
android:layout_width="match_parent"
android:background="#C4E0E0E0"
android:layout_height="1dp"
android:paddingLeft="8dp"
android:paddingTop="2dp"
android:paddingRight="8dp"
android:paddingBottom="2dp" />
</LinearLayout>
这是首选项和类的 xml 文件
public class SettingFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle bundle, String s) {
setPreferencesFromResource(R.xml.preferences, s);
}
}
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Visual lista grande">
<ListPreference
android:defaultValue="1"
android:entries="@array/colorsfondo"
android:entryValues="@array/colorsfondo"
android:key="list_preference_1"
android:title="Color de fondo" />
</PreferenceCategory>
</PreferenceScreen>
如果我在其他地方恢复数据或修改 PreferenceScreen 中的选择,它会正常工作。
如果我能够从首选项中恢复字符串元素,并通过“if”语句或“Switch - case”更改背景颜色,那就完美了
最佳答案
好的,我修好了
在Adapter类(Adaptagrande)的onBindViewHolder上,添加了这个方法
@Override
public void onBindViewHolder(final jHolder holder, final int pos){
final Juego j1 = jueguiss.get(pos);
holder.titxtlist.setText(j1.getTitulo());
holder.platxtlist.setText(j1.getPlataforma());
holder.posetxtlist.setText(j1.getPosesion());
holder.formatxtlist.setText(j1.getFisico());
holder.avatxtlist.setText(j1.getAvance());
holder.vectxtlist.setText(j1.getVeces());
cargapref(holder);
}
private void cargapref(jHolder holder) {
final String backgrndcolor = PreferenceManager.getDefaultSharedPreferences(micontext).getString("list_preference_1", "");
final String textcolor = PreferenceManager.getDefaultSharedPreferences(micontext).getString("list_preference_2","");
switch (backgrndcolor){
case "Naranja" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 139, 30));
break;
case "Rojo" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 0, 0));
break;
case "Amarillo" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 255, 0));
break;
case "Verde" :
holder.contenedor.setBackgroundColor(Color.argb(255,0, 255, 0));
break;
case "Azul" :
holder.contenedor.setBackgroundColor(Color.argb(255,0, 0, 255));
break;
case "Morado" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 0, 255));
break;
case "Blanco" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 255, 255));
break;
case "Negro" :
holder.contenedor.setBackgroundColor(Color.argb(255,0, 0, 0));
break;
}
switch (textcolor) {
case "Naranja":
holder.titxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.platxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.posetxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.formatxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.avatxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.vectxtlist.setTextColor(Color.argb(255, 252, 164, 40));
break;
case "Rojo":
holder.titxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.platxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.posetxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.formatxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.avatxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.vectxtlist.setTextColor(Color.argb(255, 252, 30, 30));
break;
case "Amarillo":
holder.titxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.platxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.posetxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.formatxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.avatxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.vectxtlist.setTextColor(Color.argb(255, 255, 240, 76));
break;
case "Verde":
holder.titxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.platxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.posetxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.formatxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.avatxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.vectxtlist.setTextColor(Color.argb(255, 42, 211, 56));
break;
case "Azul":
holder.titxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.platxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.posetxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.formatxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.avatxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.vectxtlist.setTextColor(Color.argb(255, 32, 232, 225));
break;
case "Morado":
holder.titxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.platxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.posetxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.formatxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.avatxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.vectxtlist.setTextColor(Color.argb(255, 182, 104, 255));
break;
case "Blanco":
holder.titxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.platxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.posetxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.formatxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.avatxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.vectxtlist.setTextColor(Color.argb(255, 255, 255, 255));
break;
case "Negro":
holder.titxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.platxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.posetxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.formatxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.avatxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.vectxtlist.setTextColor(Color.argb(255, 0,0,0));
break;
}
}
就是这样
如果您有任何问题,请确保您没有将颜色引用搞乱(Color.parseColor("#000000")
在这种情况下对我不起作用)
关于java - 如何将 RecyclerView 所有元素的背景更改为 SharedPreferences 保存的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56482380/
我是一名优秀的程序员,十分优秀!