как установить значение общих настроек для макета - PullRequest
1 голос
/ 01 октября 2011

Я уже разместил все, что касается общих настроек, и в одном из своих занятий я также могу получить значения общих настроек, как это в logcat. String i = prefs.getString ("bgColor", "# f2345"); System.out.println (я);

Но в этом упражнении я использую такой макет SimpleCursorAdapter sca = новый SimpleCursorAdapter (это, R.layout.country_row, с, от, до);
setListAdapter (SCA); где "country_row" - это мой файл макета XML, который выглядит следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
android:orientation="horizontal">    

  <TextView android:id="@+id/year"
      android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ff000099"
android:background="#ffffff80"
android:padding="10dp"
android:textSize="16sp"
android:text="1964"/>

<TextView android:id="@+id/country"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:textColor="#ffffff80"
android:background="#ff000099"
android:padding="10dp"
android:textSize="16sp"
android:text="Sweden"/>

Теперь, используя значения, которые я уже получаю из настроек, я хочу изменить здесь, например, отображаемый цвет фона или размер шрифта. Все, что я хочу сейчас, - это просто включить эти значения общих предпочтений в мой XML-файл макета. Как я могу это сделать, я не могу этого сделать?


На самом деле я могу получить значения из общих настроек, как это

boolean i = prefs.getBoolean("fontBold", false);
System.out.println(i);
if (i){
      TextView tv = (TextView)findViewById(R.id.year);
      tv.setTypeface(null, Typeface.BOLD);//null pointer 
}

В адаптере курсора я уже применяю макет country_row.xml. Итак, как я могу использовать значение предпочтений, которое я получаю для этого макета. Булево значение, которое я получаю из флажка, является правильным, поскольку я также распечатал его, чтобы увидеть его. Но когда я пытаюсь сделать то же, что и выше, это не работает, и программа вылетает, сообщая об исключении нулевого указателя.

Здесь я застрял в том, что .... я получаю правильное значение предпочтений, но не знаю, как его использовать или применить к моему существующему макету ... или мне нужно сделать другой макет ... Я не уверен в этом.

Ответы [ 3 ]

1 голос
/ 01 октября 2011

Я думаю, что вы хотите динамически изменять некоторые параметры макета в кодах. Как правило, вы можете установить атрибуты для представления (Layout, TextView, EditText и т. Д.) Либо по коду, либо по XML-файлу. Возьмите макет в качестве примера. Сначала добавьте атрибут id в макет.

<LinearLayoout android:id="@+id/layoutID" .../>

Тогда

LinearLayout layout=(LinearLayout)findViewById(R.id.layoutID) //get the layout object.
layout.setBackgroundColor (color from your preferences);

Выше - основная идея. Пожалуйста, прочитайте документ SDK, чтобы найти более подробную информацию.

0 голосов
/ 02 октября 2011

На самом деле, как мне удалось изменить макет представления, так и сделал. ContentResolver contentResolver = getContentResolver ();

    Cursor c = contentResolver.query(CONTENT_URI, null, null, null, sortOrder);     
    String[] from = new String[] { "year", "country" };
    int[] to = new int[] { R.id.year, R.id.country };       
    SimpleCursorAdapter sca = new MySimpleCursorAdapter(this, R.layout.country_row,
            c, from, to);  
    setListAdapter(sca);

class MySimpleCursorAdapter  extends SimpleCursorAdapter{

    public MySimpleCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) {
        super(context, layout, c, from, to);
        // TODO Auto-generated constructor stub
    }


    @Override   // Called when updating the ListView
    public View getView(int position, View convertView, ViewGroup parent) {
        /* Reuse super handling ==> A TextView from R.layout.list_item */
        View v =  super.getView(position,convertView,parent); 

        TextView tYear = (TextView) v.findViewById(R.id.year);
        TextView tCountry = (TextView) v.findViewById(R.id.country);

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
        boolean font_size = prefs.getBoolean("fontSize", false);
        boolean italic_font = prefs.getBoolean("fontItalic", false);


        String listpref = prefs.getString("bgColor", "#ffffff80");
        //System.out.println(listpref);
        tYear.setBackgroundColor(Color.parseColor(listpref));
        tCountry.setBackgroundColor(Color.parseColor(listpref));


        if (font_size){
            tYear.setTextSize(25);
            tCountry.setTextSize(25);
        }


        if (italic_font){
            tYear.setTypeface(null, Typeface.ITALIC);
            tCountry.setTypeface(null, Typeface.ITALIC);
        }

        //tv.setBackgroundColor(col);

        return v;       
    }
}
0 голосов
/ 01 октября 2011

Как и ответ Хуан, 1) Вам необходимо создать ссылку на макет или представление, для которого вы должны изменить свойства. 2) После этого получите значение предпочтения в соответствующей переменной. 3) Установите значение для этого макета или вида, чтобы получить эффект.

Это будет угрюмо работать. Для получения дополнительной информации см. Пример ниже, в котором флажок, в котором я выполняю некоторые действия, например, воспроизведение музыки.

myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
    fullResultSound = myPrefs.getBoolean("FullResultIsOn", false);
    lessResultSound = myPrefs.getBoolean("LessResultIsOn", false);

    System.out.println("============================= The FullResultSound in Result Page is: "+fullResultSound);
    System.out.println("============================= The LessResultSound in Result Page is: "+lessResultSound);


if(fullResultSound)
        {
            playSound(soundFileForFullResult);
        }
        else
        {
            playSound();
        }

Надеюсь, это сработает для вас. Если нет, то скажи мне.

...