【问题标题】:How do i change background in all elements of RecyclerView to a SharedPreferences saved color?如何将 RecyclerView 的所有元素中的背景更改为 SharedPreferences 保存的颜色?
【发布时间】:2019-06-06 17:24:02
【问题描述】:

我有一个 PreferenceScreen 用于保存一些参数,并且我想使用此参数来更改位于应用程序其他位置的我的 recyclerview 的所有元素的视觉效果。

我不知道在创建元素时如何或在何处放置这些值以设置此首选项。

Recycler 的所有元素都包含在带有一些 Textview 的水平线性布局中;我想更改布局的背景颜色和文本视图的文本颜色(使用首选项值)

我试图从 RecyclerView 所在的视图中恢复并传递这些数据,但我不知道如何在适配器中执行此操作

这是适配器代码

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”更改背景颜色,那将是完美的

【问题讨论】:

    标签: java android xml sharedpreferences


    【解决方案1】:

    好的,我修好了

    在适配器类(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") 在这种情况下对我不起作用)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多